Merge "Second pass tying into dns cache per interface"
diff --git a/Android.mk b/Android.mk
index f45f977..af3b37e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -78,8 +78,9 @@
 	core/java/android/app/IThumbnailReceiver.aidl \
 	core/java/android/app/IThumbnailRetriever.aidl \
 	core/java/android/app/ITransientNotification.aidl \
+	core/java/android/app/IUiAutomationConnection.aidl \
 	core/java/android/app/IUiModeManager.aidl \
-    core/java/android/app/IUserSwitchObserver.aidl \
+	core/java/android/app/IUserSwitchObserver.aidl \
 	core/java/android/app/IWallpaperManager.aidl \
 	core/java/android/app/IWallpaperManagerCallback.aidl \
 	core/java/android/app/admin/IDevicePolicyManager.aidl \
@@ -165,6 +166,7 @@
 	core/java/android/speech/IRecognitionService.aidl \
 	core/java/android/speech/tts/ITextToSpeechCallback.aidl \
 	core/java/android/speech/tts/ITextToSpeechService.aidl \
+	core/java/com/android/internal/app/IAppOpsCallback.aidl \
 	core/java/com/android/internal/app/IAppOpsService.aidl \
 	core/java/com/android/internal/app/IBatteryStats.aidl \
 	core/java/com/android/internal/app/IUsageStats.aidl \
@@ -219,10 +221,7 @@
 	telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl \
 	telephony/java/com/android/internal/telephony/IWapPushManager.aidl \
 	wifi/java/android/net/wifi/IWifiManager.aidl \
-	wifi/java/android/net/wifi/p2p/IWifiP2pManager.aidl \
-	voip/java/android/net/sip/ISipSession.aidl \
-	voip/java/android/net/sip/ISipSessionListener.aidl \
-	voip/java/android/net/sip/ISipService.aidl
+	wifi/java/android/net/wifi/p2p/IWifiP2pManager.aidl
 #
 
 
@@ -353,6 +352,8 @@
 	../../external/apache-http/src/org/apache/http \
 	../opt/telephony/src/java/android/telephony \
 	../opt/telephony/src/java/android/telephony/gsm \
+	../opt/net/voip/src/java/android/net/rtp \
+	../opt/net/voip/src/java/android/net/sip
 
 # These are relative to frameworks/base
 dirs_to_check_apis := \
@@ -405,6 +406,7 @@
 			framework \
 			mms-common \
 			telephony-common \
+			voip-common \
 
 framework_docs_LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 framework_docs_LOCAL_DROIDDOC_HTML_DIR := docs/html
@@ -441,7 +443,8 @@
 
 # the list here should match the list of samples included in the sdk samples package
 # (see development/build/sdk.atree)
-web_docs_sample_code_flags := \
+# remove htmlified samples for now -- samples are still available through the SDK
+# web_docs_sample_code_flags := \
 		-hdf android.hasSamples 1 \
 		-samplecode $(sample_dir)/AccelerometerPlay \
 		            resources/samples/AccelerometerPlay "Accelerometer Play" \
@@ -670,7 +673,7 @@
 $(full_target): $(static_doc_index_redirect)
 $(full_target): $(framework_built)
 
-# ==== docs for the web (on the google app engine server) =======================
+# ==== docs for the web (on the androiddevdocs app engine server) =======================
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES:=$(framework_docs_LOCAL_SRC_FILES)
@@ -699,6 +702,37 @@
 # explicitly specify that online-sdk depends on framework-res and any generated docs
 $(full_target): framework-res-package-target
 
+# ==== docs for the web (on the devsite app engine server) =======================
+include $(CLEAR_VARS)
+LOCAL_SRC_FILES:=$(framework_docs_LOCAL_SRC_FILES)
+LOCAL_INTERMEDIATE_SOURCES:=$(framework_docs_LOCAL_INTERMEDIATE_SOURCES)
+LOCAL_STATIC_JAVA_LIBRARIES:=$(framework_docs_LOCAL_STATIC_JAVA_LIBRARIES)
+LOCAL_JAVA_LIBRARIES:=$(framework_docs_LOCAL_JAVA_LIBRARIES)
+LOCAL_MODULE_CLASS:=$(framework_docs_LOCAL_MODULE_CLASS)
+LOCAL_DROIDDOC_SOURCE_PATH:=$(framework_docs_LOCAL_DROIDDOC_SOURCE_PATH)
+LOCAL_DROIDDOC_HTML_DIR:=$(framework_docs_LOCAL_DROIDDOC_HTML_DIR)
+LOCAL_ADDITIONAL_JAVA_DIR:=$(framework_docs_LOCAL_ADDITIONAL_JAVA_DIR)
+LOCAL_ADDITIONAL_DEPENDENCIES:=$(framework_docs_LOCAL_ADDITIONAL_DEPENDENCIES)
+# specify a second html input dir and an output path relative to OUT_DIR)
+LOCAL_ADDITIONAL_HTML_DIR:=docs/html-intl /
+
+LOCAL_MODULE := ds
+
+LOCAL_DROIDDOC_OPTIONS:= \
+		$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+		$(web_docs_sample_code_flags) \
+		-devsite \
+		-toroot / \
+		-hdf android.whichdoc online \
+		-hdf devsite true
+
+LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
+
+include $(BUILD_DROIDDOC)
+
+# explicitly specify that ds depends on framework-res and any generated docs
+$(full_target): framework-res-package-target
+
 # ==== docs that have all of the stuff that's @hidden =======================
 include $(CLEAR_VARS)
 
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 06f7c54..5634b43 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -149,7 +149,12 @@
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/view/IDisplayMagnificationController.P)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/view/IDisplayMagnificationMediator.java)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/view/IDisplayMagnificationMediator.P)
-
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/voip)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/librtp_jni_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/librtp_jni.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/lib/librtp_jni.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/symbols/system/lib/librtp_jni.so)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/telephony/java/com/android/internal/telephony/SmsRawData.*)
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
diff --git a/api/current.txt b/api/current.txt
index d367a00..0569b9d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -36,6 +36,8 @@
     field public static final java.lang.String CALL_PHONE = "android.permission.CALL_PHONE";
     field public static final java.lang.String CALL_PRIVILEGED = "android.permission.CALL_PRIVILEGED";
     field public static final java.lang.String CAMERA = "android.permission.CAMERA";
+    field public static final java.lang.String CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = "android.permission.CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY";
+    field public static final java.lang.String CAN_REQUEST_TOUCH_EXPLORATION_MODE = "android.permission.CAN_REQUEST_TOUCH_EXPLORATION_MODE";
     field public static final java.lang.String CHANGE_COMPONENT_ENABLED_STATE = "android.permission.CHANGE_COMPONENT_ENABLED_STATE";
     field public static final java.lang.String CHANGE_CONFIGURATION = "android.permission.CHANGE_CONFIGURATION";
     field public static final java.lang.String CHANGE_NETWORK_STATE = "android.permission.CHANGE_NETWORK_STATE";
@@ -57,6 +59,7 @@
     field public static final java.lang.String GET_ACCOUNTS = "android.permission.GET_ACCOUNTS";
     field public static final java.lang.String GET_PACKAGE_SIZE = "android.permission.GET_PACKAGE_SIZE";
     field public static final java.lang.String GET_TASKS = "android.permission.GET_TASKS";
+    field public static final java.lang.String GET_TOP_ACTIVITY_INFO = "android.permission.GET_TOP_ACTIVITY_INFO";
     field public static final java.lang.String GLOBAL_SEARCH = "android.permission.GLOBAL_SEARCH";
     field public static final java.lang.String HARDWARE_TEST = "android.permission.HARDWARE_TEST";
     field public static final java.lang.String INJECT_EVENTS = "android.permission.INJECT_EVENTS";
@@ -98,6 +101,7 @@
     field public static final java.lang.String RECORD_AUDIO = "android.permission.RECORD_AUDIO";
     field public static final java.lang.String REORDER_TASKS = "android.permission.REORDER_TASKS";
     field public static final deprecated java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
+    field public static final java.lang.String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
     field public static final java.lang.String SEND_SMS = "android.permission.SEND_SMS";
     field public static final java.lang.String SET_ACTIVITY_WATCHER = "android.permission.SET_ACTIVITY_WATCHER";
     field public static final java.lang.String SET_ALARM = "com.android.alarm.permission.SET_ALARM";
@@ -140,6 +144,7 @@
 
   public static final class Manifest.permission_group {
     ctor public Manifest.permission_group();
+    field public static final java.lang.String ACCESSIBILITY_FEATURES = "android.permission-group.ACCESSIBILITY_FEATURES";
     field public static final java.lang.String ACCOUNTS = "android.permission-group.ACCOUNTS";
     field public static final java.lang.String AFFECTS_BATTERY = "android.permission-group.AFFECTS_BATTERY";
     field public static final java.lang.String APP_INFO = "android.permission-group.APP_INFO";
@@ -724,6 +729,7 @@
     field public static final int minSdkVersion = 16843276; // 0x101020c
     field public static final int minWidth = 16843071; // 0x101013f
     field public static final int mipMap = 16843725; // 0x10103cd
+    field public static final int mirrorForRtl = 16843726; // 0x10103ce
     field public static final int mode = 16843134; // 0x101017e
     field public static final int moreIcon = 16843061; // 0x1010135
     field public static final int multiprocess = 16842771; // 0x1010013
@@ -2103,6 +2109,8 @@
     field public static final int FEEDBACK_SPOKEN = 1; // 0x1
     field public static final int FEEDBACK_VISUAL = 8; // 0x8
     field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+    field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+    field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
     field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
     field public int eventTypes;
     field public int feedbackType;
@@ -2738,6 +2746,7 @@
     method public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder);
     method public boolean onPrepareOptionsMenu(android.view.Menu);
     method public boolean onPreparePanel(int, android.view.View, android.view.Menu);
+    method public void onProvideAssistData(android.os.Bundle);
     method protected void onRestart();
     method protected void onRestoreInstanceState(android.os.Bundle);
     method protected void onResume();
@@ -3077,7 +3086,9 @@
     method public void onTerminate();
     method public void onTrimMemory(int);
     method public void registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks);
+    method public void registerOnProvideAssistData(android.app.Application.OnProvideAssistData);
     method public void unregisterActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks);
+    method public void unregisterOnProvideAssistData(android.app.Application.OnProvideAssistData);
   }
 
   public static abstract interface Application.ActivityLifecycleCallbacks {
@@ -3090,6 +3101,10 @@
     method public abstract void onActivityStopped(android.app.Activity);
   }
 
+  public static abstract interface Application.OnProvideAssistData {
+    method public abstract void onProvideAssistData(android.app.Activity, android.os.Bundle);
+  }
+
   public class ApplicationErrorReport implements android.os.Parcelable {
     ctor public ApplicationErrorReport();
     method public int describeContents();
@@ -3579,6 +3594,7 @@
     method public android.content.ComponentName getComponentName();
     method public android.content.Context getContext();
     method public android.content.Context getTargetContext();
+    method public android.app.UiAutomation getUiAutomation();
     method public boolean invokeContextMenuAction(android.app.Activity, int, int);
     method public boolean invokeMenuActionSync(android.app.Activity, int, int);
     method public boolean isProfiling();
@@ -4136,6 +4152,26 @@
     method public abstract void onTimeSet(android.widget.TimePicker, int, int);
   }
 
+  public final class UiAutomation {
+    method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(java.lang.Runnable, com.android.internal.util.Predicate<android.view.accessibility.AccessibilityEvent>, long) throws java.util.concurrent.TimeoutException;
+    method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
+    method public boolean injectInputEvent(android.view.InputEvent, boolean);
+    method public void setOnAccessibilityEventListener(android.app.UiAutomation.OnAccessibilityEventListener);
+    method public boolean setRotation(int);
+    method public android.graphics.Bitmap takeScreenshot();
+    method public void waitForIdle(long, long) throws java.util.concurrent.TimeoutException;
+    field public static final int ROTATION_FREEZE_0 = 0; // 0x0
+    field public static final int ROTATION_FREEZE_180 = 2; // 0x2
+    field public static final int ROTATION_FREEZE_270 = 3; // 0x3
+    field public static final int ROTATION_FREEZE_90 = 1; // 0x1
+    field public static final int ROTATION_FREEZE_CURRENT = -1; // 0xffffffff
+    field public static final int ROTATION_UNFREEZE = -2; // 0xfffffffe
+  }
+
+  public static abstract interface UiAutomation.OnAccessibilityEventListener {
+    method public abstract void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+  }
+
   public class UiModeManager {
     method public void disableCarMode(int);
     method public void enableCarMode(int);
@@ -5114,6 +5150,7 @@
     method public int bulkInsert(android.net.Uri, android.content.ContentValues[]);
     method public android.os.Bundle call(java.lang.String, java.lang.String, android.os.Bundle);
     method public abstract int delete(android.net.Uri, java.lang.String, java.lang.String[]);
+    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
     method public final android.content.Context getContext();
     method public final android.content.pm.PathPermission[] getPathPermissions();
     method public final java.lang.String getReadPermission();
@@ -5900,7 +5937,10 @@
     field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST";
     field public static final android.os.Parcelable.Creator CREATOR;
     field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT";
+    field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE";
     field public static final deprecated java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE";
+    field public static final java.lang.String EXTRA_ASSIST_CONTEXT = "android.intent.extra.ASSIST_CONTEXT";
+    field public static final java.lang.String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE";
     field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC";
     field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
     field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC";
@@ -6627,6 +6667,7 @@
     method public abstract void verifyPendingInstall(int, int);
     field public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; // 0x0
     field public static final int COMPONENT_ENABLED_STATE_DISABLED = 2; // 0x2
+    field public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4; // 0x4
     field public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3; // 0x3
     field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1
     field public static final int DONT_KILL_APP = 1; // 0x1
@@ -6673,6 +6714,7 @@
     field public static final int GET_ACTIVITIES = 1; // 0x1
     field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
     field public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
+    field public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000
     field public static final int GET_GIDS = 256; // 0x100
     field public static final int GET_INSTRUMENTATION = 16; // 0x10
     field public static final int GET_INTENT_FILTERS = 32; // 0x20
@@ -10688,6 +10730,7 @@
     method public boolean hasAltitude();
     method public boolean hasBearing();
     method public boolean hasSpeed();
+    method public boolean isFromMockProvider();
     method public void removeAccuracy();
     method public void removeAltitude();
     method public void removeBearing();
@@ -20617,21 +20660,23 @@
   public class TextToSpeech.Engine {
     ctor public TextToSpeech.Engine();
     field public static final java.lang.String ACTION_CHECK_TTS_DATA = "android.speech.tts.engine.CHECK_TTS_DATA";
+    field public static final java.lang.String ACTION_GET_SAMPLE_TEXT = "android.speech.tts.engine.GET_SAMPLE_TEXT";
     field public static final java.lang.String ACTION_INSTALL_TTS_DATA = "android.speech.tts.engine.INSTALL_TTS_DATA";
     field public static final java.lang.String ACTION_TTS_DATA_INSTALLED = "android.speech.tts.engine.TTS_DATA_INSTALLED";
-    field public static final int CHECK_VOICE_DATA_BAD_DATA = -1; // 0xffffffff
+    field public static final deprecated int CHECK_VOICE_DATA_BAD_DATA = -1; // 0xffffffff
     field public static final int CHECK_VOICE_DATA_FAIL = 0; // 0x0
-    field public static final int CHECK_VOICE_DATA_MISSING_DATA = -2; // 0xfffffffe
-    field public static final int CHECK_VOICE_DATA_MISSING_VOLUME = -3; // 0xfffffffd
+    field public static final deprecated int CHECK_VOICE_DATA_MISSING_DATA = -2; // 0xfffffffe
+    field public static final deprecated int CHECK_VOICE_DATA_MISSING_VOLUME = -3; // 0xfffffffd
     field public static final int CHECK_VOICE_DATA_PASS = 1; // 0x1
     field public static final int DEFAULT_STREAM = 3; // 0x3
     field public static final java.lang.String EXTRA_AVAILABLE_VOICES = "availableVoices";
-    field public static final java.lang.String EXTRA_CHECK_VOICE_DATA_FOR = "checkVoiceDataFor";
-    field public static final java.lang.String EXTRA_TTS_DATA_INSTALLED = "dataInstalled";
+    field public static final deprecated java.lang.String EXTRA_CHECK_VOICE_DATA_FOR = "checkVoiceDataFor";
+    field public static final java.lang.String EXTRA_SAMPLE_TEXT = "sampleText";
+    field public static final deprecated java.lang.String EXTRA_TTS_DATA_INSTALLED = "dataInstalled";
     field public static final java.lang.String EXTRA_UNAVAILABLE_VOICES = "unavailableVoices";
-    field public static final java.lang.String EXTRA_VOICE_DATA_FILES = "dataFiles";
-    field public static final java.lang.String EXTRA_VOICE_DATA_FILES_INFO = "dataFilesInfo";
-    field public static final java.lang.String EXTRA_VOICE_DATA_ROOT_DIRECTORY = "dataRoot";
+    field public static final deprecated java.lang.String EXTRA_VOICE_DATA_FILES = "dataFiles";
+    field public static final deprecated java.lang.String EXTRA_VOICE_DATA_FILES_INFO = "dataFilesInfo";
+    field public static final deprecated java.lang.String EXTRA_VOICE_DATA_ROOT_DIRECTORY = "dataRoot";
     field public static final java.lang.String INTENT_ACTION_TTS_SERVICE = "android.intent.action.TTS_SERVICE";
     field public static final java.lang.String KEY_FEATURE_EMBEDDED_SYNTHESIS = "embeddedTts";
     field public static final java.lang.String KEY_FEATURE_NETWORK_SYNTHESIS = "networkTts";
@@ -20653,7 +20698,7 @@
     method public abstract void onInit(int);
   }
 
-  public static abstract interface TextToSpeech.OnUtteranceCompletedListener {
+  public static abstract deprecated interface TextToSpeech.OnUtteranceCompletedListener {
     method public abstract void onUtteranceCompleted(java.lang.String);
   }
 
@@ -21031,6 +21076,7 @@
     method public boolean isNetworkRoaming();
     method public void listen(android.telephony.PhoneStateListener, int);
     field public static final java.lang.String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE";
+    field public static final java.lang.String ACTION_RESPOND_VIA_MESSAGE = "android.intent.action.RESPOND_VIA_MESSAGE";
     field public static final int CALL_STATE_IDLE = 0; // 0x0
     field public static final int CALL_STATE_OFFHOOK = 2; // 0x2
     field public static final int CALL_STATE_RINGING = 1; // 0x1
@@ -21294,6 +21340,7 @@
     ctor public InstrumentationTestRunner();
     method public junit.framework.TestSuite getAllTests();
     method protected android.test.AndroidTestRunner getAndroidTestRunner();
+    method public android.os.Bundle getArguments();
     method public java.lang.ClassLoader getLoader();
     method public junit.framework.TestSuite getTestSuite();
     field public static final java.lang.String REPORT_KEY_NAME_CLASS = "class";
@@ -24141,6 +24188,8 @@
     field public static final int KEYCODE_BACKSLASH = 73; // 0x49
     field public static final int KEYCODE_BOOKMARK = 174; // 0xae
     field public static final int KEYCODE_BREAK = 121; // 0x79
+    field public static final int KEYCODE_BRIGHTNESS_DOWN = 220; // 0xdc
+    field public static final int KEYCODE_BRIGHTNESS_UP = 221; // 0xdd
     field public static final int KEYCODE_BUTTON_1 = 188; // 0xbc
     field public static final int KEYCODE_BUTTON_10 = 197; // 0xc5
     field public static final int KEYCODE_BUTTON_11 = 198; // 0xc6
@@ -26240,6 +26289,7 @@
     method public void addChild(android.view.View, int);
     method public int describeContents();
     method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String);
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByViewId(java.lang.String);
     method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
     method public android.view.accessibility.AccessibilityNodeInfo focusSearch(int);
     method public int getActions();
@@ -26255,11 +26305,15 @@
     method public java.lang.CharSequence getPackageName();
     method public android.view.accessibility.AccessibilityNodeInfo getParent();
     method public java.lang.CharSequence getText();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method public java.lang.CharSequence getViewIdResourceName();
     method public int getWindowId();
     method public boolean isAccessibilityFocused();
     method public boolean isCheckable();
     method public boolean isChecked();
     method public boolean isClickable();
+    method public boolean isEditable();
     method public boolean isEnabled();
     method public boolean isFocusable();
     method public boolean isFocused();
@@ -26284,6 +26338,7 @@
     method public void setClassName(java.lang.CharSequence);
     method public void setClickable(boolean);
     method public void setContentDescription(java.lang.CharSequence);
+    method public void setEditable(boolean);
     method public void setEnabled(boolean);
     method public void setFocusable(boolean);
     method public void setFocused(boolean);
@@ -26302,24 +26357,33 @@
     method public void setSource(android.view.View);
     method public void setSource(android.view.View, int);
     method public void setText(java.lang.CharSequence);
+    method public void setTextSelection(int, int);
+    method public void setViewIdResourceName(java.lang.CharSequence);
     method public void setVisibleToUser(boolean);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+    field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
     field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
     field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+    field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+    field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
     field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
     field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
     field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
     field public static final int ACTION_CLICK = 16; // 0x10
+    field public static final int ACTION_COPY = 16384; // 0x4000
+    field public static final int ACTION_CUT = 65536; // 0x10000
     field public static final int ACTION_FOCUS = 1; // 0x1
     field public static final int ACTION_LONG_CLICK = 32; // 0x20
     field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
     field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+    field public static final int ACTION_PASTE = 32768; // 0x8000
     field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
     field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
     field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
     field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
     field public static final int ACTION_SELECT = 4; // 0x4
+    field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
     field public static final android.os.Parcelable.Creator CREATOR;
     field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
     field public static final int FOCUS_INPUT = 1; // 0x1
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index add7a23..3c1fbfe 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -24,6 +24,7 @@
 import android.app.IActivityManager;
 import android.app.IInstrumentationWatcher;
 import android.app.Instrumentation;
+import android.app.UiAutomationConnection;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.IIntentReceiver;
@@ -487,11 +488,11 @@
             IActivityManager.WaitResult result = null;
             int res;
             if (mWaitOption) {
-                result = mAm.startActivityAndWait(null, intent, mimeType,
+                result = mAm.startActivityAndWait(null, null, intent, mimeType,
                             null, null, 0, mStartFlags, mProfileFile, fd, null, mUserId);
                 res = result.result;
             } else {
-                res = mAm.startActivityAsUser(null, intent, mimeType,
+                res = mAm.startActivityAsUser(null, null, intent, mimeType,
                         null, null, 0, mStartFlags, mProfileFile, fd, null, mUserId);
             }
             PrintStream out = mWaitOption ? System.out : System.err;
@@ -613,8 +614,8 @@
         Intent intent = makeIntent(UserHandle.USER_ALL);
         IntentReceiver receiver = new IntentReceiver();
         System.out.println("Broadcasting: " + intent);
-        mAm.broadcastIntent(null, intent, null, receiver, 0, null, null, null, true, false,
-                mUserId);
+        mAm.broadcastIntent(null, intent, null, receiver, 0, null, null, null,
+                android.app.AppOpsManager.OP_NONE, true, false, mUserId);
         receiver.waitForFinish();
     }
 
@@ -661,10 +662,13 @@
         if (cn == null) throw new IllegalArgumentException("Bad component name: " + cnArg);
 
         InstrumentationWatcher watcher = null;
+        UiAutomationConnection connection = null;
         if (wait) {
             watcher = new InstrumentationWatcher();
             watcher.setRawOutput(rawMode);
+            connection = new UiAutomationConnection();
         }
+
         float[] oldAnims = null;
         if (no_window_animation) {
             oldAnims = wm.getAnimationScales();
@@ -672,7 +676,7 @@
             wm.setAnimationScale(1, 0.0f);
         }
 
-        if (!mAm.startInstrumentation(cn, profileFile, 0, args, watcher, userId)) {
+        if (!mAm.startInstrumentation(cn, profileFile, 0, args, watcher, connection, userId)) {
             throw new AndroidException("INSTRUMENTATION_FAILED: " + cn.flattenToString());
         }
 
diff --git a/cmds/content/src/com/android/commands/content/Content.java b/cmds/content/src/com/android/commands/content/Content.java
index 2ae2071..c0a1e3b 100644
--- a/cmds/content/src/com/android/commands/content/Content.java
+++ b/cmds/content/src/com/android/commands/content/Content.java
@@ -24,6 +24,7 @@
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Binder;
+import android.os.Bundle;
 import android.os.IBinder;
 import android.os.UserHandle;
 import android.text.TextUtils;
@@ -102,6 +103,12 @@
                 + "equal to \"new_setting\" and sort the result by name in ascending order.\n"
         + "  adb shell content query --uri content://settings/secure --projection name:value"
                 + " --where \"name=\'new_setting\'\" --sort \"name ASC\"\n"
+        + "\n"
+        + "usage: adb shell content call --uri <URI> --method <METHOD> [--arg <ARG>]\n"
+        + "       [--extra <BINDING> ...]\n"
+        + "  <METHOD> is the name of a provider-defined method\n"
+        + "  <ARG> is an optional string argument\n"
+        + "  <BINDING> is like --bind above, typed data of the form <KEY>:{b,s,i,l,f,d}:<VAL>\n"
         + "\n";
 
     private static class Parser {
@@ -109,12 +116,16 @@
         private static final String ARGUMENT_DELETE = "delete";
         private static final String ARGUMENT_UPDATE = "update";
         private static final String ARGUMENT_QUERY = "query";
+        private static final String ARGUMENT_CALL = "call";
         private static final String ARGUMENT_WHERE = "--where";
         private static final String ARGUMENT_BIND = "--bind";
         private static final String ARGUMENT_URI = "--uri";
         private static final String ARGUMENT_USER = "--user";
         private static final String ARGUMENT_PROJECTION = "--projection";
         private static final String ARGUMENT_SORT = "--sort";
+        private static final String ARGUMENT_METHOD = "--method";
+        private static final String ARGUMENT_ARG = "--arg";
+        private static final String ARGUMENT_EXTRA = "--extra";
         private static final String TYPE_BOOLEAN = "b";
         private static final String TYPE_STRING = "s";
         private static final String TYPE_INTEGER = "i";
@@ -141,6 +152,8 @@
                     return parseUpdateCommand();
                 } else if (ARGUMENT_QUERY.equals(operation)) {
                     return parseQueryCommand();
+                } else if (ARGUMENT_CALL.equals(operation)) {
+                    return parseCallCommand();
                 } else {
                     throw new IllegalArgumentException("Unsupported operation: " + operation);
                 }
@@ -228,6 +241,38 @@
             return new UpdateCommand(uri, userId, values, where);
         }
 
+        public CallCommand parseCallCommand() {
+            String method = null;
+            int userId = UserHandle.USER_OWNER;
+            String arg = null;
+            Uri uri = null;
+            ContentValues values = new ContentValues();
+            for (String argument; (argument = mTokenizer.nextArg())!= null;) {
+                if (ARGUMENT_URI.equals(argument)) {
+                    uri = Uri.parse(argumentValueRequired(argument));
+                } else if (ARGUMENT_USER.equals(argument)) {
+                    userId = Integer.parseInt(argumentValueRequired(argument));
+                } else if (ARGUMENT_METHOD.equals(argument)) {
+                    method = argumentValueRequired(argument);
+                } else if (ARGUMENT_ARG.equals(argument)) {
+                    arg = argumentValueRequired(argument);
+                } else if (ARGUMENT_EXTRA.equals(argument)) {
+                    parseBindValue(values);
+                } else {
+                    throw new IllegalArgumentException("Unsupported argument: " + argument);
+                }
+
+            }
+            if (uri == null) {
+                throw new IllegalArgumentException("Content provider URI not specified."
+                        + " Did you specify --uri argument?");
+            }
+            if (method == null) {
+                throw new IllegalArgumentException("Content provider method not specified.");
+            }
+            return new CallCommand(uri, userId, method, arg, values);
+        }
+
         public QueryCommand parseQueryCommand() {
             Uri uri = null;
             int userId = UserHandle.USER_OWNER;
@@ -376,6 +421,43 @@
         }
     }
 
+    private static class CallCommand extends Command {
+        final String mMethod, mArg;
+        Bundle mExtras = null;
+
+        public CallCommand(Uri uri, int userId, String method, String arg, ContentValues values) {
+            super(uri, userId);
+            mMethod = method;
+            mArg = arg;
+            if (values != null) {
+                mExtras = new Bundle();
+                for (String key : values.keySet()) {
+                    final Object val = values.get(key);
+                    if (val instanceof String) {
+                        mExtras.putString(key, (String) val);
+                    } else if (val instanceof Float) {
+                        mExtras.putFloat(key, (Float) val);
+                    } else if (val instanceof Double) {
+                        mExtras.putDouble(key, (Double) val);
+                    } else if (val instanceof Boolean) {
+                        mExtras.putBoolean(key, (Boolean) val);
+                    } else if (val instanceof Integer) {
+                        mExtras.putInt(key, (Integer) val);
+                    } else if (val instanceof Long) {
+                        mExtras.putLong(key, (Long) val);
+                    }
+                }
+            }
+        }
+
+        @Override
+        public void onExecute(IContentProvider provider) throws Exception {
+            Bundle result = provider.call(null, mMethod, mArg, mExtras);
+            final int size = result.size(); // unpack
+            System.out.println("Result: " + result);
+        }
+    }
+
     private static class QueryCommand extends DeleteCommand {
         final String[] mProjection;
         final String mSortOrder;
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index 39539b4..f0e3370 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -135,6 +135,11 @@
             return;
         }
 
+        if ("disable-until-used".equals(op)) {
+            runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED);
+            return;
+        }
+
         if ("grant".equals(op)) {
             runGrantRevokePermission(true);
             return;
@@ -1178,6 +1183,8 @@
                 return "disabled";
             case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER:
                 return "disabled-user";
+            case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED:
+                return "disabled-until-used";
         }
         return "unknown";
     }
@@ -1459,6 +1466,7 @@
         System.err.println("       pm enable [--user USER_ID] PACKAGE_OR_COMPONENT");
         System.err.println("       pm disable [--user USER_ID] PACKAGE_OR_COMPONENT");
         System.err.println("       pm disable-user [--user USER_ID] PACKAGE_OR_COMPONENT");
+        System.err.println("       pm disable-until-used [--user USER_ID] PACKAGE_OR_COMPONENT");
         System.err.println("       pm grant PACKAGE PERMISSION");
         System.err.println("       pm revoke PACKAGE PERMISSION");
         System.err.println("       pm set-install-location [0/auto] [1/internal] [2/external]");
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 7efe189..8dddbc1 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -339,7 +339,10 @@
 
     private static final String LOG_TAG = "AccessibilityService";
 
-    interface Callbacks {
+    /**
+     * @hide
+     */
+    public interface Callbacks {
         public void onAccessibilityEvent(AccessibilityEvent event);
         public void onInterrupt();
         public void onServiceConnected();
@@ -538,8 +541,10 @@
     /**
      * Implements the internal {@link IAccessibilityServiceClient} interface to convert
      * incoming calls to it back to calls on an {@link AccessibilityService}.
+     *
+     * @hide
      */
-    static class IAccessibilityServiceClientWrapper extends IAccessibilityServiceClient.Stub
+    public static class IAccessibilityServiceClientWrapper extends IAccessibilityServiceClient.Stub
             implements HandlerCaller.Callback {
 
         static final int NO_ID = -1;
@@ -610,6 +615,7 @@
                         mCallback.onServiceConnected();
                     } else {
                         AccessibilityInteractionClient.getInstance().removeConnection(connectionId);
+                        AccessibilityInteractionClient.getInstance().clearCache();
                         mCallback.onSetConnectionId(AccessibilityInteractionClient.NO_ID);
                     }
                     return;
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 75a4f83..033a598 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -33,6 +33,7 @@
 import android.util.Xml;
 import android.view.View;
 import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -148,8 +149,47 @@
      * accessibility service that has this flag set. Hence, clearing this
      * flag does not guarantee that the device will not be in touch exploration
      * mode since there may be another enabled service that requested it.
+     * <p>
+     * For accessibility services targeting API version higher than
+     * {@link Build.VERSION_CODES#JELLY_BEAN_MR1} that want to set
+     * this flag have to request the
+     * {@link android.Manifest.permission#CAN_REQUEST_TOUCH_EXPLORATION_MODE}
+     * permission or the flag will be ignored.
+     * </p>
+     * <p>
+     * Services targeting API version equal to or lower than
+     * {@link Build.VERSION_CODES#JELLY_BEAN_MR1} will work normally, i.e.
+     * the first time they are run, if this flag is specified, a dialog is
+     * shown to the user to confirm enabling explore by touch.
+     * </p>
      */
-    public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE= 0x0000004;
+    public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 0x0000004;
+
+    /**
+     * This flag requests from the system to enable web accessibility enhancing
+     * extensions. Such extensions aim to provide improved accessibility support
+     * for content presented in a {@link android.webkit.WebView}. An example of such
+     * an extension is injecting JavaScript from a secure source. The system will enable
+     * enhanced web accessibility if there is at least one accessibility service
+     * that has this flag set. Hence, clearing this flag does not guarantee that the
+     * device will not have enhanced web accessibility enabled since there may be
+     * another enabled service that requested it.
+     * <p>
+     * Clients that want to set this flag have to request the
+     * {@link android.Manifest.permission#CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY}
+     * permission or the flag will be ignored.
+     * </p>
+     */
+    public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 0x00000008;
+
+    /**
+     * This flag requests that the {@link AccessibilityNodeInfo}s obtained
+     * by an {@link AccessibilityService} contain the id of the source view.
+     * The source view id will be a fully qualified resource name of the
+     * form "package:id/name", for example "foo.bar:id/my_list", and it is
+     * useful for UI test automation. This flag is not set by default.
+     */
+    public static final int FLAG_REPORT_VIEW_IDS = 0x00000010;
 
     /**
      * The event types an {@link AccessibilityService} is interested in.
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
index f33f503..7a29f35 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
@@ -85,15 +85,15 @@
      *     where to start the search. Use
      *     {@link android.view.accessibility.AccessibilityNodeInfo#ROOT_NODE_ID}
      *     to start from the root.
-     * @param id The id of the node.
+     * @param viewId The fully qualified resource name of the view id to find.
      * @param interactionId The id of the interaction for matching with the callback result.
      * @param callback Callback which to receive the result.
      * @param threadId The id of the calling thread.
      * @return Whether the call succeeded.
      */
-    boolean findAccessibilityNodeInfoByViewId(int accessibilityWindowId, long accessibilityNodeId,
-        int viewId, int interactionId, IAccessibilityInteractionConnectionCallback callback,
-        long threadId);
+    boolean findAccessibilityNodeInfosByViewId(int accessibilityWindowId,
+        long accessibilityNodeId, String viewId, int interactionId,
+        IAccessibilityInteractionConnectionCallback callback, long threadId);
 
     /**
      * Finds the {@link android.view.accessibility.AccessibilityNodeInfo} that has the specified
diff --git a/core/java/android/accessibilityservice/UiTestAutomationBridge.java b/core/java/android/accessibilityservice/UiTestAutomationBridge.java
deleted file mode 100644
index 6837386..0000000
--- a/core/java/android/accessibilityservice/UiTestAutomationBridge.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/*
- * Copyright (C) 2012 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.accessibilityservice;
-
-import android.accessibilityservice.AccessibilityService.Callbacks;
-import android.accessibilityservice.AccessibilityService.IAccessibilityServiceClientWrapper;
-import android.content.Context;
-import android.os.Bundle;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-import android.util.Log;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityInteractionClient;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.view.accessibility.IAccessibilityManager;
-
-import com.android.internal.util.Predicate;
-
-import java.util.List;
-import java.util.concurrent.TimeoutException;
-
-/**
- * This class represents a bridge that can be used for UI test
- * automation. It is responsible for connecting to the system,
- * keeping track of the last accessibility event, and exposing
- * window content querying APIs. This class is designed to be
- * used from both an Android application and a Java program
- * run from the shell.
- *
- * @hide
- */
-public class UiTestAutomationBridge {
-
-    private static final String LOG_TAG = UiTestAutomationBridge.class.getSimpleName();
-
-    private static final int TIMEOUT_REGISTER_SERVICE = 5000;
-
-    public static final int ACTIVE_WINDOW_ID = AccessibilityNodeInfo.ACTIVE_WINDOW_ID;
-
-    public static final long ROOT_NODE_ID = AccessibilityNodeInfo.ROOT_NODE_ID;
-
-    public static final int UNDEFINED = -1;
-
-    private static final int FIND_ACCESSIBILITY_NODE_INFO_PREFETCH_FLAGS =
-        AccessibilityNodeInfo.FLAG_PREFETCH_PREDECESSORS
-        | AccessibilityNodeInfo.FLAG_PREFETCH_SIBLINGS
-        | AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS;
-
-    private final Object mLock = new Object();
-
-    private volatile int mConnectionId = AccessibilityInteractionClient.NO_ID;
-
-    private IAccessibilityServiceClientWrapper mListener;
-
-    private AccessibilityEvent mLastEvent;
-
-    private volatile boolean mWaitingForEventDelivery;
-
-    private volatile boolean mUnprocessedEventAvailable;
-
-    private HandlerThread mHandlerThread;
-
-    /**
-     * Gets the last received {@link AccessibilityEvent}.
-     *
-     * @return The event.
-     */
-    public AccessibilityEvent getLastAccessibilityEvent() {
-        return mLastEvent;
-    }
-
-    /**
-     * Callback for receiving an {@link AccessibilityEvent}.
-     *
-     * <strong>Note:</strong> This method is <strong>NOT</strong>
-     * executed on the application main thread. The client are
-     * responsible for proper synchronization.
-     *
-     * @param event The received event.
-     */
-    public void onAccessibilityEvent(AccessibilityEvent event) {
-        /* hook - do nothing */
-    }
-
-    /**
-     * Callback for requests to stop feedback.
-     *
-     * <strong>Note:</strong> This method is <strong>NOT</strong>
-     * executed on the application main thread. The client are
-     * responsible for proper synchronization.
-     */
-    public void onInterrupt() {
-        /* hook - do nothing */
-    }
-
-    /**
-     * Connects this service.
-     *
-     * @throws IllegalStateException If already connected.
-     */
-    public void connect() {
-        if (isConnected()) {
-            throw new IllegalStateException("Already connected.");
-        }
-
-        // Serialize binder calls to a handler on a dedicated thread
-        // different from the main since we expose APIs that block
-        // the main thread waiting for a result the deliver of which
-        // on the main thread will prevent that thread from waking up.
-        // The serialization is needed also to ensure that events are
-        // examined in delivery order. Otherwise, a fair locking
-        // is needed for making sure the binder calls are interleaved
-        // with check for the expected event and also to make sure the
-        // binder threads are allowed to proceed in the received order.
-        mHandlerThread = new HandlerThread("UiTestAutomationBridge");
-        mHandlerThread.setDaemon(true);
-        mHandlerThread.start();
-        Looper looper = mHandlerThread.getLooper();
-
-        mListener = new IAccessibilityServiceClientWrapper(null, looper, new Callbacks() {
-            @Override
-            public void onServiceConnected() {
-                /* do nothing */
-            }
-
-            @Override
-            public void onInterrupt() {
-                UiTestAutomationBridge.this.onInterrupt();
-            }
-
-            @Override
-            public void onAccessibilityEvent(AccessibilityEvent event) {
-                synchronized (mLock) {
-                    while (true) {
-                        mLastEvent = AccessibilityEvent.obtain(event);
-                        if (!mWaitingForEventDelivery) {
-                            mLock.notifyAll();
-                            break;
-                        }
-                        if (!mUnprocessedEventAvailable) {
-                            mUnprocessedEventAvailable = true;
-                            mLock.notifyAll();
-                            break;
-                        }
-                        try {
-                            mLock.wait();
-                        } catch (InterruptedException ie) {
-                            /* ignore */
-                        }
-                    }
-                }
-                UiTestAutomationBridge.this.onAccessibilityEvent(event);
-            }
-
-            @Override
-            public void onSetConnectionId(int connectionId) {
-                synchronized (mLock) {
-                    mConnectionId = connectionId;
-                    mLock.notifyAll();
-                }
-            }
-
-            @Override
-            public boolean onGesture(int gestureId) {
-                return false;
-            }
-        });
-
-        final IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface(
-                ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
-
-        final AccessibilityServiceInfo info = new AccessibilityServiceInfo();
-        info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
-        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
-        info.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
-
-        try {
-            manager.registerUiTestAutomationService(mListener, info);
-        } catch (RemoteException re) {
-            throw new IllegalStateException("Cound not register UiAutomationService.", re);
-        }
-
-        synchronized (mLock) {
-            final long startTimeMillis = SystemClock.uptimeMillis();
-            while (true) {
-                if (isConnected()) {
-                    return;
-                }
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                final long remainingTimeMillis = TIMEOUT_REGISTER_SERVICE - elapsedTimeMillis;
-                if (remainingTimeMillis <= 0) {
-                    throw new IllegalStateException("Cound not register UiAutomationService.");
-                }
-                try {
-                    mLock.wait(remainingTimeMillis);
-                } catch (InterruptedException ie) {
-                    /* ignore */
-                }
-            }
-        }
-    }
-
-    /**
-     * Disconnects this service.
-     *
-     * @throws IllegalStateException If already disconnected.
-     */
-    public void disconnect() {
-        if (!isConnected()) {
-            throw new IllegalStateException("Already disconnected.");
-        }
-
-        mHandlerThread.quit();
-
-        IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface(
-              ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
-
-        try {
-            manager.unregisterUiTestAutomationService(mListener);
-        } catch (RemoteException re) {
-            Log.e(LOG_TAG, "Error while unregistering UiTestAutomationService", re);
-        }
-    }
-
-    /**
-     * Gets whether this service is connected.
-     *
-     * @return True if connected.
-     */
-    public boolean isConnected() {
-        return (mConnectionId != AccessibilityInteractionClient.NO_ID);
-    }
-
-    /**
-     * Executes a command and waits for a specific accessibility event type up
-     * to a given timeout.
-     *
-     * @param command The command to execute before starting to wait for the event.
-     * @param predicate Predicate for recognizing the awaited event.
-     * @param timeoutMillis The max wait time in milliseconds.
-     */
-    public AccessibilityEvent executeCommandAndWaitForAccessibilityEvent(Runnable command,
-            Predicate<AccessibilityEvent> predicate, long timeoutMillis)
-            throws TimeoutException, Exception {
-        // TODO: This is broken - remove from here when finalizing this as public APIs.
-        synchronized (mLock) {
-            // Prepare to wait for an event.
-            mWaitingForEventDelivery = true;
-            mUnprocessedEventAvailable = false;
-            if (mLastEvent != null) {
-                mLastEvent.recycle();
-                mLastEvent = null;
-            }
-            // Execute the command.
-            command.run();
-            // Wait for the event.
-            final long startTimeMillis = SystemClock.uptimeMillis();
-            while (true) {
-                // If the expected event is received, that's it.
-                if ((mUnprocessedEventAvailable && predicate.apply(mLastEvent))) {
-                    mWaitingForEventDelivery = false;
-                    mUnprocessedEventAvailable = false;
-                    mLock.notifyAll();
-                    return mLastEvent;
-                }
-                // Ask for another event.
-                mWaitingForEventDelivery = true;
-                mUnprocessedEventAvailable = false;
-                mLock.notifyAll();
-                // Check if timed out and if not wait.
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                final long remainingTimeMillis = timeoutMillis - elapsedTimeMillis;
-                if (remainingTimeMillis <= 0) {
-                    mWaitingForEventDelivery = false;
-                    mUnprocessedEventAvailable = false;
-                    mLock.notifyAll();
-                    throw new TimeoutException("Expacted event not received within: "
-                            + timeoutMillis + " ms.");
-                }
-                try {
-                    mLock.wait(remainingTimeMillis);
-                } catch (InterruptedException ie) {
-                    /* ignore */
-                }
-            }
-        }
-    }
-
-    /**
-     * Waits for the accessibility event stream to become idle, which is not to
-     * have received a new accessibility event within <code>idleTimeout</code>,
-     * and do so within a maximal global timeout as specified by
-     * <code>globalTimeout</code>.
-     *
-     * @param idleTimeout The timeout between two event to consider the device idle.
-     * @param globalTimeout The maximal global timeout in which to wait for idle.
-     */
-    public void waitForIdle(long idleTimeout, long globalTimeout) {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        long lastEventTime = (mLastEvent != null)
-                ? mLastEvent.getEventTime() : SystemClock.uptimeMillis();
-        synchronized (mLock) {
-            while (true) {
-                final long currentTimeMillis = SystemClock.uptimeMillis();
-                final long sinceLastEventTimeMillis = currentTimeMillis - lastEventTime;
-                if (sinceLastEventTimeMillis > idleTimeout) {
-                    return;
-                }
-                if (mLastEvent != null) {
-                    lastEventTime = mLastEvent.getEventTime();
-                }
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                final long remainingTimeMillis = globalTimeout - elapsedTimeMillis;
-                if (remainingTimeMillis <= 0) {
-                    return;
-                }
-                try {
-                     mLock.wait(idleTimeout);
-                } catch (InterruptedException e) {
-                     /* ignore */
-                }
-            }
-        }
-    }
-
-    /**
-     * Finds an {@link AccessibilityNodeInfo} by accessibility id in the active
-     * window. The search is performed from the root node.
-     *
-     * @param accessibilityNodeId A unique view id or virtual descendant id for
-     *     which to search.
-     * @return The current window scale, where zero means a failure.
-     */
-    public AccessibilityNodeInfo findAccessibilityNodeInfoByAccessibilityIdInActiveWindow(
-            long accessibilityNodeId) {
-        return findAccessibilityNodeInfoByAccessibilityId(ACTIVE_WINDOW_ID, accessibilityNodeId);
-    }
-
-    /**
-     * Finds an {@link AccessibilityNodeInfo} by accessibility id.
-     *
-     * @param accessibilityWindowId A unique window id. Use {@link #ACTIVE_WINDOW_ID} to query
-     *     the currently active window.
-     * @param accessibilityNodeId A unique view id or virtual descendant id for
-     *     which to search.
-     * @return The current window scale, where zero means a failure.
-     */
-    public AccessibilityNodeInfo findAccessibilityNodeInfoByAccessibilityId(
-            int accessibilityWindowId, long accessibilityNodeId) {
-        // Cache the id to avoid locking
-        final int connectionId = mConnectionId;
-        ensureValidConnection(connectionId);
-        return AccessibilityInteractionClient.getInstance()
-                .findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
-                        accessibilityWindowId, accessibilityNodeId,
-                        FIND_ACCESSIBILITY_NODE_INFO_PREFETCH_FLAGS);
-    }
-
-    /**
-     * Finds an {@link AccessibilityNodeInfo} by View id in the active
-     * window. The search is performed from the root node.
-     *
-     * @param viewId The id of a View.
-     * @return The current window scale, where zero means a failure.
-     */
-    public AccessibilityNodeInfo findAccessibilityNodeInfoByViewIdInActiveWindow(int viewId) {
-        return findAccessibilityNodeInfoByViewId(ACTIVE_WINDOW_ID, ROOT_NODE_ID, viewId);
-    }
-
-    /**
-     * Finds an {@link AccessibilityNodeInfo} by View id. The search is performed in
-     * the window whose id is specified and starts from the node whose accessibility
-     * id is specified.
-     *
-     * @param accessibilityWindowId A unique window id. Use
-     *     {@link  #ACTIVE_WINDOW_ID} to query the currently active window.
-     * @param accessibilityNodeId A unique view id or virtual descendant id from
-     *     where to start the search. Use {@link  #ROOT_NODE_ID} to start from the root.
-     * @param viewId The id of a View.
-     * @return The current window scale, where zero means a failure.
-     */
-    public AccessibilityNodeInfo findAccessibilityNodeInfoByViewId(int accessibilityWindowId,
-            long accessibilityNodeId, int viewId) {
-        // Cache the id to avoid locking
-        final int connectionId = mConnectionId;
-        ensureValidConnection(connectionId);
-        return AccessibilityInteractionClient.getInstance()
-                .findAccessibilityNodeInfoByViewId(connectionId, accessibilityWindowId,
-                        accessibilityNodeId, viewId);
-    }
-
-    /**
-     * Finds {@link AccessibilityNodeInfo}s by View text in the active
-     * window. The search is performed from the root node.
-     *
-     * @param text The searched text.
-     * @return The current window scale, where zero means a failure.
-     */
-    public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByTextInActiveWindow(String text) {
-        return findAccessibilityNodeInfosByText(ACTIVE_WINDOW_ID, ROOT_NODE_ID, text);
-    }
-
-    /**
-     * Finds {@link AccessibilityNodeInfo}s by View text. The match is case
-     * insensitive containment. The search is performed in the window whose
-     * id is specified and starts from the node whose accessibility id is
-     * specified.
-     *
-     * @param accessibilityWindowId A unique window id. Use
-     *     {@link #ACTIVE_WINDOW_ID} to query the currently active window.
-     * @param accessibilityNodeId A unique view id or virtual descendant id from
-     *     where to start the search. Use {@link #ROOT_NODE_ID} to start from the root.
-     * @param text The searched text.
-     * @return The current window scale, where zero means a failure.
-     */
-    public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByText(int accessibilityWindowId,
-            long accessibilityNodeId, String text) {
-        // Cache the id to avoid locking
-        final int connectionId = mConnectionId;
-        ensureValidConnection(connectionId);
-        return AccessibilityInteractionClient.getInstance()
-                .findAccessibilityNodeInfosByText(connectionId, accessibilityWindowId,
-                        accessibilityNodeId, text);
-    }
-
-    /**
-     * Performs an accessibility action on an {@link AccessibilityNodeInfo}
-     * in the active window.
-     *
-     * @param accessibilityNodeId A unique node id (accessibility and virtual descendant id).
-     * @param action The action to perform.
-     * @param arguments Optional action arguments.
-     * @return Whether the action was performed.
-     */
-    public boolean performAccessibilityActionInActiveWindow(long accessibilityNodeId, int action,
-            Bundle arguments) {
-        return performAccessibilityAction(ACTIVE_WINDOW_ID, accessibilityNodeId, action, arguments);
-    }
-
-    /**
-     * Performs an accessibility action on an {@link AccessibilityNodeInfo}.
-     *
-     * @param accessibilityWindowId A unique window id. Use
-     *     {@link #ACTIVE_WINDOW_ID} to query the currently active window.
-     * @param accessibilityNodeId A unique node id (accessibility and virtual descendant id).
-     * @param action The action to perform.
-     * @param arguments Optional action arguments.
-     * @return Whether the action was performed.
-     */
-    public boolean performAccessibilityAction(int accessibilityWindowId, long accessibilityNodeId,
-            int action, Bundle arguments) {
-        // Cache the id to avoid locking
-        final int connectionId = mConnectionId;
-        ensureValidConnection(connectionId);
-        return AccessibilityInteractionClient.getInstance().performAccessibilityAction(connectionId,
-                accessibilityWindowId, accessibilityNodeId, action, arguments);
-    }
-
-    /**
-     * Gets the root {@link AccessibilityNodeInfo} in the active window.
-     *
-     * @return The root info.
-     */
-    public AccessibilityNodeInfo getRootAccessibilityNodeInfoInActiveWindow() {
-        // Cache the id to avoid locking
-        final int connectionId = mConnectionId;
-        ensureValidConnection(connectionId);
-        return AccessibilityInteractionClient.getInstance()
-                .findAccessibilityNodeInfoByAccessibilityId(connectionId, ACTIVE_WINDOW_ID,
-                        ROOT_NODE_ID, AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS);
-    }
-
-    private void ensureValidConnection(int connectionId) {
-        if (connectionId == UNDEFINED) {
-            throw new IllegalStateException("UiAutomationService not connected."
-                    + " Did you call #register()?");
-        }
-    }
-}
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index 2337790..3602fc4 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -132,6 +132,12 @@
     public static final int DISPLAY_SHOW_CUSTOM = 0x10;
 
     /**
+     * Allow the title to wrap onto multiple lines if space is available
+     * @hide pending API approval
+     */
+    public static final int DISPLAY_TITLE_MULTIPLE_LINES = 0x20;
+
+    /**
      * Set the action bar into custom navigation mode, supplying a view
      * for custom navigation.
      *
@@ -680,6 +686,15 @@
     public Context getThemedContext() { return null; }
 
     /**
+     * Returns true if the Title field has been truncated during layout for lack
+     * of available space.
+     *
+     * @return true if the Title field has been truncated
+     * @hide pending API approval
+     */
+    public boolean isTitleTruncated() { return false; }
+
+    /**
      * Listener interface for ActionBar navigation events.
      */
     public interface OnNavigationListener {
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index d6ddeb6..87c2d8c 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1346,6 +1346,20 @@
     }
 
     /**
+     * This is called when the user is requesting an assist, to build a full
+     * {@link Intent#ACTION_ASSIST} Intent with all of the context of the current
+     * application.  You can override this method to place into the bundle anything
+     * you would like to appear in the {@link Intent#EXTRA_ASSIST_CONTEXT} part
+     * of the assist Intent.  The default implementation does nothing.
+     *
+     * <p>This function will be called after any global assist callbacks that had
+     * been registered with {@link Application#registerOnProvideAssistData
+     * Application.registerOnProvideAssistData}.
+     */
+    public void onProvideAssistData(Bundle data) {
+    }
+
+    /**
      * Called when you are no longer visible to the user.  You will next
      * receive either {@link #onRestart}, {@link #onDestroy}, or nothing,
      * depending on later user activity.
@@ -3726,7 +3740,7 @@
             try {
                 intent.setAllowFds(false);
                 result = ActivityManagerNative.getDefault()
-                    .startActivity(mMainThread.getApplicationThread(),
+                    .startActivity(mMainThread.getApplicationThread(), getBasePackageName(),
                             intent, intent.resolveTypeIfNeeded(getContentResolver()),
                             mToken, mEmbeddedID, requestCode,
                             ActivityManager.START_FLAG_ONLY_IF_NEEDED, null, null,
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 61b2067..aca4f9c 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -39,7 +39,6 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.StrictMode;
-import android.os.UserHandle;
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.Singleton;
@@ -93,7 +92,7 @@
         try {
             getDefault().broadcastIntent(
                 null, intent, null, null, Activity.RESULT_OK, null, null,
-                null /*permission*/, false, true, userId);
+                null /*permission*/, AppOpsManager.OP_NONE, false, true, userId);
         } catch (RemoteException ex) {
         }
     }
@@ -117,6 +116,7 @@
             data.enforceInterface(IActivityManager.descriptor);
             IBinder b = data.readStrongBinder();
             IApplicationThread app = ApplicationThreadNative.asInterface(b);
+            String callingPackage = data.readString();
             Intent intent = Intent.CREATOR.createFromParcel(data);
             String resolvedType = data.readString();
             IBinder resultTo = data.readStrongBinder();
@@ -128,7 +128,7 @@
                     ? data.readFileDescriptor() : null;
             Bundle options = data.readInt() != 0
                     ? Bundle.CREATOR.createFromParcel(data) : null;
-            int result = startActivity(app, intent, resolvedType,
+            int result = startActivity(app, callingPackage, intent, resolvedType,
                     resultTo, resultWho, requestCode, startFlags,
                     profileFile, profileFd, options);
             reply.writeNoException();
@@ -141,6 +141,7 @@
             data.enforceInterface(IActivityManager.descriptor);
             IBinder b = data.readStrongBinder();
             IApplicationThread app = ApplicationThreadNative.asInterface(b);
+            String callingPackage = data.readString();
             Intent intent = Intent.CREATOR.createFromParcel(data);
             String resolvedType = data.readString();
             IBinder resultTo = data.readStrongBinder();
@@ -153,7 +154,7 @@
             Bundle options = data.readInt() != 0
                     ? Bundle.CREATOR.createFromParcel(data) : null;
             int userId = data.readInt();
-            int result = startActivityAsUser(app, intent, resolvedType,
+            int result = startActivityAsUser(app, callingPackage, intent, resolvedType,
                     resultTo, resultWho, requestCode, startFlags,
                     profileFile, profileFd, options, userId);
             reply.writeNoException();
@@ -166,6 +167,7 @@
             data.enforceInterface(IActivityManager.descriptor);
             IBinder b = data.readStrongBinder();
             IApplicationThread app = ApplicationThreadNative.asInterface(b);
+            String callingPackage = data.readString();
             Intent intent = Intent.CREATOR.createFromParcel(data);
             String resolvedType = data.readString();
             IBinder resultTo = data.readStrongBinder();
@@ -178,7 +180,7 @@
             Bundle options = data.readInt() != 0
                     ? Bundle.CREATOR.createFromParcel(data) : null;
             int userId = data.readInt();
-            WaitResult result = startActivityAndWait(app, intent, resolvedType,
+            WaitResult result = startActivityAndWait(app, callingPackage, intent, resolvedType,
                     resultTo, resultWho, requestCode, startFlags,
                     profileFile, profileFd, options, userId);
             reply.writeNoException();
@@ -191,6 +193,7 @@
             data.enforceInterface(IActivityManager.descriptor);
             IBinder b = data.readStrongBinder();
             IApplicationThread app = ApplicationThreadNative.asInterface(b);
+            String callingPackage = data.readString();
             Intent intent = Intent.CREATOR.createFromParcel(data);
             String resolvedType = data.readString();
             IBinder resultTo = data.readStrongBinder();
@@ -201,7 +204,7 @@
             Bundle options = data.readInt() != 0
                     ? Bundle.CREATOR.createFromParcel(data) : null;
             int userId = data.readInt();
-            int result = startActivityWithConfig(app, intent, resolvedType,
+            int result = startActivityWithConfig(app, callingPackage, intent, resolvedType,
                     resultTo, resultWho, requestCode, startFlags, config, options, userId);
             reply.writeNoException();
             reply.writeInt(result);
@@ -341,11 +344,12 @@
             String resultData = data.readString();
             Bundle resultExtras = data.readBundle();
             String perm = data.readString();
+            int appOp = data.readInt();
             boolean serialized = data.readInt() != 0;
             boolean sticky = data.readInt() != 0;
             int userId = data.readInt();
             int res = broadcastIntent(app, intent, resolvedType, resultTo,
-                    resultCode, resultData, resultExtras, perm,
+                    resultCode, resultData, resultExtras, perm, appOp,
                     serialized, sticky, userId);
             reply.writeNoException();
             reply.writeInt(res);
@@ -836,8 +840,10 @@
             Bundle arguments = data.readBundle();
             IBinder b = data.readStrongBinder();
             IInstrumentationWatcher w = IInstrumentationWatcher.Stub.asInterface(b);
+            b = data.readStrongBinder();
+            IUiAutomationConnection c = IUiAutomationConnection.Stub.asInterface(b);
             int userId = data.readInt();
-            boolean res = startInstrumentation(className, profileFile, fl, arguments, w, userId);
+            boolean res = startInstrumentation(className, profileFile, fl, arguments, w, c, userId);
             reply.writeNoException();
             reply.writeInt(res ? 1 : 0);
             return true;
@@ -1147,6 +1153,7 @@
             IActivityController watcher = IActivityController.Stub.asInterface(
                     data.readStrongBinder());
             setActivityController(watcher);
+            reply.writeNoException();
             return true;
         }
 
@@ -1525,13 +1532,14 @@
             data.enforceInterface(IActivityManager.descriptor);
             IBinder b = data.readStrongBinder();
             IApplicationThread app = ApplicationThreadNative.asInterface(b);
+            String callingPackage = data.readString();
             Intent[] intents = data.createTypedArray(Intent.CREATOR);
             String[] resolvedTypes = data.createStringArray();
             IBinder resultTo = data.readStrongBinder();
             Bundle options = data.readInt() != 0
                     ? Bundle.CREATOR.createFromParcel(data) : null;
             int userId = data.readInt();
-            int result = startActivities(app, intents, resolvedTypes, resultTo,
+            int result = startActivities(app, callingPackage, intents, resolvedTypes, resultTo,
                     options, userId);
             reply.writeNoException();
             reply.writeInt(result);
@@ -1783,6 +1791,15 @@
             return true;
         }
 
+        case GET_LAUNCHED_FROM_PACKAGE_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            IBinder token = data.readStrongBinder();
+            String res = getLaunchedFromPackage(token);
+            reply.writeNoException();
+            reply.writeString(res);
+            return true;
+        }
+
         case REGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
             data.enforceInterface(IActivityManager.descriptor);
             IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
@@ -1818,6 +1835,24 @@
             return true;
         }
 
+        case GET_TOP_ACTIVITY_EXTRAS_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            int requestType = data.readInt();
+            Bundle res = getTopActivityExtras(requestType);
+            reply.writeNoException();
+            reply.writeBundle(res);
+            return true;
+        }
+
+        case REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            IBinder token = data.readStrongBinder();
+            Bundle extras = data.readBundle();
+            reportTopActivityExtras(token, extras);
+            reply.writeNoException();
+            return true;
+        }
+
         }
 
         return super.onTransact(code, data, reply, flags);
@@ -1854,7 +1889,7 @@
         return mRemote;
     }
 
-    public int startActivity(IApplicationThread caller, Intent intent,
+    public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
             String resolvedType, IBinder resultTo, String resultWho, int requestCode,
             int startFlags, String profileFile,
             ParcelFileDescriptor profileFd, Bundle options) throws RemoteException {
@@ -1862,6 +1897,7 @@
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
+        data.writeString(callingPackage);
         intent.writeToParcel(data, 0);
         data.writeString(resolvedType);
         data.writeStrongBinder(resultTo);
@@ -1889,7 +1925,7 @@
         return result;
     }
 
-    public int startActivityAsUser(IApplicationThread caller, Intent intent,
+    public int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent,
             String resolvedType, IBinder resultTo, String resultWho, int requestCode,
             int startFlags, String profileFile,
             ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException {
@@ -1897,6 +1933,7 @@
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
+        data.writeString(callingPackage);
         intent.writeToParcel(data, 0);
         data.writeString(resolvedType);
         data.writeStrongBinder(resultTo);
@@ -1924,14 +1961,15 @@
         data.recycle();
         return result;
     }
-    public WaitResult startActivityAndWait(IApplicationThread caller, Intent intent,
-            String resolvedType, IBinder resultTo, String resultWho,
+    public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
+            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
             int requestCode, int startFlags, String profileFile,
             ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
+        data.writeString(callingPackage);
         intent.writeToParcel(data, 0);
         data.writeString(resolvedType);
         data.writeStrongBinder(resultTo);
@@ -1959,14 +1997,15 @@
         data.recycle();
         return result;
     }
-    public int startActivityWithConfig(IApplicationThread caller, Intent intent,
-            String resolvedType, IBinder resultTo, String resultWho,
+    public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
+            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
             int requestCode, int startFlags, Configuration config,
             Bundle options, int userId) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
+        data.writeString(callingPackage);
         intent.writeToParcel(data, 0);
         data.writeString(resolvedType);
         data.writeStrongBinder(resultTo);
@@ -2137,7 +2176,7 @@
     public int broadcastIntent(IApplicationThread caller,
             Intent intent, String resolvedType,  IIntentReceiver resultTo,
             int resultCode, String resultData, Bundle map,
-            String requiredPermission, boolean serialized,
+            String requiredPermission, int appOp, boolean serialized,
             boolean sticky, int userId) throws RemoteException
     {
         Parcel data = Parcel.obtain();
@@ -2151,6 +2190,7 @@
         data.writeString(resultData);
         data.writeBundle(map);
         data.writeString(requiredPermission);
+        data.writeInt(appOp);
         data.writeInt(serialized ? 1 : 0);
         data.writeInt(sticky ? 1 : 0);
         data.writeInt(userId);
@@ -2856,8 +2896,8 @@
     }
 
     public boolean startInstrumentation(ComponentName className, String profileFile,
-            int flags, Bundle arguments, IInstrumentationWatcher watcher, int userId)
-            throws RemoteException {
+            int flags, Bundle arguments, IInstrumentationWatcher watcher,
+            IUiAutomationConnection connection, int userId) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
@@ -2866,6 +2906,7 @@
         data.writeInt(flags);
         data.writeBundle(arguments);
         data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
+        data.writeStrongBinder(connection != null ? connection.asBinder() : null);
         data.writeInt(userId);
         mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
         reply.readException();
@@ -3751,13 +3792,14 @@
         return res;
     }
     
-    public int startActivities(IApplicationThread caller,
+    public int startActivities(IApplicationThread caller, String callingPackage,
             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
             Bundle options, int userId) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
+        data.writeString(callingPackage);
         data.writeTypedArray(intents, 0);
         data.writeStringArray(resolvedTypes);
         data.writeStrongBinder(resultTo);
@@ -4103,6 +4145,19 @@
         return result;
     }
 
+    public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeStrongBinder(activityToken);
+        mRemote.transact(GET_LAUNCHED_FROM_PACKAGE_TRANSACTION, data, reply, 0);
+        reply.readException();
+        String result = reply.readString();
+        data.recycle();
+        reply.recycle();
+        return result;
+    }
+
     public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
@@ -4149,5 +4204,30 @@
         return res;
     }
 
+    public Bundle getTopActivityExtras(int requestType) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeInt(requestType);
+        mRemote.transact(GET_TOP_ACTIVITY_EXTRAS_TRANSACTION, data, reply, 0);
+        reply.readException();
+        Bundle res = reply.readBundle();
+        data.recycle();
+        reply.recycle();
+        return res;
+    }
+
+    public void reportTopActivityExtras(IBinder token, Bundle extras) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeStrongBinder(token);
+        data.writeBundle(extras);
+        mRemote.transact(REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION, data, reply, 0);
+        reply.readException();
+        data.recycle();
+        reply.recycle();
+    }
+
     private IBinder mRemote;
 }
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 1271645..bb73cf4 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -43,7 +43,6 @@
 import android.database.sqlite.SQLiteDebug.DbStats;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
-import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayManagerGlobal;
 import android.net.IConnectivityManager;
 import android.net.Proxy;
@@ -102,7 +101,6 @@
 import java.io.PrintWriter;
 import java.lang.ref.WeakReference;
 import java.net.InetAddress;
-import java.security.Security;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -420,6 +418,7 @@
         ComponentName instrumentationName;
         Bundle instrumentationArgs;
         IInstrumentationWatcher instrumentationWatcher;
+        IUiAutomationConnection instrumentationUiAutomationConnection;
         int debugMode;
         boolean enableOpenGlTrace;
         boolean restrictedBackupMode;
@@ -533,6 +532,12 @@
         String pkg;
         CompatibilityInfo info;
     }
+
+    static final class RequestActivityExtras {
+        IBinder activityToken;
+        IBinder requestToken;
+        int requestType;
+    }
     
     private native void dumpGraphicsInfo(FileDescriptor fd);
 
@@ -724,9 +729,10 @@
                 ComponentName instrumentationName, String profileFile,
                 ParcelFileDescriptor profileFd, boolean autoStopProfiler,
                 Bundle instrumentationArgs, IInstrumentationWatcher instrumentationWatcher,
-                int debugMode, boolean enableOpenGlTrace, boolean isRestrictedBackupMode,
-                boolean persistent, Configuration config, CompatibilityInfo compatInfo,
-                Map<String, IBinder> services, Bundle coreSettings) {
+                IUiAutomationConnection instrumentationUiConnection, int debugMode,
+                boolean enableOpenGlTrace, boolean isRestrictedBackupMode, boolean persistent,
+                Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
+                Bundle coreSettings) {
 
             if (services != null) {
                 // Setup the service cache in the ServiceManager
@@ -742,6 +748,7 @@
             data.instrumentationName = instrumentationName;
             data.instrumentationArgs = instrumentationArgs;
             data.instrumentationWatcher = instrumentationWatcher;
+            data.instrumentationUiAutomationConnection = instrumentationUiConnection;
             data.debugMode = debugMode;
             data.enableOpenGlTrace = enableOpenGlTrace;
             data.restrictedBackupMode = isRestrictedBackupMode;
@@ -1108,6 +1115,16 @@
             queueOrSendMessage(H.UNSTABLE_PROVIDER_DIED, provider);
         }
 
+        @Override
+        public void requestActivityExtras(IBinder activityToken, IBinder requestToken,
+                int requestType) {
+            RequestActivityExtras cmd = new RequestActivityExtras();
+            cmd.activityToken = activityToken;
+            cmd.requestToken = requestToken;
+            cmd.requestType = requestType;
+            queueOrSendMessage(H.REQUEST_ACTIVITY_EXTRAS, cmd);
+        }
+
         private void printRow(PrintWriter pw, String format, Object...objs) {
             pw.println(String.format(format, objs));
         }
@@ -1173,6 +1190,7 @@
         public static final int TRIM_MEMORY             = 140;
         public static final int DUMP_PROVIDER           = 141;
         public static final int UNSTABLE_PROVIDER_DIED  = 142;
+        public static final int REQUEST_ACTIVITY_EXTRAS = 143;
         String codeToString(int code) {
             if (DEBUG_MESSAGES) {
                 switch (code) {
@@ -1219,6 +1237,7 @@
                     case TRIM_MEMORY: return "TRIM_MEMORY";
                     case DUMP_PROVIDER: return "DUMP_PROVIDER";
                     case UNSTABLE_PROVIDER_DIED: return "UNSTABLE_PROVIDER_DIED";
+                    case REQUEST_ACTIVITY_EXTRAS: return "REQUEST_ACTIVITY_EXTRAS";
                 }
             }
             return Integer.toString(code);
@@ -1430,6 +1449,9 @@
                 case UNSTABLE_PROVIDER_DIED:
                     handleUnstableProviderDied((IBinder)msg.obj, false);
                     break;
+                case REQUEST_ACTIVITY_EXTRAS:
+                    handleRequestActivityExtras((RequestActivityExtras)msg.obj);
+                    break;
             }
             if (DEBUG_MESSAGES) Slog.v(TAG, "<<< done: " + codeToString(msg.what));
         }
@@ -2322,6 +2344,23 @@
         performNewIntents(data.token, data.intents);
     }
 
+    public void handleRequestActivityExtras(RequestActivityExtras cmd) {
+        Bundle data = new Bundle();
+        ActivityClientRecord r = mActivities.get(cmd.activityToken);
+        if (r != null) {
+            r.activity.getApplication().dispatchOnProvideAssistData(r.activity, data);
+            r.activity.onProvideAssistData(data);
+        }
+        if (data.isEmpty()) {
+            data = null;
+        }
+        IActivityManager mgr = ActivityManagerNative.getDefault();
+        try {
+            mgr.reportTopActivityExtras(cmd.requestToken, data);
+        } catch (RemoteException e) {
+        }
+    }
+    
     private static final ThreadLocal<Intent> sCurrentBroadcastIntent = new ThreadLocal<Intent>();
 
     /**
@@ -4337,7 +4376,8 @@
             }
 
             mInstrumentation.init(this, instrContext, appContext,
-                    new ComponentName(ii.packageName, ii.name), data.instrumentationWatcher);
+                   new ComponentName(ii.packageName, ii.name), data.instrumentationWatcher,
+                   data.instrumentationUiAutomationConnection);
 
             if (mProfiler.profileFile != null && !ii.handleProfiling
                     && mProfiler.profileFd == null) {
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 5d24d69..241a9ae 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -17,8 +17,10 @@
 package android.app;
 
 import com.android.internal.app.IAppOpsService;
+import com.android.internal.app.IAppOpsCallback;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 import android.content.Context;
@@ -31,11 +33,14 @@
 public class AppOpsManager {
     final Context mContext;
     final IAppOpsService mService;
+    final HashMap<Callback, IAppOpsCallback> mModeWatchers
+            = new HashMap<Callback, IAppOpsCallback>();
 
     public static final int MODE_ALLOWED = 0;
     public static final int MODE_IGNORED = 1;
     public static final int MODE_ERRORED = 2;
 
+    public static final int OP_NONE = -1;
     public static final int OP_COARSE_LOCATION = 0;
     public static final int OP_FINE_LOCATION = 1;
     public static final int OP_GPS = 2;
@@ -44,19 +49,137 @@
     public static final int OP_WRITE_CONTACTS = 5;
     public static final int OP_READ_CALL_LOG = 6;
     public static final int OP_WRITE_CALL_LOG = 7;
+    public static final int OP_READ_CALENDAR = 8;
+    public static final int OP_WRITE_CALENDAR = 9;
+    public static final int OP_WIFI_SCAN = 10;
+    public static final int OP_POST_NOTIFICATION = 11;
+    public static final int OP_NEIGHBORING_CELLS = 12;
+    public static final int OP_CALL_PHONE = 13;
+    public static final int OP_READ_SMS = 14;
+    public static final int OP_WRITE_SMS = 15;
+    public static final int OP_RECEIVE_SMS = 16;
+    public static final int OP_RECEIVE_EMERGECY_SMS = 17;
+    public static final int OP_RECEIVE_MMS = 18;
+    public static final int OP_RECEIVE_WAP_PUSH = 19;
+    public static final int OP_SEND_SMS = 20;
+    public static final int OP_READ_ICC_SMS = 21;
+    public static final int OP_WRITE_ICC_SMS = 22;
+    public static final int OP_WRITE_SETTINGS = 23;
+    public static final int OP_SYSTEM_ALERT_WINDOW = 24;
+    /** @hide */
+    public static final int _NUM_OP = 25;
 
-    public static String opToString(int op) {
-        switch (op) {
-            case OP_COARSE_LOCATION: return "COARSE_LOCATION";
-            case OP_FINE_LOCATION: return "FINE_LOCATION";
-            case OP_GPS: return "GPS";
-            case OP_VIBRATE: return "VIBRATE";
-            case OP_READ_CONTACTS: return "READ_CONTACTS";
-            case OP_WRITE_CONTACTS: return "WRITE_CONTACTS";
-            case OP_READ_CALL_LOG: return "READ_CALL_LOG";
-            case OP_WRITE_CALL_LOG: return "WRITE_CALL_LOG";
-            default: return "Unknown(" + op + ")";
-        }
+    /**
+     * This maps each operation to the operation that serves as the
+     * switch to determine whether it is allowed.  Generally this is
+     * a 1:1 mapping, but for some things (like location) that have
+     * multiple low-level operations being tracked that should be
+     * presented to hte user as one switch then this can be used to
+     * make them all controlled by the same single operation.
+     */
+    private static int[] sOpToSwitch = new int[] {
+            OP_COARSE_LOCATION,
+            OP_COARSE_LOCATION,
+            OP_COARSE_LOCATION,
+            OP_VIBRATE,
+            OP_READ_CONTACTS,
+            OP_WRITE_CONTACTS,
+            OP_READ_CALL_LOG,
+            OP_WRITE_CALL_LOG,
+            OP_READ_CALENDAR,
+            OP_WRITE_CALENDAR,
+            OP_COARSE_LOCATION,
+            OP_POST_NOTIFICATION,
+            OP_COARSE_LOCATION,
+            OP_CALL_PHONE,
+            OP_READ_SMS,
+            OP_WRITE_SMS,
+            OP_READ_SMS,
+            OP_READ_SMS,
+            OP_READ_SMS,
+            OP_READ_SMS,
+            OP_WRITE_SMS,
+            OP_READ_SMS,
+            OP_WRITE_SMS,
+            OP_WRITE_SETTINGS,
+            OP_SYSTEM_ALERT_WINDOW,
+    };
+
+    /**
+     * This provides a simple name for each operation to be used
+     * in debug output.
+     */
+    private static String[] sOpNames = new String[] {
+            "COARSE_LOCATION",
+            "FINE_LOCATION",
+            "GPS",
+            "VIBRATE",
+            "READ_CONTACTS",
+            "WRITE_CONTACTS",
+            "READ_CALL_LOG",
+            "WRITE_CALL_LOG",
+            "READ_CALENDAR",
+            "WRITE_CALENDAR",
+            "WIFI_SCAN",
+            "POST_NOTIFICATION",
+            "NEIGHBORING_CELLS",
+            "CALL_PHONE",
+            "READ_SMS",
+            "WRITE_SMS",
+            "RECEIVE_SMS",
+            "RECEIVE_EMERGECY_SMS",
+            "RECEIVE_MMS",
+            "RECEIVE_WAP_PUSH",
+            "SEND_SMS",
+            "READ_ICC_SMS",
+            "WRITE_ICC_SMS",
+            "WRITE_SETTINGS",
+            "SYSTEM_ALERT_WINDOW",
+    };
+
+    /**
+     * This optionally maps a permission to an operation.  If there
+     * is no permission associated with an operation, it is null.
+     */
+    private static String[] sOpPerms = new String[] {
+            android.Manifest.permission.ACCESS_COARSE_LOCATION,
+            android.Manifest.permission.ACCESS_FINE_LOCATION,
+            null,
+            android.Manifest.permission.VIBRATE,
+            android.Manifest.permission.READ_CONTACTS,
+            android.Manifest.permission.WRITE_CONTACTS,
+            android.Manifest.permission.READ_CALL_LOG,
+            android.Manifest.permission.WRITE_CALL_LOG,
+            android.Manifest.permission.READ_CALENDAR,
+            android.Manifest.permission.WRITE_CALENDAR,
+            null, // no permission required for notifications
+            android.Manifest.permission.ACCESS_WIFI_STATE,
+            null, // neighboring cells shares the coarse location perm
+            android.Manifest.permission.CALL_PHONE,
+            android.Manifest.permission.READ_SMS,
+            android.Manifest.permission.WRITE_SMS,
+            android.Manifest.permission.RECEIVE_SMS,
+            android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+            android.Manifest.permission.RECEIVE_MMS,
+            android.Manifest.permission.RECEIVE_WAP_PUSH,
+            android.Manifest.permission.SEND_SMS,
+            android.Manifest.permission.READ_SMS,
+            android.Manifest.permission.WRITE_SMS,
+            android.Manifest.permission.WRITE_SETTINGS,
+            android.Manifest.permission.SYSTEM_ALERT_WINDOW,
+    };
+
+    public static int opToSwitch(int op) {
+        return sOpToSwitch[op];
+    }
+
+    public static String opToName(int op) {
+        if (op == OP_NONE) return "NONE";
+        return op < sOpNames.length ? sOpNames[op] : ("Unknown(" + op + ")");
+    }
+
+    public static String opToPermission(int op) {
+        return sOpPerms[op];
     }
 
     public static class PackageOps implements Parcelable {
@@ -120,12 +243,16 @@
 
     public static class OpEntry implements Parcelable {
         private final int mOp;
+        private final int mMode;
         private final long mTime;
+        private final long mRejectTime;
         private final int mDuration;
 
-        public OpEntry(int op, long time, int duration) {
+        public OpEntry(int op, int mode, long time, long rejectTime, int duration) {
             mOp = op;
+            mMode = mode;
             mTime = time;
+            mRejectTime = rejectTime;
             mDuration = duration;
         }
 
@@ -133,10 +260,18 @@
             return mOp;
         }
 
+        public int getMode() {
+            return mMode;
+        }
+
         public long getTime() {
             return mTime;
         }
 
+        public long getRejectTime() {
+            return mRejectTime;
+        }
+
         public boolean isRunning() {
             return mDuration == -1;
         }
@@ -153,13 +288,17 @@
         @Override
         public void writeToParcel(Parcel dest, int flags) {
             dest.writeInt(mOp);
+            dest.writeInt(mMode);
             dest.writeLong(mTime);
+            dest.writeLong(mRejectTime);
             dest.writeInt(mDuration);
         }
 
         OpEntry(Parcel source) {
             mOp = source.readInt();
+            mMode = source.readInt();
             mTime = source.readLong();
+            mRejectTime = source.readLong();
             mDuration = source.readInt();
         }
 
@@ -174,6 +313,10 @@
         };
     }
 
+    public interface Callback {
+        public void opChanged(int op, String packageName);
+    }
+
     public AppOpsManager(Context context, IAppOpsService service) {
         mContext = context;
         mService = service;
@@ -195,6 +338,43 @@
         return null;
     }
 
+    public void setMode(int code, int uid, String packageName, int mode) {
+        try {
+            mService.setMode(code, uid, packageName, mode);
+        } catch (RemoteException e) {
+        }
+    }
+
+    public void startWatchingMode(int op, String packageName, final Callback callback) {
+        synchronized (mModeWatchers) {
+            IAppOpsCallback cb = mModeWatchers.get(callback);
+            if (cb == null) {
+                cb = new IAppOpsCallback.Stub() {
+                    public void opChanged(int op, String packageName) {
+                        callback.opChanged(op, packageName);
+                    }
+                };
+                mModeWatchers.put(callback, cb);
+            }
+            try {
+                mService.startWatchingMode(op, packageName, cb);
+            } catch (RemoteException e) {
+            }
+        }
+    }
+
+    public void stopWatchingMode(Callback callback) {
+        synchronized (mModeWatchers) {
+            IAppOpsCallback cb = mModeWatchers.get(callback);
+            if (cb != null) {
+                try {
+                    mService.stopWatchingMode(cb);
+                } catch (RemoteException e) {
+                }
+            }
+        }
+    }
+
     public int checkOp(int op, int uid, String packageName) {
         try {
             int mode = mService.checkOperation(op, uid, packageName);
diff --git a/core/java/android/app/Application.java b/core/java/android/app/Application.java
index 3a67cec..132388e 100644
--- a/core/java/android/app/Application.java
+++ b/core/java/android/app/Application.java
@@ -22,6 +22,7 @@
 import android.content.ComponentCallbacks2;
 import android.content.Context;
 import android.content.ContextWrapper;
+import android.content.Intent;
 import android.content.res.Configuration;
 import android.os.Bundle;
 
@@ -45,6 +46,7 @@
             new ArrayList<ComponentCallbacks>();
     private ArrayList<ActivityLifecycleCallbacks> mActivityLifecycleCallbacks =
             new ArrayList<ActivityLifecycleCallbacks>();
+    private ArrayList<OnProvideAssistData> mAssistCallbacks = null;
 
     /** @hide */
     public LoadedApk mLoadedApk;
@@ -59,6 +61,21 @@
         void onActivityDestroyed(Activity activity);
     }
 
+    /**
+     * Callback interface for use with {@link Application#registerOnProvideAssistData}
+     * and {@link Application#unregisterOnProvideAssistData}.
+     */
+    public interface OnProvideAssistData {
+        /**
+         * This is called when the user is requesting an assist, to build a full
+         * {@link Intent#ACTION_ASSIST} Intent with all of the context of the current
+         * application.  You can override this method to place into the bundle anything
+         * you would like to appear in the {@link Intent#EXTRA_ASSIST_CONTEXT} part
+         * of the assist Intent.
+         */
+        public void onProvideAssistData(Activity activity, Bundle data);
+    }
+
     public Application() {
         super(null);
     }
@@ -137,7 +154,24 @@
             mActivityLifecycleCallbacks.remove(callback);
         }
     }
-    
+
+    public void registerOnProvideAssistData(OnProvideAssistData callback) {
+        synchronized (this) {
+            if (mAssistCallbacks == null) {
+                mAssistCallbacks = new ArrayList<OnProvideAssistData>();
+            }
+            mAssistCallbacks.add(callback);
+        }
+    }
+
+    public void unregisterOnProvideAssistData(OnProvideAssistData callback) {
+        synchronized (this) {
+            if (mAssistCallbacks != null) {
+                mAssistCallbacks.remove(callback);
+            }
+        }
+    }
+
     // ------------------ Internal API ------------------
     
     /**
@@ -232,4 +266,19 @@
         }
         return callbacks;
     }
+
+    /* package */ void dispatchOnProvideAssistData(Activity activity, Bundle data) {
+        Object[] callbacks;
+        synchronized (this) {
+            if (mAssistCallbacks == null) {
+                return;
+            }
+            callbacks = mAssistCallbacks.toArray();
+        }
+        if (callbacks != null) {
+            for (int i=0; i<callbacks.length; i++) {
+                ((OnProvideAssistData)callbacks[i]).onProvideAssistData(activity, data);
+            }
+        }
+    }
 }
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index 63aa5f9..b1c58f2 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -267,6 +267,9 @@
             Bundle testArgs = data.readBundle();
             IBinder binder = data.readStrongBinder();
             IInstrumentationWatcher testWatcher = IInstrumentationWatcher.Stub.asInterface(binder);
+            binder = data.readStrongBinder();
+            IUiAutomationConnection uiAutomationConnection =
+                    IUiAutomationConnection.Stub.asInterface(binder);
             int testMode = data.readInt();
             boolean openGlTrace = data.readInt() != 0;
             boolean restrictedBackupMode = (data.readInt() != 0);
@@ -277,8 +280,9 @@
             Bundle coreSettings = data.readBundle();
             bindApplication(packageName, info,
                             providers, testName, profileName, profileFd, autoStopProfiler,
-                            testArgs, testWatcher, testMode, openGlTrace, restrictedBackupMode,
-                            persistent, config, compatInfo, services, coreSettings);
+                            testArgs, testWatcher, uiAutomationConnection, testMode,
+                            openGlTrace, restrictedBackupMode, persistent, config, compatInfo,
+                            services, coreSettings);
             return true;
         }
 
@@ -587,6 +591,17 @@
             reply.writeNoException();
             return true;
         }
+
+        case REQUEST_ACTIVITY_EXTRAS_TRANSACTION:
+        {
+            data.enforceInterface(IApplicationThread.descriptor);
+            IBinder activityToken = data.readStrongBinder();
+            IBinder requestToken = data.readStrongBinder();
+            int requestType = data.readInt();
+            requestActivityExtras(activityToken, requestToken, requestType);
+            reply.writeNoException();
+            return true;
+        }
         }
 
         return super.onTransact(code, data, reply, flags);
@@ -863,10 +878,11 @@
     public final void bindApplication(String packageName, ApplicationInfo info,
             List<ProviderInfo> providers, ComponentName testName, String profileName,
             ParcelFileDescriptor profileFd, boolean autoStopProfiler, Bundle testArgs,
-            IInstrumentationWatcher testWatcher, int debugMode, boolean openGlTrace,
-            boolean restrictedBackupMode, boolean persistent,
-            Configuration config, CompatibilityInfo compatInfo,
-            Map<String, IBinder> services, Bundle coreSettings) throws RemoteException {
+            IInstrumentationWatcher testWatcher,
+            IUiAutomationConnection uiAutomationConnection, int debugMode,
+            boolean openGlTrace, boolean restrictedBackupMode, boolean persistent,
+            Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
+            Bundle coreSettings) throws RemoteException {
         Parcel data = Parcel.obtain();
         data.writeInterfaceToken(IApplicationThread.descriptor);
         data.writeString(packageName);
@@ -888,6 +904,7 @@
         data.writeInt(autoStopProfiler ? 1 : 0);
         data.writeBundle(testArgs);
         data.writeStrongInterface(testWatcher);
+        data.writeStrongInterface(uiAutomationConnection);
         data.writeInt(debugMode);
         data.writeInt(openGlTrace ? 1 : 0);
         data.writeInt(restrictedBackupMode ? 1 : 0);
@@ -1185,4 +1202,15 @@
         mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
         data.recycle();
     }
+
+    public void requestActivityExtras(IBinder activityToken, IBinder requestToken, int requestType)
+            throws RemoteException {
+        Parcel data = Parcel.obtain();
+        data.writeInterfaceToken(IApplicationThread.descriptor);
+        data.writeStrongBinder(activityToken);
+        data.writeStrongBinder(requestToken);
+        data.writeInt(requestType);
+        mRemote.transact(REQUEST_ACTIVITY_EXTRAS_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
+        data.recycle();
+    }
 }
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index fd4389e..a40fe75 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -963,7 +963,7 @@
     public void startActivityAsUser(Intent intent, Bundle options, UserHandle user) {
         try {
             ActivityManagerNative.getDefault().startActivityAsUser(
-                mMainThread.getApplicationThread(), intent,
+                mMainThread.getApplicationThread(), getBasePackageName(), intent,
                 intent.resolveTypeIfNeeded(getContentResolver()),
                 null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null, null, options,
                 user.getIdentifier());
@@ -1042,7 +1042,7 @@
             intent.setAllowFds(false);
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, null,
-                Activity.RESULT_OK, null, null, null, false, false,
+                Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, false, false,
                 getUserId());
         } catch (RemoteException e) {
         }
@@ -1056,7 +1056,21 @@
             intent.setAllowFds(false);
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, null,
-                Activity.RESULT_OK, null, null, receiverPermission, false, false,
+                Activity.RESULT_OK, null, null, receiverPermission, AppOpsManager.OP_NONE,
+                false, false, getUserId());
+        } catch (RemoteException e) {
+        }
+    }
+
+    @Override
+    public void sendBroadcast(Intent intent, String receiverPermission, int appOp) {
+        warnIfCallingFromSystemProcess();
+        String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());
+        try {
+            intent.setAllowFds(false);
+            ActivityManagerNative.getDefault().broadcastIntent(
+                mMainThread.getApplicationThread(), intent, resolvedType, null,
+                Activity.RESULT_OK, null, null, receiverPermission, appOp, false, false,
                 getUserId());
         } catch (RemoteException e) {
         }
@@ -1071,7 +1085,7 @@
             intent.setAllowFds(false);
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, null,
-                Activity.RESULT_OK, null, null, receiverPermission, true, false,
+                Activity.RESULT_OK, null, null, receiverPermission, AppOpsManager.OP_NONE, true, false,
                 getUserId());
         } catch (RemoteException e) {
         }
@@ -1082,6 +1096,15 @@
             String receiverPermission, BroadcastReceiver resultReceiver,
             Handler scheduler, int initialCode, String initialData,
             Bundle initialExtras) {
+        sendOrderedBroadcast(intent, receiverPermission, AppOpsManager.OP_NONE,
+                resultReceiver, scheduler, initialCode, initialData, initialExtras);
+    }
+
+    @Override
+    public void sendOrderedBroadcast(Intent intent,
+            String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
+            Handler scheduler, int initialCode, String initialData,
+            Bundle initialExtras) {
         warnIfCallingFromSystemProcess();
         IIntentReceiver rd = null;
         if (resultReceiver != null) {
@@ -1105,8 +1128,8 @@
             intent.setAllowFds(false);
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, rd,
-                initialCode, initialData, initialExtras, receiverPermission,
-                true, false, getUserId());
+                initialCode, initialData, initialExtras, receiverPermission, appOp,
+                    true, false, getUserId());
         } catch (RemoteException e) {
         }
     }
@@ -1117,8 +1140,8 @@
         try {
             intent.setAllowFds(false);
             ActivityManagerNative.getDefault().broadcastIntent(mMainThread.getApplicationThread(),
-                    intent, resolvedType, null, Activity.RESULT_OK, null, null, null, false, false,
-                    user.getIdentifier());
+                    intent, resolvedType, null, Activity.RESULT_OK, null, null, null,
+                    AppOpsManager.OP_NONE, false, false, user.getIdentifier());
         } catch (RemoteException e) {
         }
     }
@@ -1131,7 +1154,7 @@
             intent.setAllowFds(false);
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, null,
-                Activity.RESULT_OK, null, null, receiverPermission, false, false,
+                Activity.RESULT_OK, null, null, receiverPermission, AppOpsManager.OP_NONE, false, false,
                 user.getIdentifier());
         } catch (RemoteException e) {
         }
@@ -1164,7 +1187,7 @@
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, rd,
                 initialCode, initialData, initialExtras, receiverPermission,
-                true, false, user.getIdentifier());
+                    AppOpsManager.OP_NONE, true, false, user.getIdentifier());
         } catch (RemoteException e) {
         }
     }
@@ -1177,7 +1200,7 @@
             intent.setAllowFds(false);
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, null,
-                Activity.RESULT_OK, null, null, null, false, true,
+                Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, false, true,
                 getUserId());
         } catch (RemoteException e) {
         }
@@ -1212,7 +1235,7 @@
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, rd,
                 initialCode, initialData, initialExtras, null,
-                true, true, getUserId());
+                    AppOpsManager.OP_NONE, true, true, getUserId());
         } catch (RemoteException e) {
         }
     }
@@ -1239,7 +1262,7 @@
             intent.setAllowFds(false);
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, null,
-                Activity.RESULT_OK, null, null, null, false, true, user.getIdentifier());
+                Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, false, true, user.getIdentifier());
         } catch (RemoteException e) {
         }
     }
@@ -1272,7 +1295,7 @@
             ActivityManagerNative.getDefault().broadcastIntent(
                 mMainThread.getApplicationThread(), intent, resolvedType, rd,
                 initialCode, initialData, initialExtras, null,
-                true, true, user.getIdentifier());
+                    AppOpsManager.OP_NONE, true, true, user.getIdentifier());
         } catch (RemoteException e) {
         }
     }
@@ -1475,7 +1498,7 @@
                 arguments.setAllowFds(false);
             }
             return ActivityManagerNative.getDefault().startInstrumentation(
-                    className, profileFile, 0, arguments, null, getUserId());
+                    className, profileFile, 0, arguments, null, null, getUserId());
         } catch (RemoteException e) {
             // System has crashed, nothing we can do.
         }
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 8af17a4..cf4c729 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -51,19 +51,19 @@
  * {@hide}
  */
 public interface IActivityManager extends IInterface {
-    public int startActivity(IApplicationThread caller,
+    public int startActivity(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo, String resultWho,
             int requestCode, int flags, String profileFile,
             ParcelFileDescriptor profileFd, Bundle options) throws RemoteException;
-    public int startActivityAsUser(IApplicationThread caller,
+    public int startActivityAsUser(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo, String resultWho,
             int requestCode, int flags, String profileFile,
             ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException;
-    public WaitResult startActivityAndWait(IApplicationThread caller,
+    public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo, String resultWho,
             int requestCode, int flags, String profileFile,
             ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException;
-    public int startActivityWithConfig(IApplicationThread caller,
+    public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo, String resultWho,
             int requestCode, int startFlags, Configuration newConfig,
             Bundle options, int userId) throws RemoteException;
@@ -85,7 +85,7 @@
     public int broadcastIntent(IApplicationThread caller, Intent intent,
             String resolvedType, IIntentReceiver resultTo, int resultCode,
             String resultData, Bundle map, String requiredPermission,
-            boolean serialized, boolean sticky, int userId) throws RemoteException;
+            int appOp, boolean serialized, boolean sticky, int userId) throws RemoteException;
     public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId) throws RemoteException;
     public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException;
     public void attachApplication(IApplicationThread app) throws RemoteException;
@@ -158,8 +158,8 @@
     public void killApplicationProcess(String processName, int uid) throws RemoteException;
     
     public boolean startInstrumentation(ComponentName className, String profileFile,
-            int flags, Bundle arguments, IInstrumentationWatcher watcher, int userId)
-            throws RemoteException;
+            int flags, Bundle arguments, IInstrumentationWatcher watcher,
+            IUiAutomationConnection connection, int userId) throws RemoteException;
     public void finishInstrumentation(IApplicationThread target,
             int resultCode, Bundle results) throws RemoteException;
 
@@ -310,7 +310,7 @@
     public boolean dumpHeap(String process, int userId, boolean managed, String path,
         ParcelFileDescriptor fd) throws RemoteException;
 
-    public int startActivities(IApplicationThread caller,
+    public int startActivities(IApplicationThread caller, String callingPackage,
             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
             Bundle options, int userId) throws RemoteException;
 
@@ -357,9 +357,10 @@
     public boolean navigateUpTo(IBinder token, Intent target, int resultCode, Intent resultData)
             throws RemoteException;
 
-    // This is not public because you need to be very careful in how you
+    // These are not public because you need to be very careful in how you
     // manage your activity to make sure it is always the uid you expect.
     public int getLaunchedFromUid(IBinder activityToken) throws RemoteException;
+    public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException;
 
     public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException;
     public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException;
@@ -368,6 +369,10 @@
 
     public long inputDispatchingTimedOut(int pid, boolean aboveSystem) throws RemoteException;
 
+    public Bundle getTopActivityExtras(int requestType) throws RemoteException;
+
+    public void reportTopActivityExtras(IBinder token, Bundle extras) throws RemoteException;
+
     /*
      * Private non-Binder interfaces
      */
@@ -624,4 +629,7 @@
     int INPUT_DISPATCHING_TIMED_OUT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+158;
     int CLEAR_PENDING_BACKUP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+159;
     int GET_INTENT_FOR_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+160;
+    int GET_TOP_ACTIVITY_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+161;
+    int REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+162;
+    int GET_LAUNCHED_FROM_PACKAGE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+163;
 }
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 03a26d4..3189b31a 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -90,7 +90,8 @@
     void bindApplication(String packageName, ApplicationInfo info, List<ProviderInfo> providers,
             ComponentName testName, String profileName, ParcelFileDescriptor profileFd,
             boolean autoStopProfiler, Bundle testArguments, IInstrumentationWatcher testWatcher,
-            int debugMode, boolean openGlTrace, boolean restrictedBackupMode, boolean persistent,
+            IUiAutomationConnection uiAutomationConnection, int debugMode,
+            boolean openGlTrace, boolean restrictedBackupMode, boolean persistent,
             Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
             Bundle coreSettings) throws RemoteException;
     void scheduleExit() throws RemoteException;
@@ -130,6 +131,8 @@
     void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException;
     void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException;
     void unstableProviderDied(IBinder provider) throws RemoteException;
+    void requestActivityExtras(IBinder activityToken, IBinder requestToken, int requestType)
+            throws RemoteException;
 
     String descriptor = "android.app.IApplicationThread";
 
@@ -179,4 +182,5 @@
     int DUMP_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+44;
     int DUMP_DB_INFO_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+45;
     int UNSTABLE_PROVIDER_DIED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+46;
+    int REQUEST_ACTIVITY_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+47;
 }
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 62d4962..d400eba 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -28,11 +28,11 @@
 
     void enqueueToast(String pkg, ITransientNotification callback, int duration);
     void cancelToast(String pkg, ITransientNotification callback);
-    void enqueueNotificationWithTag(String pkg, String tag, int id,
+    void enqueueNotificationWithTag(String pkg, String basePkg, String tag, int id,
             in Notification notification, inout int[] idReceived, int userId);
     void cancelNotificationWithTag(String pkg, String tag, int id, int userId);
 
-    void setNotificationsEnabledForPackage(String pkg, boolean enabled);
-    boolean areNotificationsEnabledForPackage(String pkg);
+    void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled);
+    boolean areNotificationsEnabledForPackage(String pkg, int uid);
 }
 
diff --git a/core/java/android/app/IUiAutomationConnection.aidl b/core/java/android/app/IUiAutomationConnection.aidl
new file mode 100644
index 0000000..09bf829
--- /dev/null
+++ b/core/java/android/app/IUiAutomationConnection.aidl
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package android.app;
+
+import android.accessibilityservice.IAccessibilityServiceClient;
+import android.graphics.Bitmap;
+import android.view.InputEvent;
+import android.os.ParcelFileDescriptor;
+
+/**
+ * This interface contains privileged operations a shell program can perform
+ * on behalf of an instrumentation that it runs. These operations require
+ * special permissions which the shell user has but the instrumentation does
+ * not. Running privileged operations by the shell user on behalf of an
+ * instrumentation is needed for running UiTestCases. 
+ *
+ * {@hide}
+ */
+interface IUiAutomationConnection {
+    void connect(IAccessibilityServiceClient client);
+    void disconnect();
+    boolean injectInputEvent(in InputEvent event, boolean sync);
+    boolean setRotation(int rotation);
+    Bitmap takeScreenshot(int width, int height);
+    void shutdown();
+}
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 39186c6..e7bf305 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -49,7 +49,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-
 /**
  * Base class for implementing application instrumentation code.  When running
  * with instrumentation turned on, this class will be instantiated for you
@@ -59,6 +58,7 @@
  * &lt;instrumentation&gt; tag.
  */
 public class Instrumentation {
+
     /**
      * If included in the status or final bundle sent to an IInstrumentationWatcher, this key 
      * identifies the class that is writing the report.  This can be used to provide more structured
@@ -73,7 +73,7 @@
      * instrumentation can also be launched, and results collected, by an automated system.
      */
     public static final String REPORT_KEY_STREAMRESULT = "stream";
-    
+
     private static final String TAG = "Instrumentation";
     
     private final Object mSync = new Object();
@@ -86,9 +86,11 @@
     private List<ActivityWaiter> mWaitingActivities;
     private List<ActivityMonitor> mActivityMonitors;
     private IInstrumentationWatcher mWatcher;
+    private IUiAutomationConnection mUiAutomationConnection;
     private boolean mAutomaticPerformanceSnapshots = false;
     private PerformanceCollector mPerformanceCollector;
     private Bundle mPerfMetrics = new Bundle();
+    private UiAutomation mUiAutomation;
 
     public Instrumentation() {
     }
@@ -1411,7 +1413,7 @@
             intent.setAllowFds(false);
             intent.migrateExtraStreamToClipData();
             int result = ActivityManagerNative.getDefault()
-                .startActivity(whoThread, intent,
+                .startActivity(whoThread, who.getBasePackageName(), intent,
                         intent.resolveTypeIfNeeded(who.getContentResolver()),
                         token, target != null ? target.mEmbeddedID : null,
                         requestCode, 0, null, null, options);
@@ -1469,15 +1471,16 @@
                 resolvedTypes[i] = intents[i].resolveTypeIfNeeded(who.getContentResolver());
             }
             int result = ActivityManagerNative.getDefault()
-                .startActivities(whoThread, intents, resolvedTypes, token, options,
-                        userId);
+                .startActivities(whoThread, who.getBasePackageName(), intents, resolvedTypes,
+                        token, options, userId);
             checkStartActivityResult(result, intents[0]);
         } catch (RemoteException e) {
         }
     }
 
     /**
-     * Like {@link #execStartActivity(Context, IBinder, IBinder, Activity, Intent, int)},
+     * Like {@link #execStartActivity(android.content.Context, android.os.IBinder,
+     * android.os.IBinder, Fragment, android.content.Intent, int, android.os.Bundle)},
      * but for calls from a {#link Fragment}.
      * 
      * @param who The Context from which the activity is being started.
@@ -1526,7 +1529,7 @@
             intent.setAllowFds(false);
             intent.migrateExtraStreamToClipData();
             int result = ActivityManagerNative.getDefault()
-                .startActivity(whoThread, intent,
+                .startActivity(whoThread, who.getBasePackageName(), intent,
                         intent.resolveTypeIfNeeded(who.getContentResolver()),
                         token, target != null ? target.mWho : null,
                         requestCode, 0, null, null, options);
@@ -1586,7 +1589,7 @@
             intent.setAllowFds(false);
             intent.migrateExtraStreamToClipData();
             int result = ActivityManagerNative.getDefault()
-                .startActivityAsUser(whoThread, intent,
+                .startActivityAsUser(whoThread, who.getBasePackageName(), intent,
                         intent.resolveTypeIfNeeded(who.getContentResolver()),
                         token, target != null ? target.mEmbeddedID : null,
                         requestCode, 0, null, null, options, user.getIdentifier());
@@ -1598,13 +1601,14 @@
 
     /*package*/ final void init(ActivityThread thread,
             Context instrContext, Context appContext, ComponentName component, 
-            IInstrumentationWatcher watcher) {
+            IInstrumentationWatcher watcher, IUiAutomationConnection uiAutomationConnection) {
         mThread = thread;
         mMessageQueue = mThread.getLooper().myQueue();
         mInstrContext = instrContext;
         mAppContext = appContext;
         mComponent = component;
         mWatcher = watcher;
+        mUiAutomationConnection = uiAutomationConnection;
     }
 
     /*package*/ static void checkStartActivityResult(int res, Object intent) {
@@ -1644,12 +1648,42 @@
         }
     }
 
+    /**
+     * Gets the {@link UiAutomation} instance.
+     * <p>
+     * <strong>Note:</strong> The APIs exposed via the returned {@link UiAutomation}
+     * work across application boundaries while the APIs exposed by the instrumentation
+     * do not. For example, {@link Instrumentation#sendPointerSync(MotionEvent)} will
+     * not allow you to inject the event in an app different from the instrumentation
+     * target, while {@link UiAutomation#injectInputEvent(android.view.InputEvent, boolean)}
+     * will work regardless of the current application.
+     * </p>
+     * <p>
+     * A typical test case should be using either the {@link UiAutomation} or
+     * {@link Instrumentation} APIs. Using both APIs at the same time is not
+     * a mistake by itself but a client has to be aware of the APIs limitations.
+     * </p>
+     * @return The UI automation instance.
+     *
+     * @see UiAutomation
+     */
+    public UiAutomation getUiAutomation() {
+        if (mUiAutomationConnection != null) {
+            if (mUiAutomation == null) {
+                mUiAutomation = new UiAutomation(getTargetContext().getMainLooper(),
+                        mUiAutomationConnection);
+                mUiAutomation.connect();
+            }
+            return mUiAutomation;
+        }
+        return null;
+    }
+
     private final class InstrumentationThread extends Thread {
         public InstrumentationThread(String name) {
             super(name);
         }
         public void run() {
-            IActivityManager am = ActivityManagerNative.getDefault();
             try {
                 Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_DISPLAY);
             } catch (RuntimeException e) {
@@ -1660,9 +1694,13 @@
                 startPerformanceSnapshot();
             }
             onStart();
+            if (mUiAutomation != null) {
+                mUiAutomation.disconnect();
+                mUiAutomation = null;
+            }
         }
     }
-    
+
     private static final class EmptyRunnable implements Runnable {
         public void run() {
         }
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java
index fd0f0bf..267555a 100644
--- a/core/java/android/app/LoaderManager.java
+++ b/core/java/android/app/LoaderManager.java
@@ -833,6 +833,7 @@
             for (int i = mLoaders.size()-1; i >= 0; i--) {
                 mLoaders.valueAt(i).destroy();
             }
+            mLoaders.clear();
         }
         
         if (DEBUG) Log.v(TAG, "Destroying Inactive in " + this);
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 3f8e16c..4a0ee48 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -25,15 +25,11 @@
 import android.media.AudioManager;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.IBinder;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.text.TextUtils;
-import android.util.IntProperty;
-import android.util.Log;
-import android.util.Slog;
 import android.util.TypedValue;
 import android.view.View;
 import android.widget.ProgressBar;
@@ -436,8 +432,17 @@
      * @hide
      */
     public static final String EXTRA_PEOPLE = "android.people";
+    /** @hide */
+    public static final String EXTRA_TITLE = "android.title";
+    /** @hide */
+    public static final String EXTRA_TEXT = "android.text";
+    /** @hide */
+    public static final String EXTRA_SUBTEXT = "android.subtext";
+    /** @hide */
+    public static final String EXTRA_SMALL_ICON = "android.icon";
 
-    private Bundle extras;
+    /** @hide */
+    public Bundle extras = new Bundle();
 
     /**
      * Structure to encapsulate an "action", including title and icon, that can be attached to a Notification.
@@ -589,11 +594,10 @@
 
         kind = parcel.createStringArray(); // may set kind to null
 
-        if (parcel.readInt() != 0) {
-            extras = parcel.readBundle();
-        }
+        extras = parcel.readBundle(); // may be null
 
-        actions = parcel.createTypedArray(Action.CREATOR);
+        actions = parcel.createTypedArray(Action.CREATOR); // may be null
+
         if (parcel.readInt() != 0) {
             bigContentView = RemoteViews.CREATOR.createFromParcel(parcel);
         }
@@ -602,7 +606,11 @@
     @Override
     public Notification clone() {
         Notification that = new Notification();
+        cloneInto(that);
+        return that;
+    }
 
+    private void cloneInto(Notification that) {
         that.when = this.when;
         that.icon = this.icon;
         that.number = this.number;
@@ -656,15 +664,16 @@
 
         }
 
-        that.actions = new Action[this.actions.length];
-        for(int i=0; i<this.actions.length; i++) {
-            that.actions[i] = this.actions[i].clone();
+        if (this.actions != null) {
+            that.actions = new Action[this.actions.length];
+            for(int i=0; i<this.actions.length; i++) {
+                that.actions[i] = this.actions[i].clone();
+            }
         }
+
         if (this.bigContentView != null) {
             that.bigContentView = this.bigContentView.clone();
         }
-
-        return that;
     }
 
     public int describeContents() {
@@ -745,14 +754,9 @@
 
         parcel.writeStringArray(kind); // ok for null
 
-        if (extras != null) {
-            parcel.writeInt(1);
-            extras.writeToParcel(parcel, 0);
-        } else {
-            parcel.writeInt(0);
-        }
+        parcel.writeBundle(extras); // null ok
 
-        parcel.writeTypedArray(actions, 0);
+        parcel.writeTypedArray(actions, 0); // null ok
 
         if (bigContentView != null) {
             parcel.writeInt(1);
@@ -800,35 +804,29 @@
     @Deprecated
     public void setLatestEventInfo(Context context,
             CharSequence contentTitle, CharSequence contentText, PendingIntent contentIntent) {
-        // TODO: rewrite this to use Builder
-        RemoteViews contentView = new RemoteViews(context.getPackageName(),
-                R.layout.notification_template_base);
-        if (this.icon != 0) {
-            contentView.setImageViewResource(R.id.icon, this.icon);
-        }
-        if (priority < PRIORITY_LOW) {
-            contentView.setInt(R.id.icon,
-                    "setBackgroundResource", R.drawable.notification_template_icon_low_bg);
-            contentView.setInt(R.id.status_bar_latest_event_content,
-                    "setBackgroundResource", R.drawable.notification_bg_low);
-        }
+        Notification.Builder builder = new Notification.Builder(context);
+
+        // First, ensure that key pieces of information that may have been set directly
+        // are preserved
+        builder.setWhen(this.when);
+        builder.setSmallIcon(this.icon);
+        builder.setPriority(this.priority);
+        builder.setTicker(this.tickerText);
+        builder.setNumber(this.number);
+        builder.mFlags = this.flags;
+        builder.setSound(this.sound, this.audioStreamType);
+        builder.setDefaults(this.defaults);
+        builder.setVibrate(this.vibrate);
+
+        // now apply the latestEventInfo fields
         if (contentTitle != null) {
-            contentView.setTextViewText(R.id.title, contentTitle);
+            builder.setContentTitle(contentTitle);
         }
         if (contentText != null) {
-            contentView.setTextViewText(R.id.text, contentText);
+            builder.setContentText(contentText);
         }
-        if (this.when != 0) {
-            contentView.setViewVisibility(R.id.time, View.VISIBLE);
-            contentView.setLong(R.id.time, "setTime", when);
-        }
-        if (this.number != 0) {
-            NumberFormat f = NumberFormat.getIntegerInstance();
-            contentView.setTextViewText(R.id.info, f.format(this.number));
-        }
-
-        this.contentView = contentView;
-        this.contentIntent = contentIntent;
+        builder.setContentIntent(contentIntent);
+        builder.buildInto(this);
     }
 
     @Override
@@ -1615,11 +1613,20 @@
                 n.kind = null;
             }
             n.priority = mPriority;
-            n.extras = mExtras != null ? new Bundle(mExtras) : null;
             if (mActions.size() > 0) {
                 n.actions = new Action[mActions.size()];
                 mActions.toArray(n.actions);
             }
+
+            n.extras = mExtras != null ? new Bundle(mExtras) : new Bundle();
+
+            // Store original information used in the construction of this object
+            n.extras.putCharSequence(EXTRA_TITLE, mContentTitle);
+            n.extras.putCharSequence(EXTRA_TEXT, mContentText);
+            n.extras.putCharSequence(EXTRA_SUBTEXT, mSubText);
+            n.extras.putInt(EXTRA_SMALL_ICON, mSmallIcon);
+            //n.extras.putByteArray(EXTRA_LARGE_ICON, ...
+
             return n;
         }
 
@@ -1642,6 +1649,16 @@
                 return buildUnstyled();
             }
         }
+
+        /**
+         * Apply this Builder to an existing {@link Notification} object.
+         *
+         * @hide
+         */
+        public Notification buildInto(Notification n) {
+            build().cloneInto(n);
+            return n;
+        }
     }
 
 
@@ -1882,6 +1899,9 @@
             checkBuilder();
             Notification wip = mBuilder.buildUnstyled();
             wip.bigContentView = makeBigContentView();
+
+            wip.extras.putCharSequence(EXTRA_TEXT, mBigText);
+
             return wip;
         }
     }
@@ -1981,6 +2001,14 @@
             checkBuilder();
             Notification wip = mBuilder.buildUnstyled();
             wip.bigContentView = makeBigContentView();
+
+            StringBuilder builder = new StringBuilder();
+            for (CharSequence str : mTexts) {
+                builder.append(str);
+                builder.append("\n");
+            }
+            wip.extras.putCharSequence(EXTRA_TEXT, builder);
+
             return wip;
         }
     }
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 0acad75..5e69128 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -129,8 +129,8 @@
         }
         if (localLOGV) Log.v(TAG, pkg + ": notify(" + id + ", " + notification + ")");
         try {
-            service.enqueueNotificationWithTag(pkg, tag, id, notification, idOut,
-                    UserHandle.myUserId());
+            service.enqueueNotificationWithTag(pkg, mContext.getBasePackageName(), tag, id,
+                    notification, idOut, UserHandle.myUserId());
             if (id != idOut[0]) {
                 Log.w(TAG, "notify: id corrupted: sent " + id + ", got back " + idOut[0]);
             }
@@ -151,8 +151,8 @@
         }
         if (localLOGV) Log.v(TAG, pkg + ": notify(" + id + ", " + notification + ")");
         try {
-            service.enqueueNotificationWithTag(pkg, tag, id, notification, idOut,
-                    user.getIdentifier());
+            service.enqueueNotificationWithTag(pkg, mContext.getBasePackageName(), tag, id,
+                    notification, idOut, user.getIdentifier());
             if (id != idOut[0]) {
                 Log.w(TAG, "notify: id corrupted: sent " + id + ", got back " + idOut[0]);
             }
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 6382cee..7dfc589f 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -846,8 +846,8 @@
      *
      * @hide
      */
-    public Intent getAssistIntent(Context context) {
-        return getAssistIntent(context, UserHandle.myUserId());
+    public Intent getAssistIntent(Context context, boolean inclContext) {
+        return getAssistIntent(context, inclContext, UserHandle.myUserId());
     }
 
     /**
@@ -856,7 +856,7 @@
      *
      * @hide
      */
-    public Intent getAssistIntent(Context context, int userHandle) {
+    public Intent getAssistIntent(Context context, boolean inclContext, int userHandle) {
         try {
             if (mService == null) {
                 return null;
@@ -867,6 +867,13 @@
             }
             Intent intent = new Intent(Intent.ACTION_ASSIST);
             intent.setComponent(comp);
+            if (inclContext) {
+                IActivityManager am = ActivityManagerNative.getDefault();
+                Bundle extras = am.getTopActivityExtras(0);
+                if (extras != null) {
+                    intent.replaceExtras(extras);
+                }
+            }
             return intent;
         } catch (RemoteException re) {
             Log.e(TAG, "getAssistIntent() failed: " + re);
diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
new file mode 100644
index 0000000..e611f6d
--- /dev/null
+++ b/core/java/android/app/UiAutomation.java
@@ -0,0 +1,597 @@
+/*
+ * 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.
+ */
+
+package android.app;
+
+import android.accessibilityservice.AccessibilityService.Callbacks;
+import android.accessibilityservice.AccessibilityService.IAccessibilityServiceClientWrapper;
+import android.accessibilityservice.IAccessibilityServiceClient;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Point;
+import android.hardware.display.DisplayManagerGlobal;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.util.Log;
+import android.view.Display;
+import android.view.InputEvent;
+import android.view.Surface;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityInteractionClient;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.IAccessibilityInteractionConnection;
+
+import com.android.internal.util.Predicate;
+
+import java.util.ArrayList;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Class for interacting with the device's UI by simulation user actions and
+ * introspection of the screen content. It relies on the platform accessibility
+ * APIs to introspect the screen and to perform some actions on the remote view
+ * tree. It also allows injecting of arbitrary raw input events simulating user
+ * interaction with keyboards and touch devices.
+ * <p>
+ * The APIs exposed by this class are low-level to maximize flexibility when
+ * developing UI test automation tools and libraries. Generally, a UiAutomation
+ * client should be using a higher-level library or implement high-level functions.
+ * For example, performing a tap on the screen requires construction and injecting
+ * of a touch down and up events which have to be delivered to the system by a
+ * call to {@link #injectInputEvent(InputEvent, boolean)}.
+ * </p>
+ * <p>
+ * The APIs exposed by this class operate across applications enabling a client
+ * to write tests that cover use cases spanning over multiple applications. For
+ * example, going to the settings application to change a setting and then
+ * interacting with another application whose behavior depends on that setting.
+ * </p>
+ */
+public final class UiAutomation {
+
+    private static final String LOG_TAG = UiAutomation.class.getSimpleName();
+
+    private static final boolean DEBUG = false;
+
+    private static final int CONNECTION_ID_UNDEFINED = -1;
+
+    private static final long CONNECT_TIMEOUT_MILLIS = 5000;
+
+    /** Rotation constant: Unfreeze rotation (rotating the device changes its rotation state). */
+    public static final int ROTATION_UNFREEZE = -2;
+
+    /** Rotation constant: Freeze rotation to its current state. */
+    public static final int ROTATION_FREEZE_CURRENT = -1;
+
+    /** Rotation constant: Freeze rotation to 0 degrees (natural orientation) */
+    public static final int ROTATION_FREEZE_0 = Surface.ROTATION_0;
+
+    /** Rotation constant: Freeze rotation to 90 degrees . */
+    public static final int ROTATION_FREEZE_90 = Surface.ROTATION_90;
+
+    /** Rotation constant: Freeze rotation to 180 degrees . */
+    public static final int ROTATION_FREEZE_180 = Surface.ROTATION_180;
+
+    /** Rotation constant: Freeze rotation to 270 degrees . */
+    public static final int ROTATION_FREEZE_270 = Surface.ROTATION_270;
+
+    private final Object mLock = new Object();
+
+    private final ArrayList<AccessibilityEvent> mEventQueue = new ArrayList<AccessibilityEvent>();
+
+    private final IAccessibilityServiceClient mClient;
+
+    private final IUiAutomationConnection mUiAutomationConnection;
+
+    private int mConnectionId = CONNECTION_ID_UNDEFINED;
+
+    private OnAccessibilityEventListener mOnAccessibilityEventListener;
+
+    private boolean mWaitingForEventDelivery;
+
+    private long mLastEventTimeMillis;
+
+    private boolean mIsConnecting;
+
+    /**
+     * Listener for observing the {@link AccessibilityEvent} stream.
+     */
+    public static interface OnAccessibilityEventListener {
+
+        /**
+         * Callback for receiving an {@link AccessibilityEvent}.
+         * <p>
+         * <strong>Note:</strong> This method is <strong>NOT</strong> executed
+         * on the main test thread. The client is responsible for proper
+         * synchronization.
+         * </p>
+         * <p>
+         * <strong>Note:</strong> It is responsibility of the client
+         * to recycle the received events to minimize object creation.
+         * </p>
+         *
+         * @param event The received event.
+         */
+        public void onAccessibilityEvent(AccessibilityEvent event);
+    }
+
+    /**
+     * Creates a new instance that will handle callbacks from the accessibility
+     * layer on the thread of the provided looper and perform requests for privileged
+     * operations on the provided connection.
+     *
+     * @param looper The looper on which to execute accessibility callbacks.
+     * @param connection The connection for performing privileged operations.
+     *
+     * @hide
+     */
+    public UiAutomation(Looper looper, IUiAutomationConnection connection) {
+        if (looper == null) {
+            throw new IllegalArgumentException("Looper cannot be null!");
+        }
+        if (connection == null) {
+            throw new IllegalArgumentException("Connection cannot be null!");
+        }
+        mUiAutomationConnection = connection;
+        mClient = new IAccessibilityServiceClientImpl(looper);
+    }
+
+    /**
+     * Connects this UiAutomation to the accessibility introspection APIs.
+     *
+     * @hide
+     */
+    public void connect() {
+        synchronized (mLock) {
+            throwIfConnectedLocked();
+            if (mIsConnecting) {
+                return;
+            }
+            mIsConnecting = true;
+        }
+
+        try {
+            // Calling out without a lock held.
+            mUiAutomationConnection.connect(mClient);
+        } catch (RemoteException re) {
+            throw new RuntimeException("Error while connecting UiAutomation", re);
+        }
+
+        synchronized (mLock) {
+            final long startTimeMillis = SystemClock.uptimeMillis();
+            try {
+                while (true) {
+                    if (isConnectedLocked()) {
+                        break;
+                    }
+                    final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
+                    final long remainingTimeMillis = CONNECT_TIMEOUT_MILLIS - elapsedTimeMillis;
+                    if (remainingTimeMillis <= 0) {
+                        throw new RuntimeException("Error while connecting UiAutomation");
+                    }
+                    try {
+                        mLock.wait(remainingTimeMillis);
+                    } catch (InterruptedException ie) {
+                        /* ignore */
+                    }
+                }
+            } finally {
+                mIsConnecting = false;
+            }
+        }
+    }
+
+    /**
+     * Disconnects this UiAutomation from the accessibility introspection APIs.
+     *
+     * @hide
+     */
+    public void disconnect() {
+        synchronized (mLock) {
+            if (mIsConnecting) {
+                throw new IllegalStateException(
+                        "Cannot call disconnect() while connecting!");
+            }
+            throwIfNotConnectedLocked();
+            mConnectionId = CONNECTION_ID_UNDEFINED;
+        }
+        try {
+            // Calling out without a lock held.
+            mUiAutomationConnection.disconnect();
+        } catch (RemoteException re) {
+            throw new RuntimeException("Error while disconnecting UiAutomation", re);
+        }
+    }
+
+    /**
+     * The id of the {@link IAccessibilityInteractionConnection} for querying
+     * the screen content. This is here for legacy purposes since some tools use
+     * hidden APIs to introspect the screen.
+     *
+     * @hide
+     */
+    public int getConnectionId() {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+            return mConnectionId;
+        }
+    }
+
+    /**
+     * Sets a callback for observing the stream of {@link AccessibilityEvent}s.
+     *
+     * @param listener The callback.
+     */
+    public void setOnAccessibilityEventListener(OnAccessibilityEventListener listener) {
+        synchronized (mLock) {
+            mOnAccessibilityEventListener = listener;
+        }
+    }
+
+    /**
+     * Gets the root {@link AccessibilityNodeInfo} in the active window.
+     *
+     * @return The root info.
+     */
+    public AccessibilityNodeInfo getRootInActiveWindow() {
+        final int connectionId;
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+            connectionId = mConnectionId;
+        }
+        // Calling out without a lock held.
+        return AccessibilityInteractionClient.getInstance()
+                .getRootInActiveWindow(connectionId);
+    }
+
+    /**
+     * A method for injecting an arbitrary input event.
+     * <p>
+     * <strong>Note:</strong> It is caller's responsibility to recycle the event.
+     * </p>
+     * @param event The event to inject.
+     * @param sync Whether to inject the event synchronously.
+     * @return Whether event injection succeeded.
+     */
+    public boolean injectInputEvent(InputEvent event, boolean sync) {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+        }
+        try {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Injecting: " + event + " sync: " + sync);
+            }
+            // Calling out without a lock held.
+            return mUiAutomationConnection.injectInputEvent(event, sync);
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "Error while injecting input event!", re);
+        }
+        return false;
+    }
+
+    /**
+     * Sets the device rotation. A client can freeze the rotation in
+     * desired state or freeze the rotation to its current state or
+     * unfreeze the rotation (rotating the device changes its rotation
+     * state).
+     *
+     * @param rotation The desired rotation.
+     * @return Whether the rotation was set successfully.
+     *
+     * @see #ROTATION_FREEZE_0
+     * @see #ROTATION_FREEZE_90
+     * @see #ROTATION_FREEZE_180
+     * @see #ROTATION_FREEZE_270
+     * @see #ROTATION_FREEZE_CURRENT
+     * @see #ROTATION_UNFREEZE
+     */
+    public boolean setRotation(int rotation) {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+        }
+        switch (rotation) {
+            case ROTATION_FREEZE_0:
+            case ROTATION_FREEZE_90:
+            case ROTATION_FREEZE_180:
+            case ROTATION_FREEZE_270:
+            case ROTATION_UNFREEZE:
+            case ROTATION_FREEZE_CURRENT: {
+                try {
+                    // Calling out without a lock held.
+                    mUiAutomationConnection.setRotation(rotation);
+                    return true;
+                } catch (RemoteException re) {
+                    Log.e(LOG_TAG, "Error while setting rotation!", re);
+                }
+            } return false;
+            default: {
+                throw new IllegalArgumentException("Invalid rotation.");
+            }
+        }
+    }
+
+    /**
+     * Executes a command and waits for a specific accessibility event up to a
+     * given wait timeout. To detect a sequence of events one can implement a
+     * filter that keeps track of seen events of the expected sequence and
+     * returns true after the last event of that sequence is received.
+     * <p>
+     * <strong>Note:</strong> It is caller's responsibility to recycle the returned event.
+     * </p>
+     * @param command The command to execute.
+     * @param filter Filter that recognizes the expected event.
+     * @param timeoutMillis The wait timeout in milliseconds.
+     *
+     * @throws TimeoutException If the expected event is not received within the timeout.
+     */
+    public AccessibilityEvent executeAndWaitForEvent(Runnable command,
+            Predicate<AccessibilityEvent> filter, long timeoutMillis) throws TimeoutException {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+
+            mEventQueue.clear();
+            // Prepare to wait for an event.
+            mWaitingForEventDelivery = true;
+
+            // We will ignore events from previous interactions.
+            final long executionStartTimeMillis = SystemClock.uptimeMillis();
+
+            // Execute the command.
+            command.run();
+            try {
+                // Wait for the event.
+                final long startTimeMillis = SystemClock.uptimeMillis();
+                while (true) {
+                    // Drain the event queue
+                    while (!mEventQueue.isEmpty()) {
+                        AccessibilityEvent event = mEventQueue.remove(0);
+                        // Ignore events from previous interactions.
+                        if (event.getEventTime() <= executionStartTimeMillis) {
+                            continue;
+                        }
+                        if (filter.apply(event)) {
+                            return event;
+                        }
+                        event.recycle();
+                    }
+                    // Check if timed out and if not wait.
+                    final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
+                    final long remainingTimeMillis = timeoutMillis - elapsedTimeMillis;
+                    if (remainingTimeMillis <= 0) {
+                        throw new TimeoutException("Expected event not received within: "
+                                + timeoutMillis + " ms.");
+                    }
+                    try {
+                        mLock.wait(remainingTimeMillis);
+                    } catch (InterruptedException ie) {
+                        /* ignore */
+                    }
+                }
+            } finally {
+                mWaitingForEventDelivery = false;
+                mEventQueue.clear();
+                mLock.notifyAll();
+            }
+        }
+    }
+
+    /**
+     * Waits for the accessibility event stream to become idle, which is not to
+     * have received an accessibility event within <code>idleTimeoutMillis</code>.
+     * The total time spent to wait for an idle accessibility event stream is bounded
+     * by the <code>globalTimeoutMillis</code>.
+     *
+     * @param idleTimeoutMillis The timeout in milliseconds between two events
+     *            to consider the device idle.
+     * @param globalTimeoutMillis The maximal global timeout in milliseconds in
+     *            which to wait for an idle state.
+     *
+     * @throws TimeoutException If no idle state was detected within
+     *            <code>globalTimeoutMillis.</code>
+     */
+    public void waitForIdle(long idleTimeoutMillis, long globalTimeoutMillis)
+            throws TimeoutException {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+
+            final long startTimeMillis = SystemClock.uptimeMillis();
+            if (mLastEventTimeMillis <= 0) {
+                mLastEventTimeMillis = startTimeMillis;
+            }
+
+            while (true) {
+                final long currentTimeMillis = SystemClock.uptimeMillis();
+                // Did we get idle state within the global timeout?
+                final long elapsedGlobalTimeMillis = currentTimeMillis - startTimeMillis;
+                final long remainingGlobalTimeMillis =
+                        globalTimeoutMillis - elapsedGlobalTimeMillis;
+                if (remainingGlobalTimeMillis <= 0) {
+                    throw new TimeoutException("No idle state with idle timeout: "
+                            + idleTimeoutMillis + " within global timeout: "
+                            + globalTimeoutMillis);
+                }
+                // Did we get an idle state within the idle timeout?
+                final long elapsedIdleTimeMillis = currentTimeMillis - mLastEventTimeMillis;
+                final long remainingIdleTimeMillis = idleTimeoutMillis - elapsedIdleTimeMillis;
+                if (remainingIdleTimeMillis <= 0) {
+                    return;
+                }
+                try {
+                     mLock.wait(remainingIdleTimeMillis);
+                } catch (InterruptedException ie) {
+                     /* ignore */
+                }
+            }
+        }
+    }
+
+    /**
+     * Takes a screenshot.
+     *
+     * @return The screenshot bitmap on success, null otherwise.
+     */
+    public Bitmap takeScreenshot() {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+        }
+        Display display = DisplayManagerGlobal.getInstance()
+                .getRealDisplay(Display.DEFAULT_DISPLAY);
+        Point displaySize = new Point();
+        display.getRealSize(displaySize);
+        final int displayWidth = displaySize.x;
+        final int displayHeight = displaySize.y;
+
+        final float screenshotWidth;
+        final float screenshotHeight;
+
+        final int rotation = display.getRotation();
+        switch (rotation) {
+            case ROTATION_FREEZE_0: {
+                screenshotWidth = displayWidth;
+                screenshotHeight = displayHeight;
+            } break;
+            case ROTATION_FREEZE_90: {
+                screenshotWidth = displayHeight;
+                screenshotHeight = displayWidth;
+            } break;
+            case ROTATION_FREEZE_180: {
+                screenshotWidth = displayWidth;
+                screenshotHeight = displayHeight;
+            } break;
+            case ROTATION_FREEZE_270: {
+                screenshotWidth = displayHeight;
+                screenshotHeight = displayWidth;
+            } break;
+            default: {
+                throw new IllegalArgumentException("Invalid rotation: "
+                        + rotation);
+            }
+        }
+
+        // Take the screenshot
+        Bitmap screenShot = null;
+        try {
+            // Calling out without a lock held.
+            screenShot = mUiAutomationConnection.takeScreenshot((int) screenshotWidth,
+                    (int) screenshotHeight);
+            if (screenShot == null) {
+                return null;
+            }
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "Error while taking screnshot!", re);
+            return null;
+        }
+
+        // Rotate the screenshot to the current orientation
+        if (rotation != ROTATION_FREEZE_0) {
+            Bitmap unrotatedScreenShot = Bitmap.createBitmap(displayWidth, displayHeight,
+                    Bitmap.Config.ARGB_8888);
+            Canvas canvas = new Canvas(unrotatedScreenShot);
+            canvas.translate(unrotatedScreenShot.getWidth() / 2,
+                    unrotatedScreenShot.getHeight() / 2);
+            canvas.rotate(getDegreesForRotation(rotation));
+            canvas.translate(- screenshotWidth / 2, - screenshotHeight / 2);
+            canvas.drawBitmap(screenShot, 0, 0, null);
+            canvas.setBitmap(null);
+            screenShot = unrotatedScreenShot;
+        }
+
+        // Optimization
+        screenShot.setHasAlpha(false);
+
+        return screenShot;
+    }
+
+    private static float getDegreesForRotation(int value) {
+        switch (value) {
+            case Surface.ROTATION_90: {
+                return 360f - 90f;
+            }
+            case Surface.ROTATION_180: {
+                return 360f - 180f;
+            }
+            case Surface.ROTATION_270: {
+                return 360f - 270f;
+            } default: {
+                return 0;
+            }
+        }
+    }
+
+    private boolean isConnectedLocked() {
+        return mConnectionId != CONNECTION_ID_UNDEFINED;
+    }
+
+    private void throwIfConnectedLocked() {
+        if (mConnectionId != CONNECTION_ID_UNDEFINED) {
+            throw new IllegalStateException("UiAutomation not connected!");
+        }
+    }
+
+    private void throwIfNotConnectedLocked() {
+        if (!isConnectedLocked()) {
+            throw new IllegalStateException("UiAutomation not connected!");
+        }
+    }
+
+    private class IAccessibilityServiceClientImpl extends IAccessibilityServiceClientWrapper {
+
+        public IAccessibilityServiceClientImpl(Looper looper) {
+            super(null, looper, new Callbacks() {
+                @Override
+                public void onSetConnectionId(int connectionId) {
+                    synchronized (mLock) {
+                        mConnectionId = connectionId;
+                        mLock.notifyAll();
+                    }
+                }
+
+                @Override
+                public void onServiceConnected() {
+                    /* do nothing */
+                }
+
+                @Override
+                public void onInterrupt() {
+                    /* do nothing */
+                }
+
+                @Override
+                public boolean onGesture(int gestureId) {
+                    /* do nothing */
+                    return false;
+                }
+
+                @Override
+                public void onAccessibilityEvent(AccessibilityEvent event) {
+                    synchronized (mLock) {
+                        mLastEventTimeMillis = event.getEventTime();
+                        if (mWaitingForEventDelivery) {
+                            mEventQueue.add(AccessibilityEvent.obtain(event));
+                        }
+                        mLock.notifyAll();
+                    }
+                    // Calling out only without a lock held.
+                    final OnAccessibilityEventListener listener = mOnAccessibilityEventListener;
+                    if (listener != null) {
+                        listener.onAccessibilityEvent(AccessibilityEvent.obtain(event));
+                    }
+                }
+            });
+        }
+    }
+}
diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java
new file mode 100644
index 0000000..9b5857f
--- /dev/null
+++ b/core/java/android/app/UiAutomationConnection.java
@@ -0,0 +1,239 @@
+/*
+ * 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.
+ */
+
+package android.app;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.accessibilityservice.IAccessibilityServiceClient;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.hardware.input.InputManager;
+import android.os.Binder;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.view.IWindowManager;
+import android.view.InputEvent;
+import android.view.Surface;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.IAccessibilityManager;
+
+/**
+ * This is a remote object that is passed from the shell to an instrumentation
+ * for enabling access to privileged operations which the shell can do and the
+ * instrumentation cannot. These privileged operations are needed for implementing
+ * a {@link UiAutomation} that enables across application testing by simulating
+ * user actions and performing screen introspection.
+ *
+ * @hide
+ */
+public final class UiAutomationConnection extends IUiAutomationConnection.Stub {
+
+    private static final int INITIAL_FROZEN_ROTATION_UNSPECIFIED = -1;
+
+    private final IWindowManager mWindowManager = IWindowManager.Stub.asInterface(
+            ServiceManager.getService(Service.WINDOW_SERVICE));
+
+    private final Object mLock = new Object();
+
+    private int mInitialFrozenRotation = INITIAL_FROZEN_ROTATION_UNSPECIFIED;
+
+    private IAccessibilityServiceClient mClient;
+
+    private boolean mIsShutdown;
+
+    private int mOwningUid;
+
+    public void connect(IAccessibilityServiceClient client) {
+        if (client == null) {
+            throw new IllegalArgumentException("Client cannot be null!");
+        }
+        synchronized (mLock) {
+            throwIfShutdownLocked();
+            if (isConnectedLocked()) {
+                throw new IllegalStateException("Already connected.");
+            }
+            mOwningUid = Binder.getCallingUid();
+            registerUiTestAutomationServiceLocked(client);
+            storeRotationStateLocked();
+        }
+    }
+
+    @Override
+    public void disconnect() {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            if (!isConnectedLocked()) {
+                throw new IllegalStateException("Already disconnected.");
+            }
+            mOwningUid = -1;
+            unregisterUiTestAutomationServiceLocked();
+            restoreRotationStateLocked();
+        }
+    }
+
+    @Override
+    public boolean injectInputEvent(InputEvent event, boolean sync) {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            throwIfNotConnectedLocked();
+        }
+        final int mode = (sync) ? InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH
+                : InputManager.INJECT_INPUT_EVENT_MODE_ASYNC;
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            return InputManager.getInstance().injectInputEvent(event, mode);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
+    public boolean setRotation(int rotation) {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            throwIfNotConnectedLocked();
+        }
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            if (rotation == UiAutomation.ROTATION_UNFREEZE) {
+                mWindowManager.thawRotation();
+            } else {
+                mWindowManager.freezeRotation(rotation);
+            }
+            return true;
+        } catch (RemoteException re) {
+            /* ignore */
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+        return false;
+    }
+
+    @Override
+    public Bitmap takeScreenshot(int width, int height) {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            throwIfNotConnectedLocked();
+        }
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            return Surface.screenshot(width, height);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
+    public void shutdown() {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            mIsShutdown = true;
+            if (isConnectedLocked()) {
+                disconnect();
+            }
+        }
+    }
+
+    private void registerUiTestAutomationServiceLocked(IAccessibilityServiceClient client) {
+        IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface(
+                ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
+        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
+        info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
+        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
+        info.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS
+                | AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
+        try {
+            // Calling out with a lock held is fine since if the system
+            // process is gone the client calling in will be killed.
+            manager.registerUiTestAutomationService(client, info);
+            mClient = client;
+        } catch (RemoteException re) {
+            throw new IllegalStateException("Error while registering UiTestAutomationService.", re);
+        }
+    }
+
+    private void unregisterUiTestAutomationServiceLocked() {
+        IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface(
+              ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
+        try {
+            // Calling out with a lock held is fine since if the system
+            // process is gone the client calling in will be killed.
+            manager.unregisterUiTestAutomationService(mClient);
+            mClient = null;
+        } catch (RemoteException re) {
+            throw new IllegalStateException("Error while unregistering UiTestAutomationService",
+                    re);
+        }
+    }
+
+    private void storeRotationStateLocked() {
+        try {
+            if (mWindowManager.isRotationFrozen()) {
+                // Calling out with a lock held is fine since if the system
+                // process is gone the client calling in will be killed.
+                mInitialFrozenRotation = mWindowManager.getRotation();
+            }
+        } catch (RemoteException re) {
+            /* ignore */
+        }
+    }
+
+    private void restoreRotationStateLocked() {
+        try {
+            if (mInitialFrozenRotation != INITIAL_FROZEN_ROTATION_UNSPECIFIED) {
+                // Calling out with a lock held is fine since if the system
+                // process is gone the client calling in will be killed.
+                mWindowManager.freezeRotation(mInitialFrozenRotation);
+            } else {
+                // Calling out with a lock held is fine since if the system
+                // process is gone the client calling in will be killed.
+                mWindowManager.thawRotation();
+            }
+        } catch (RemoteException re) {
+            /* ignore */
+        }
+    }
+
+    private boolean isConnectedLocked() {
+        return mClient != null;
+    }
+
+    private void throwIfShutdownLocked() {
+        if (mIsShutdown) {
+            throw new IllegalStateException("Connection shutdown!");
+        }
+    }
+
+    private void throwIfNotConnectedLocked() {
+        if (!isConnectedLocked()) {
+            throw new IllegalStateException("Not connected!");
+        }
+    }
+
+    private void throwIfCalledByNotTrustedUidLocked() {
+        final int callingUid = Binder.getCallingUid();
+        if (callingUid != mOwningUid && mOwningUid != Process.SYSTEM_UID
+                && callingUid != 0 /*root*/) {
+            throw new SecurityException("Calling from not trusted UID!");
+        }
+    }
+}
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index a6f7abc..90ee0ac 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -174,8 +174,8 @@
      */
     class Transport extends ContentProviderNative {
         AppOpsManager mAppOpsManager = null;
-        int mReadOp = -1;
-        int mWriteOp = -1;
+        int mReadOp = AppOpsManager.OP_NONE;
+        int mWriteOp = AppOpsManager.OP_NONE;
 
         ContentProvider getContentProvider() {
             return ContentProvider.this;
@@ -190,8 +190,10 @@
         public Cursor query(String callingPkg, Uri uri, String[] projection,
                 String selection, String[] selectionArgs, String sortOrder,
                 ICancellationSignal cancellationSignal) {
-            // XXX need content provider to help return correct result.
-            enforceReadPermission(callingPkg, uri);
+            if (enforceReadPermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
+                return rejectQuery(uri, projection, selection, selectionArgs, sortOrder,
+                        CancellationSignal.fromTransport(cancellationSignal));
+            }
             return ContentProvider.this.query(uri, projection, selection, selectionArgs, sortOrder,
                     CancellationSignal.fromTransport(cancellationSignal));
         }
@@ -203,8 +205,9 @@
 
         @Override
         public Uri insert(String callingPkg, Uri uri, ContentValues initialValues) {
-            // XXX need content provider to help return correct result.
-            enforceWritePermission(callingPkg, uri);
+            if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
+                return rejectInsert(uri, initialValues);
+            }
             return ContentProvider.this.insert(uri, initialValues);
         }
 
@@ -271,7 +274,7 @@
 
         @Override
         public Bundle call(String callingPkg, String method, String arg, Bundle extras) {
-            return ContentProvider.this.call(method, arg, extras);
+            return ContentProvider.this.callFromPackage(callingPkg, method, arg, extras);
         }
 
         @Override
@@ -306,7 +309,7 @@
 
         private int enforceReadPermission(String callingPkg, Uri uri) throws SecurityException {
             enforceReadPermissionInner(uri);
-            if (mAppOpsManager != null) {
+            if (mReadOp != AppOpsManager.OP_NONE) {
                 return mAppOpsManager.noteOp(mReadOp, Binder.getCallingUid(), callingPkg);
             }
             return AppOpsManager.MODE_ALLOWED;
@@ -375,7 +378,7 @@
 
         private int enforceWritePermission(String callingPkg, Uri uri) throws SecurityException {
             enforceWritePermissionInner(uri);
-            if (mAppOpsManager != null) {
+            if (mWriteOp != AppOpsManager.OP_NONE) {
                 return mAppOpsManager.noteOp(mWriteOp, Binder.getCallingUid(), callingPkg);
             }
             return AppOpsManager.MODE_ALLOWED;
@@ -526,6 +529,11 @@
         mTransport.mWriteOp = writeOp;
     }
 
+    /** @hide */
+    public AppOpsManager getAppOpsManager() {
+        return mTransport.mAppOpsManager;
+    }
+
     /**
      * Implement this to initialize your content provider on startup.
      * This method is called for all registered content providers on the
@@ -581,6 +589,31 @@
     }
 
     /**
+     * @hide
+     * Implementation when a caller has performed a query on the content
+     * provider, but that call has been rejected for the operation given
+     * to {@link #setAppOps(int, int)}.  The default implementation
+     * rewrites the <var>selection</var> argument to include a condition
+     * that is never true (so will always result in an empty cursor)
+     * and calls through to {@link #query(android.net.Uri, String[], String, String[],
+     * String, android.os.CancellationSignal)} with that.
+     */
+    public Cursor rejectQuery(Uri uri, String[] projection,
+            String selection, String[] selectionArgs, String sortOrder,
+            CancellationSignal cancellationSignal) {
+        // The read is not allowed...  to fake it out, we replace the given
+        // selection statement with a dummy one that will always be false.
+        // This way we will get a cursor back that has the correct structure
+        // but contains no rows.
+        if (selection == null) {
+            selection = "'A' = 'B'";
+        } else {
+            selection = "'A' = 'B' AND (" + selection + ")";
+        }
+        return query(uri, projection, selection, selectionArgs, sortOrder, cancellationSignal);
+    }
+
+    /**
      * Implement this to handle query requests from clients.
      * This method can be called from multiple threads, as described in
      * <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes
@@ -728,6 +761,23 @@
     public abstract String getType(Uri uri);
 
     /**
+     * @hide
+     * Implementation when a caller has performed an insert on the content
+     * provider, but that call has been rejected for the operation given
+     * to {@link #setAppOps(int, int)}.  The default implementation simply
+     * returns a dummy URI that is the base URI with a 0 path element
+     * appended.
+     */
+    public Uri rejectInsert(Uri uri, ContentValues values) {
+        // If not allowed, we need to return some reasonable URI.  Maybe the
+        // content provider should be responsible for this, but for now we
+        // will just return the base URI with a dummy '0' tagged on to it.
+        // You shouldn't be able to read if you can't write, anyway, so it
+        // shouldn't matter much what is returned.
+        return uri.buildUpon().appendPath("0").build();
+    }
+
+    /**
      * Implement this to handle requests to insert a new row.
      * As a courtesy, call {@link ContentResolver#notifyChange(android.net.Uri ,android.database.ContentObserver) notifyChange()}
      * after inserting.
@@ -1144,6 +1194,15 @@
     }
 
     /**
+     * @hide
+     * Front-end to {@link #call(String, String, android.os.Bundle)} that provides the name
+     * of the calling package.
+     */
+    public Bundle callFromPackage(String callingPackag, String method, String arg, Bundle extras) {
+        return call(method, arg, extras);
+    }
+
+    /**
      * Call a provider-defined method.  This can be used to implement
      * interfaces that are cheaper and/or unnatural for a table-like
      * model.
@@ -1189,12 +1248,10 @@
      * Print the Provider's state into the given stream.  This gets invoked if
      * you run "adb shell dumpsys activity provider &lt;provider_component_name&gt;".
      *
-     * @param prefix Desired prefix to prepend at each line of output.
      * @param fd The raw file descriptor that the dump is being sent to.
      * @param writer The PrintWriter to which you should dump your state.  This will be
      * closed for you after you return.
      * @param args additional arguments to the dump request.
-     * @hide
      */
     public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
         writer.println("nothing to dump");
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 63c97ba..94d27ec 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -208,7 +208,7 @@
 
     public ContentResolver(Context context) {
         mContext = context != null ? context : ActivityThread.currentApplication();
-        mPackageName = context.getBasePackageName();
+        mPackageName = mContext.getBasePackageName();
     }
 
     /** @hide */
@@ -549,7 +549,7 @@
      * ContentProvider.openFile}.
      * @return Returns a new ParcelFileDescriptor pointing to the file.  You
      * own this descriptor and are responsible for closing it when done.
-     * @throws FileNotFoundException Throws FileNotFoundException of no
+     * @throws FileNotFoundException Throws FileNotFoundException if no
      * file exists under the URI or the mode is invalid.
      * @see #openAssetFileDescriptor(Uri, String)
      */
@@ -1080,9 +1080,9 @@
         if (!SCHEME_CONTENT.equals(uri.getScheme())) {
             return null;
         }
-        String auth = uri.getAuthority();
+        final String auth = uri.getAuthority();
         if (auth != null) {
-            return acquireProvider(mContext, uri.getAuthority());
+            return acquireProvider(mContext, auth);
         }
         return null;
     }
@@ -1099,9 +1099,9 @@
         if (!SCHEME_CONTENT.equals(uri.getScheme())) {
             return null;
         }
-        String auth = uri.getAuthority();
+        final String auth = uri.getAuthority();
         if (auth != null) {
-            return acquireExistingProvider(mContext, uri.getAuthority());
+            return acquireExistingProvider(mContext, auth);
         }
         return null;
     }
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index f7c28b6..c964af4 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -1138,6 +1138,14 @@
             String receiverPermission);
 
     /**
+     * Like {@link #sendBroadcast(Intent, String)}, but also allows specification
+     * of an assocated app op as per {@link android.app.AppOpsManager}.
+     * @hide
+     */
+    public abstract void sendBroadcast(Intent intent,
+            String receiverPermission, int appOp);
+
+    /**
      * Broadcast the given intent to all interested BroadcastReceivers, delivering
      * them one at a time to allow more preferred receivers to consume the
      * broadcast before it is delivered to less preferred receivers.  This
@@ -1208,6 +1216,17 @@
             Bundle initialExtras);
 
     /**
+     * Like {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler,
+     * int, String, android.os.Bundle)}, but also allows specification
+     * of an assocated app op as per {@link android.app.AppOpsManager}.
+     * @hide
+     */
+    public abstract void sendOrderedBroadcast(Intent intent,
+            String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
+            Handler scheduler, int initialCode, String initialData,
+            Bundle initialExtras);
+
+    /**
      * Version of {@link #sendBroadcast(Intent)} that allows you to specify the
      * user the broadcast will be sent to.  This is not available to applications
      * that are not pre-installed on the system image.  Using it requires holding
diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java
index b63f45e..736dd99 100644
--- a/core/java/android/content/ContextWrapper.java
+++ b/core/java/android/content/ContextWrapper.java
@@ -349,6 +349,12 @@
         mBase.sendBroadcast(intent, receiverPermission);
     }
 
+    /** @hide */
+    @Override
+    public void sendBroadcast(Intent intent, String receiverPermission, int appOp) {
+        mBase.sendBroadcast(intent, receiverPermission, appOp);
+    }
+
     @Override
     public void sendOrderedBroadcast(Intent intent,
             String receiverPermission) {
@@ -365,6 +371,17 @@
                 initialData, initialExtras);
     }
 
+    /** @hide */
+    @Override
+    public void sendOrderedBroadcast(
+        Intent intent, String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
+        Handler scheduler, int initialCode, String initialData,
+        Bundle initialExtras) {
+        mBase.sendOrderedBroadcast(intent, receiverPermission, appOp,
+                resultReceiver, scheduler, initialCode,
+                initialData, initialExtras);
+    }
+
     @Override
     public void sendBroadcastAsUser(Intent intent, UserHandle user) {
         mBase.sendBroadcastAsUser(intent, user);
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 89b1bbd..434946c 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -883,7 +883,7 @@
      * Activity Action: Allow the user to select a particular kind of data and
      * return it.  This is different than {@link #ACTION_PICK} in that here we
      * just say what kind of data is desired, not a URI of existing data from
-     * which the user can pick.  A ACTION_GET_CONTENT could allow the user to
+     * which the user can pick.  An ACTION_GET_CONTENT could allow the user to
      * create the data as it runs (for example taking a picture or recording a
      * sound), let them browse over the web and download the desired data,
      * etc.
@@ -917,12 +917,17 @@
      * from a remote server but not already on the local device (thus requiring
      * they be downloaded when opened).
      * <p>
+     * If the caller can handle multiple returned items (the user performing
+     * multiple selection), then it can specify {@link #EXTRA_ALLOW_MULTIPLE}
+     * to indicate this.
+     * <p>
      * Input: {@link #getType} is the desired MIME type to retrieve.  Note
      * that no URI is supplied in the intent, as there are no constraints on
      * where the returned data originally comes from.  You may also include the
      * {@link #CATEGORY_OPENABLE} if you can only accept data that can be
      * opened as a stream.  You may use {@link #EXTRA_LOCAL_ONLY} to limit content
-     * selection to local data.
+     * selection to local data.  You may use {@link #EXTRA_ALLOW_MULTIPLE} to
+     * allow the user to select multiple items.
      * <p>
      * Output: The URI of the item that was picked.  This must be a content:
      * URI so that any receiver can access it.
@@ -1140,14 +1145,33 @@
      */
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH";
+
     /**
      * Activity Action: Perform assist action.
      * <p>
-     * Input: nothing
+     * Input: {@link #EXTRA_ASSIST_PACKAGE} and {@link #EXTRA_ASSIST_CONTEXT} can provide
+     * additional optional contextual information about where the user was when they requested
+     * the assist.
      * Output: nothing.
      */
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_ASSIST = "android.intent.action.ASSIST";
+
+    /**
+     * An optional field on {@link #ACTION_ASSIST} containing the name of the current
+     * foreground application package at the time the assist was invoked.
+     */
+    public static final String EXTRA_ASSIST_PACKAGE
+            = "android.intent.extra.ASSIST_PACKAGE";
+
+    /**
+     * An optional field on {@link #ACTION_ASSIST} containing additional contextual
+     * information supplied by the current foreground app at the time of the assist
+     * request.  This is a {@link Bundle} of additional data.
+     */
+    public static final String EXTRA_ASSIST_CONTEXT
+            = "android.intent.extra.ASSIST_CONTEXT";
+
     /**
      * Activity Action: List all available applications
      * <p>Input: Nothing.
@@ -1588,7 +1612,7 @@
      * <ul>
      * <li> {@link #EXTRA_UID} containing the integer uid assigned to the package.
      * <li> {@link #EXTRA_CHANGED_COMPONENT_NAME_LIST} containing the class name
-     * of the changed components.
+     * of the changed components (or the package name itself).
      * <li> {@link #EXTRA_DONT_KILL_APP} containing boolean field to override the
      * default action of restarting the application.
      * </ul>
@@ -2969,7 +2993,9 @@
 
     /**
      * This field is part of {@link android.content.Intent#ACTION_PACKAGE_CHANGED},
-     * and contains a string array of all of the components that have changed.
+     * and contains a string array of all of the components that have changed.  If
+     * the state of the overall package has changed, then it will contain an entry
+     * with the package name itself.
      */
     public static final String EXTRA_CHANGED_COMPONENT_NAME_LIST =
             "android.intent.extra.changed_component_name_list";
@@ -3024,6 +3050,17 @@
         "android.intent.extra.LOCAL_ONLY";
 
     /**
+     * Used to indicate that a {@link #ACTION_GET_CONTENT} intent can allow the
+     * user to select and return multiple items.  This is a boolean extra; the default
+     * is false.  If true, an implementation of ACTION_GET_CONTENT is allowed to
+     * present the user with a UI where they can pick multiple items that are all
+     * returned to the caller.  When this happens, they should be returned as
+     * the {@link #getClipData()} part of the result Intent.
+     */
+    public static final String EXTRA_ALLOW_MULTIPLE =
+        "android.intent.extra.ALLOW_MULTIPLE";
+
+    /**
      * The userHandle carried with broadcast intents related to addition, removal and switching of users
      * - {@link #ACTION_USER_ADDED}, {@link #ACTION_USER_REMOVED} and {@link #ACTION_USER_SWITCHED}.
      * @hide
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 0445b39..a368451 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -210,6 +210,8 @@
     
     List<PackageInfo> getPreferredPackages(int flags);
 
+    void resetPreferredActivities(int userId);
+
     void addPreferredActivity(in IntentFilter filter, int match,
             in ComponentName[] set, in ComponentName activity, int userId);
 
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index a69f220..d80598c 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -175,6 +175,14 @@
     public static final int GET_CONFIGURATIONS = 0x00004000;
 
     /**
+     * {@link PackageInfo} flag: include disabled components which are in
+     * that state only because of {@link #COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED}
+     * in the returned info.  Note that if you set this flag, applications
+     * that are in this disabled state will be reported as enabled.
+     */
+    public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000;
+
+    /**
      * Resolution and querying flag: if set, only filters that support the
      * {@link android.content.Intent#CATEGORY_DEFAULT} will be considered for
      * matching.  This is a synonym for including the CATEGORY_DEFAULT in your
@@ -265,6 +273,19 @@
     public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3;
 
     /**
+     * Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: This
+     * application should be considered, until the point where the user actually
+     * wants to use it.  This means that it will not normally show up to the user
+     * (such as in the launcher), but various parts of the user interface can
+     * use {@link #GET_DISABLED_UNTIL_USED_COMPONENTS} to still see it and allow
+     * the user to select it (as for example an IME, device admin, etc).  Such code,
+     * once the user has selected the app, should at that point also make it enabled.
+     * This option currently <strong>can not</strong> be used with
+     * {@link #setComponentEnabledSetting(ComponentName, int, int)}.
+     */
+    public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4;
+
+    /**
      * Flag parameter for {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} to
      * indicate that this package should be installed as forward locked, i.e. only the app itself
      * should have access to its code and non-resource assets.
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 3e8c2a8..e1887bc 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -3527,29 +3527,45 @@
         return generateApplicationInfo(p, flags, state, UserHandle.getCallingUserId());
     }
 
+    private static void updateApplicationInfo(ApplicationInfo ai, int flags,
+            PackageUserState state) {
+        // CompatibilityMode is global state.
+        if (!sCompatibilityModeEnabled) {
+            ai.disableCompatibilityMode();
+        }
+        if (state.installed) {
+            ai.flags |= ApplicationInfo.FLAG_INSTALLED;
+        } else {
+            ai.flags &= ~ApplicationInfo.FLAG_INSTALLED;
+        }
+        if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
+            ai.enabled = true;
+        } else if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
+            ai.enabled = (flags&PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS) != 0;
+        } else if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED
+                || state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) {
+            ai.enabled = false;
+        }
+        ai.enabledSetting = state.enabled;
+    }
+
     public static ApplicationInfo generateApplicationInfo(Package p, int flags,
             PackageUserState state, int userId) {
         if (p == null) return null;
         if (!checkUseInstalled(flags, state)) {
             return null;
         }
-        if (!copyNeeded(flags, p, state, null, userId)) {
-            // CompatibilityMode is global state. It's safe to modify the instance
-            // of the package.
-            if (!sCompatibilityModeEnabled) {
-                p.applicationInfo.disableCompatibilityMode();
-            }
-            // Make sure we report as installed.  Also safe to do, since the
-            // default state should be installed (we will always copy if we
-            // need to report it is not installed).
-            p.applicationInfo.flags |= ApplicationInfo.FLAG_INSTALLED;
-            if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
-                p.applicationInfo.enabled = true;
-            } else if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED
-                    || state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) {
-                p.applicationInfo.enabled = false;
-            }
-            p.applicationInfo.enabledSetting = state.enabled;
+        if (!copyNeeded(flags, p, state, null, userId)
+                && ((flags&PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS) == 0
+                        || state.enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED)) {
+            // In this case it is safe to directly modify the internal ApplicationInfo state:
+            // - CompatibilityMode is global state, so will be the same for every call.
+            // - We only come in to here if the app should reported as installed; this is the
+            // default state, and we will do a copy otherwise.
+            // - The enable state will always be reported the same for the application across
+            // calls; the only exception is for the UNTIL_USED mode, and in that case we will
+            // be doing a copy.
+            updateApplicationInfo(p.applicationInfo, flags, state);
             return p.applicationInfo;
         }
 
@@ -3565,26 +3581,12 @@
         if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0) {
             ai.sharedLibraryFiles = p.usesLibraryFiles;
         }
-        if (!sCompatibilityModeEnabled) {
-            ai.disableCompatibilityMode();
-        }
         if (state.stopped) {
             ai.flags |= ApplicationInfo.FLAG_STOPPED;
         } else {
             ai.flags &= ~ApplicationInfo.FLAG_STOPPED;
         }
-        if (state.installed) {
-            ai.flags |= ApplicationInfo.FLAG_INSTALLED;
-        } else {
-            ai.flags &= ~ApplicationInfo.FLAG_INSTALLED;
-        }
-        if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
-            ai.enabled = true;
-        } else if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED
-                || state.enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) {
-            ai.enabled = false;
-        }
-        ai.enabledSetting = state.enabled;
+        updateApplicationInfo(ai, flags, state);
         return ai;
     }
 
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index 6f7c1f3..0017c46a 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -216,6 +216,13 @@
         setJournalSizeLimit();
         setAutoCheckpointInterval();
         setLocaleFromConfiguration();
+
+        // Register custom functions.
+        final int functionCount = mConfiguration.customFunctions.size();
+        for (int i = 0; i < functionCount; i++) {
+            SQLiteCustomFunction function = mConfiguration.customFunctions.get(i);
+            nativeRegisterCustomFunction(mConnectionPtr, function);
+        }
     }
 
     private void dispose(boolean finalized) {
@@ -974,7 +981,7 @@
         if (count != statement.mNumParameters) {
             throw new SQLiteBindOrColumnIndexOutOfRangeException(
                     "Expected " + statement.mNumParameters + " bind arguments but "
-                    + bindArgs.length + " were provided.");
+                    + count + " were provided.");
         }
         if (count == 0) {
             return;
diff --git a/core/java/android/database/sqlite/SQLiteSession.java b/core/java/android/database/sqlite/SQLiteSession.java
index beb5b3a..d80ab1f 100644
--- a/core/java/android/database/sqlite/SQLiteSession.java
+++ b/core/java/android/database/sqlite/SQLiteSession.java
@@ -926,7 +926,7 @@
     }
 
     private void throwIfNestedTransaction() {
-        if (mTransactionStack == null && mTransactionStack.mParent != null) {
+        if (hasNestedTransaction()) {
             throw new IllegalStateException("Cannot perform this operation because "
                     + "a nested transaction is in progress.");
         }
diff --git a/core/java/android/ddm/DdmHandleViewDebug.java b/core/java/android/ddm/DdmHandleViewDebug.java
index a0578fb..ce83796 100644
--- a/core/java/android/ddm/DdmHandleViewDebug.java
+++ b/core/java/android/ddm/DdmHandleViewDebug.java
@@ -32,6 +32,7 @@
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
+import java.lang.reflect.Method;
 import java.nio.BufferUnderflowException;
 import java.nio.ByteBuffer;
 
@@ -67,14 +68,14 @@
     /** Obtain the Display List corresponding to the view. */
     private static final int VUOP_DUMP_DISPLAYLIST = 2;
 
-    /** Invalidate View. */
-    private static final int VUOP_INVALIDATE_VIEW = 3;
-
-    /** Re-layout given view. */
-    private static final int VUOP_LAYOUT_VIEW = 4;
-
     /** Profile a view. */
-    private static final int VUOP_PROFILE_VIEW = 5;
+    private static final int VUOP_PROFILE_VIEW = 3;
+
+    /** Invoke a method on the view. */
+    private static final int VUOP_INVOKE_VIEW_METHOD = 4;
+
+    /** Set layout parameter. */
+    private static final int VUOP_SET_LAYOUT_PARAMETER = 5;
 
     /** Error code indicating operation specified in chunk is invalid. */
     private static final int ERR_INVALID_OP = -1;
@@ -82,6 +83,11 @@
     /** Error code indicating that the parameters are invalid. */
     private static final int ERR_INVALID_PARAM = -2;
 
+    /** Error code indicating an exception while performing operation. */
+    private static final int ERR_EXCEPTION = -3;
+
+    private static final String TAG = "DdmViewDebug";
+
     private static final DdmHandleViewDebug sInstance = new DdmHandleViewDebug();
 
     /** singleton, do not instantiate. */
@@ -140,12 +146,12 @@
                     return captureView(rootView, targetView);
                 case VUOP_DUMP_DISPLAYLIST:
                     return dumpDisplayLists(rootView, targetView);
-                case VUOP_INVALIDATE_VIEW:
-                    return invalidateView(rootView, targetView);
-                case VUOP_LAYOUT_VIEW:
-                    return layoutView(rootView, targetView);
                 case VUOP_PROFILE_VIEW:
                     return profileView(rootView, targetView);
+                case VUOP_INVOKE_VIEW_METHOD:
+                    return invokeViewMethod(rootView, targetView, in);
+                case VUOP_SET_LAYOUT_PARAMETER:
+                    return setLayoutParameter(rootView, targetView, in);
                 default:
                     return createFailChunk(ERR_INVALID_OP, "Unknown view operation: " + op);
             }
@@ -276,20 +282,115 @@
         return null;
     }
 
-    /** Invalidates provided view. */
-    private Chunk invalidateView(final View rootView, final View targetView) {
-        targetView.postInvalidate();
+    /**
+     * Invokes provided method on the view.
+     * The method name and its arguments are passed in as inputs via the byte buffer.
+     * The buffer contains:<ol>
+     *  <li> len(method name) </li>
+     *  <li> method name </li>
+     *  <li> # of args </li>
+     *  <li> arguments: Each argument comprises of a type specifier followed by the actual argument.
+     *          The type specifier is a single character as used in JNI:
+     *          (Z - boolean, B - byte, C - char, S - short, I - int, J - long,
+     *          F - float, D - double). <p>
+     *          The type specifier is followed by the actual value of argument.
+     *          Booleans are encoded via bytes with 0 indicating false.</li>
+     * </ol>
+     * Methods that take no arguments need only specify the method name.
+     */
+    private Chunk invokeViewMethod(final View rootView, final View targetView, ByteBuffer in) {
+        int l = in.getInt();
+        String methodName = getString(in, l);
+
+        Class<?>[] argTypes;
+        Object[] args;
+        if (!in.hasRemaining()) {
+            argTypes = new Class<?>[0];
+            args = new Object[0];
+        } else {
+            int nArgs = in.getInt();
+
+            argTypes = new Class<?>[nArgs];
+            args = new Object[nArgs];
+
+            for (int i = 0; i < nArgs; i++) {
+                char c = in.getChar();
+                switch (c) {
+                    case 'Z':
+                        argTypes[i] = boolean.class;
+                        args[i] = in.get() == 0 ? false : true;
+                        break;
+                    case 'B':
+                        argTypes[i] = byte.class;
+                        args[i] = in.get();
+                        break;
+                    case 'C':
+                        argTypes[i] = char.class;
+                        args[i] = in.getChar();
+                        break;
+                    case 'S':
+                        argTypes[i] = short.class;
+                        args[i] = in.getShort();
+                        break;
+                    case 'I':
+                        argTypes[i] = int.class;
+                        args[i] = in.getInt();
+                        break;
+                    case 'J':
+                        argTypes[i] = long.class;
+                        args[i] = in.getLong();
+                        break;
+                    case 'F':
+                        argTypes[i] = float.class;
+                        args[i] = in.getFloat();
+                        break;
+                    case 'D':
+                        argTypes[i] = double.class;
+                        args[i] = in.getDouble();
+                        break;
+                    default:
+                        Log.e(TAG, "arg " + i + ", unrecognized type: " + c);
+                        return createFailChunk(ERR_INVALID_PARAM,
+                                "Unsupported parameter type (" + c + ") to invoke view method.");
+                }
+            }
+        }
+
+        Method method = null;
+        try {
+            method = targetView.getClass().getMethod(methodName, argTypes);
+        } catch (NoSuchMethodException e) {
+            Log.e(TAG, "No such method: " + e.getMessage());
+            return createFailChunk(ERR_INVALID_PARAM,
+                    "No such method: " + e.getMessage());
+        }
+
+        try {
+            ViewDebug.invokeViewMethod(targetView, method, args);
+        } catch (Exception e) {
+            Log.e(TAG, "Exception while invoking method: " + e.getCause().getMessage());
+            String msg = e.getCause().getMessage();
+            if (msg == null) {
+                msg = e.getCause().toString();
+            }
+            return createFailChunk(ERR_EXCEPTION, msg);
+        }
+
         return null;
     }
 
-    /** Lays out provided view. */
-    private Chunk layoutView(View rootView, final View targetView) {
-        rootView.post(new Runnable() {
-            @Override
-            public void run() {
-                targetView.requestLayout();
-            }
-        });
+    private Chunk setLayoutParameter(final View rootView, final View targetView, ByteBuffer in) {
+        int l = in.getInt();
+        String param = getString(in, l);
+        int value = in.getInt();
+        try {
+            ViewDebug.setLayoutParameter(targetView, param, value);
+        } catch (Exception e) {
+            Log.e(TAG, "Exception setting layout parameter: " + e);
+            return createFailChunk(ERR_EXCEPTION, "Error accessing field "
+                        + param + ":" + e.getMessage());
+        }
+
         return null;
     }
 
diff --git a/core/java/android/hardware/Sensor.java b/core/java/android/hardware/Sensor.java
index e0c9d2c..41384d2 100644
--- a/core/java/android/hardware/Sensor.java
+++ b/core/java/android/hardware/Sensor.java
@@ -194,7 +194,8 @@
         return mMinDelay;
     }
 
-    int getHandle() {
+    /** @hide */
+    public int getHandle() {
         return mHandle;
     }
 
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index b8ad818..c0d2fae 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -1314,56 +1314,4 @@
             return mLegacySensorManager;
         }
     }
-
-    /**
-     * Sensor event pool implementation.
-     * @hide
-     */
-    protected static final class SensorEventPool {
-        private final int mPoolSize;
-        private final SensorEvent mPool[];
-        private int mNumItemsInPool;
-
-        private SensorEvent createSensorEvent() {
-            // maximal size for all legacy events is 3
-            return new SensorEvent(3);
-        }
-
-        SensorEventPool(int poolSize) {
-            mPoolSize = poolSize;
-            mNumItemsInPool = poolSize;
-            mPool = new SensorEvent[poolSize];
-        }
-
-        SensorEvent getFromPool() {
-            SensorEvent t = null;
-            synchronized (this) {
-                if (mNumItemsInPool > 0) {
-                    // remove the "top" item from the pool
-                    final int index = mPoolSize - mNumItemsInPool;
-                    t = mPool[index];
-                    mPool[index] = null;
-                    mNumItemsInPool--;
-                }
-            }
-            if (t == null) {
-                // the pool was empty or this item was removed from the pool for
-                // the first time. In any case, we need to create a new item.
-                t = createSensorEvent();
-            }
-            return t;
-        }
-
-        void returnToPool(SensorEvent t) {
-            synchronized (this) {
-                // is there space left in the pool?
-                if (mNumItemsInPool < mPoolSize) {
-                    // if so, return the item to the pool
-                    mNumItemsInPool++;
-                    final int index = mPoolSize - mNumItemsInPool;
-                    mPool[index] = t;
-                }
-            }
-        }
-    }
 }
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java
index 7375e7d..9591631 100644
--- a/core/java/android/hardware/SystemSensorManager.java
+++ b/core/java/android/hardware/SystemSensorManager.java
@@ -16,18 +16,19 @@
 
 package android.hardware;
 
-import android.os.Looper;
-import android.os.Process;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import dalvik.system.CloseGuard;
+
 import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
+import android.os.Looper;
+import android.os.MessageQueue;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Sensor manager implementation that communicates with the built-in
  * system sensors.
@@ -35,236 +36,43 @@
  * @hide
  */
 public class SystemSensorManager extends SensorManager {
-    private static final int SENSOR_DISABLE = -1;
-    private static boolean sSensorModuleInitialized = false;
-    private static ArrayList<Sensor> sFullSensorsList = new ArrayList<Sensor>();
-    /* The thread and the sensor list are global to the process
-     * but the actual thread is spawned on demand */
-    private static SensorThread sSensorThread;
-    private static int sQueue;
+    private static native void nativeClassInit();
+    private static native int nativeGetNextSensor(Sensor sensor, int next);
 
-    // Used within this module from outside SensorManager, don't make private
-    static SparseArray<Sensor> sHandleToSensor = new SparseArray<Sensor>();
-    static final ArrayList<ListenerDelegate> sListeners =
-        new ArrayList<ListenerDelegate>();
+    private static boolean sSensorModuleInitialized = false;
+    private static final Object sSensorModuleLock = new Object();
+    private static final ArrayList<Sensor> sFullSensorsList = new ArrayList<Sensor>();
+    private static final SparseArray<Sensor> sHandleToSensor = new SparseArray<Sensor>();
+
+    // Listener list
+    private final ArrayList<SensorEventListenerSensorPair> mListenerDelegates = new ArrayList<SensorEventListenerSensorPair>();
 
     // Common pool of sensor events.
-    static SensorEventPool sPool;
+    private static SensorEventPool sPool;
 
     // Looper associated with the context in which this instance was created.
-    final Looper mMainLooper;
+    private final Looper mMainLooper;
 
-    /*-----------------------------------------------------------------------*/
+    // maps a SensorEventListener to a SensorEventQueue
+    private final Hashtable<SensorEventListener, SensorEventQueue> mSensorEventQueueMap;
 
-    static private class SensorThread {
-
-        Thread mThread;
-        boolean mSensorsReady;
-
-        SensorThread() {
-        }
-
-        @Override
-        protected void finalize() {
-        }
-
-        // must be called with sListeners lock
-        boolean startLocked() {
-            try {
-                if (mThread == null) {
-                    mSensorsReady = false;
-                    SensorThreadRunnable runnable = new SensorThreadRunnable();
-                    Thread thread = new Thread(runnable, SensorThread.class.getName());
-                    thread.start();
-                    synchronized (runnable) {
-                        while (mSensorsReady == false) {
-                            runnable.wait();
-                        }
-                    }
-                    mThread = thread;
-                }
-            } catch (InterruptedException e) {
-            }
-            return mThread == null ? false : true;
-        }
-
-        private class SensorThreadRunnable implements Runnable {
-            SensorThreadRunnable() {
-            }
-
-            private boolean open() {
-                // NOTE: this cannot synchronize on sListeners, since
-                // it's held in the main thread at least until we
-                // return from here.
-                sQueue = sensors_create_queue();
-                return true;
-            }
-
-            public void run() {
-                //Log.d(TAG, "entering main sensor thread");
-                final float[] values = new float[3];
-                final int[] status = new int[1];
-                final long timestamp[] = new long[1];
-                Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_DISPLAY);
-
-                if (!open()) {
-                    return;
-                }
-
-                synchronized (this) {
-                    // we've open the driver, we're ready to open the sensors
-                    mSensorsReady = true;
-                    this.notify();
-                }
-
-                while (true) {
-                    // wait for an event
-                    final int sensor = sensors_data_poll(sQueue, values, status, timestamp);
-
-                    int accuracy = status[0];
-                    synchronized (sListeners) {
-                        if (sensor == -1 || sListeners.isEmpty()) {
-                            // we lost the connection to the event stream. this happens
-                            // when the last listener is removed or if there is an error
-                            if (sensor == -1 && !sListeners.isEmpty()) {
-                                // log a warning in case of abnormal termination
-                                Log.e(TAG, "_sensors_data_poll() failed, we bail out: sensors=" + sensor);
-                            }
-                            // we have no more listeners or polling failed, terminate the thread
-                            sensors_destroy_queue(sQueue);
-                            sQueue = 0;
-                            mThread = null;
-                            break;
-                        }
-                        final Sensor sensorObject = sHandleToSensor.get(sensor);
-                        if (sensorObject != null) {
-                            // report the sensor event to all listeners that
-                            // care about it.
-                            final int size = sListeners.size();
-                            for (int i=0 ; i<size ; i++) {
-                                ListenerDelegate listener = sListeners.get(i);
-                                if (listener.hasSensor(sensorObject)) {
-                                    // this is asynchronous (okay to call
-                                    // with sListeners lock held).
-                                    listener.onSensorChangedLocked(sensorObject,
-                                            values, timestamp, accuracy);
-                                }
-                            }
-                        }
-                    }
-                }
-                //Log.d(TAG, "exiting main sensor thread");
-            }
-        }
-    }
-
-    /*-----------------------------------------------------------------------*/
-
-    private class ListenerDelegate {
-        private final SensorEventListener mSensorEventListener;
-        private final ArrayList<Sensor> mSensorList = new ArrayList<Sensor>();
-        private final Handler mHandler;
-        public SparseBooleanArray mSensors = new SparseBooleanArray();
-        public SparseBooleanArray mFirstEvent = new SparseBooleanArray();
-        public SparseIntArray mSensorAccuracies = new SparseIntArray();
-
-        ListenerDelegate(SensorEventListener listener, Sensor sensor, Handler handler) {
-            mSensorEventListener = listener;
-            Looper looper = (handler != null) ? handler.getLooper() : mMainLooper;
-            // currently we create one Handler instance per listener, but we could
-            // have one per looper (we'd need to pass the ListenerDelegate
-            // instance to handleMessage and keep track of them separately).
-            mHandler = new Handler(looper) {
-                @Override
-                public void handleMessage(Message msg) {
-                    final SensorEvent t = (SensorEvent)msg.obj;
-                    final int handle = t.sensor.getHandle();
-
-                    switch (t.sensor.getType()) {
-                        // Only report accuracy for sensors that support it.
-                        case Sensor.TYPE_MAGNETIC_FIELD:
-                        case Sensor.TYPE_ORIENTATION:
-                            // call onAccuracyChanged() only if the value changes
-                            final int accuracy = mSensorAccuracies.get(handle);
-                            if ((t.accuracy >= 0) && (accuracy != t.accuracy)) {
-                                mSensorAccuracies.put(handle, t.accuracy);
-                                mSensorEventListener.onAccuracyChanged(t.sensor, t.accuracy);
-                            }
-                            break;
-                        default:
-                            // For other sensors, just report the accuracy once
-                            if (mFirstEvent.get(handle) == false) {
-                                mFirstEvent.put(handle, true);
-                                mSensorEventListener.onAccuracyChanged(
-                                        t.sensor, SENSOR_STATUS_ACCURACY_HIGH);
-                            }
-                            break;
-                    }
-
-                    mSensorEventListener.onSensorChanged(t);
-                    sPool.returnToPool(t);
-                }
-            };
-            addSensor(sensor);
-        }
-
-        Object getListener() {
-            return mSensorEventListener;
-        }
-
-        void addSensor(Sensor sensor) {
-            mSensors.put(sensor.getHandle(), true);
-            mSensorList.add(sensor);
-        }
-        int removeSensor(Sensor sensor) {
-            mSensors.delete(sensor.getHandle());
-            mSensorList.remove(sensor);
-            return mSensors.size();
-        }
-        boolean hasSensor(Sensor sensor) {
-            return mSensors.get(sensor.getHandle());
-        }
-        List<Sensor> getSensors() {
-            return mSensorList;
-        }
-
-        void onSensorChangedLocked(Sensor sensor, float[] values, long[] timestamp, int accuracy) {
-            SensorEvent t = sPool.getFromPool();
-            final float[] v = t.values;
-            v[0] = values[0];
-            v[1] = values[1];
-            v[2] = values[2];
-            t.timestamp = timestamp[0];
-            t.accuracy = accuracy;
-            t.sensor = sensor;
-            Message msg = Message.obtain();
-            msg.what = 0;
-            msg.obj = t;
-            msg.setAsynchronous(true);
-            mHandler.sendMessage(msg);
-        }
-    }
-
-    /**
-     * {@hide}
-     */
+    /** {@hide} */
     public SystemSensorManager(Looper mainLooper) {
         mMainLooper = mainLooper;
+        mSensorEventQueueMap = new Hashtable<SensorEventListener, SensorEventQueue>();
 
-        synchronized(sListeners) {
+        synchronized(sSensorModuleLock) {
             if (!sSensorModuleInitialized) {
                 sSensorModuleInitialized = true;
 
                 nativeClassInit();
 
                 // initialize the sensor list
-                sensors_module_init();
                 final ArrayList<Sensor> fullList = sFullSensorsList;
                 int i = 0;
                 do {
                     Sensor sensor = new Sensor();
-                    i = sensors_module_get_next_sensor(sensor, i);
-
+                    i = nativeGetNextSensor(sensor, i);
                     if (i>=0) {
                         //Log.d(TAG, "found sensor: " + sensor.getName() +
                         //        ", handle=" + sensor.getHandle());
@@ -274,126 +82,304 @@
                 } while (i>0);
 
                 sPool = new SensorEventPool( sFullSensorsList.size()*2 );
-                sSensorThread = new SensorThread();
             }
         }
     }
 
+
     /** @hide */
     @Override
     protected List<Sensor> getFullSensorList() {
         return sFullSensorsList;
     }
 
-    private boolean enableSensorLocked(Sensor sensor, int delay) {
-        boolean result = false;
-        for (ListenerDelegate i : sListeners) {
-            if (i.hasSensor(sensor)) {
-                String name = sensor.getName();
-                int handle = sensor.getHandle();
-                result = sensors_enable_sensor(sQueue, name, handle, delay);
-                break;
-            }
-        }
-        return result;
-    }
-
-    private boolean disableSensorLocked(Sensor sensor) {
-        for (ListenerDelegate i : sListeners) {
-            if (i.hasSensor(sensor)) {
-                // not an error, it's just that this sensor is still in use
-                return true;
-            }
-        }
-        String name = sensor.getName();
-        int handle = sensor.getHandle();
-        return sensors_enable_sensor(sQueue, name, handle, SENSOR_DISABLE);
-    }
 
     /** @hide */
     @Override
     protected boolean registerListenerImpl(SensorEventListener listener, Sensor sensor,
-            int delay, Handler handler) {
-        boolean result = true;
-        synchronized (sListeners) {
-            // look for this listener in our list
-            ListenerDelegate l = null;
-            for (ListenerDelegate i : sListeners) {
-                if (i.getListener() == listener) {
-                    l = i;
-                    break;
+            int delay, Handler handler)
+    {
+        // Invariants to preserve:
+        // - one Looper per SensorEventListener
+        // - one Looper per SensorEventQueue
+        // We map SensorEventListeners to a SensorEventQueue, which holds the looper
+
+        if (sensor == null) throw new NullPointerException("sensor cannot be null");
+
+        boolean result;
+        synchronized (mSensorEventQueueMap) {
+            // check if we already have this SensorEventListener, Sensor pair
+            // registered -- if so, we ignore the register. This is not ideal
+            // but this is what the implementation has always been doing.
+            for (SensorEventListenerSensorPair l : mListenerDelegates) {
+                if (l.isSameListenerSensorPair(listener, sensor)) {
+                    // already added, just return silently.
+                    return true;
                 }
             }
 
-            // if we don't find it, add it to the list
-            if (l == null) {
-                l = new ListenerDelegate(listener, sensor, handler);
-                sListeners.add(l);
-                // if the list is not empty, start our main thread
-                if (!sListeners.isEmpty()) {
-                    if (sSensorThread.startLocked()) {
-                        if (!enableSensorLocked(sensor, delay)) {
-                            // oops. there was an error
-                            sListeners.remove(l);
-                            result = false;
-                        }
-                    } else {
-                        // there was an error, remove the listener
-                        sListeners.remove(l);
-                        result = false;
-                    }
-                } else {
-                    // weird, we couldn't add the listener
-                    result = false;
+            // now find the SensorEventQueue associated to this listener
+            SensorEventQueue queue = mSensorEventQueueMap.get(listener);
+            if (queue != null) {
+                result = queue.addSensor(sensor, delay);
+                if (result) {
+                    // create a new ListenerDelegate for this pair
+                    mListenerDelegates.add(new SensorEventListenerSensorPair(listener, sensor));
                 }
-            } else if (!l.hasSensor(sensor)) {
-                l.addSensor(sensor);
-                if (!enableSensorLocked(sensor, delay)) {
-                    // oops. there was an error
-                    l.removeSensor(sensor);
-                    result = false;
+            } else {
+                Looper looper = (handler != null) ? handler.getLooper() : mMainLooper;
+                queue = new SensorEventQueue(listener, looper.getQueue());
+                result = queue.addSensor(sensor, delay);
+                if (result) {
+                    // create a new ListenerDelegate for this pair
+                    mListenerDelegates.add(new SensorEventListenerSensorPair(listener, sensor));
+                    mSensorEventQueueMap.put(listener, queue);
+                } else {
+                    queue.dispose();
                 }
             }
         }
-
         return result;
     }
 
     /** @hide */
     @Override
     protected void unregisterListenerImpl(SensorEventListener listener, Sensor sensor) {
-        synchronized (sListeners) {
-            final int size = sListeners.size();
-            for (int i=0 ; i<size ; i++) {
-                ListenerDelegate l = sListeners.get(i);
-                if (l.getListener() == listener) {
-                    if (sensor == null) {
-                        sListeners.remove(i);
-                        // disable all sensors for this listener
-                        for (Sensor s : l.getSensors()) {
-                            disableSensorLocked(s);
-                        }
-                    // Check if the ListenerDelegate has the sensor it is trying to unregister.
-                    } else if (l.hasSensor(sensor) && l.removeSensor(sensor) == 0) {
-                        // if we have no more sensors enabled on this listener,
-                        // take it off the list.
-                        sListeners.remove(i);
-                        disableSensorLocked(sensor);
-                    }
-                    break;
+        synchronized (mSensorEventQueueMap) {
+
+            // remove this listener/sensor from our list
+            final ArrayList<SensorEventListenerSensorPair> copy =
+                    new ArrayList<SensorEventListenerSensorPair>(mListenerDelegates);
+            int lastIndex = copy.size()-1;
+            for (int i=lastIndex ; i>= 0 ; i--) {
+                if (copy.get(i).isSameListenerSensorPair(listener, sensor)) {
+                    mListenerDelegates.remove(i);
+                }
+            }
+
+            // find the SensorEventQueue associated to this SensorEventListener
+            SensorEventQueue queue = mSensorEventQueueMap.get(listener);
+            if (queue != null) {
+                if (sensor != null) {
+                    queue.removeSensor(sensor);
+                } else {
+                    queue.removeAllSensors();
+                }
+                if (!queue.hasSensors()) {
+                    mSensorEventQueueMap.remove(listener);
+                    queue.dispose();
                 }
             }
         }
     }
 
-    private static native void nativeClassInit();
 
-    private static native int sensors_module_init();
-    private static native int sensors_module_get_next_sensor(Sensor sensor, int next);
+    /*
+     * ListenerDelegate is essentially a SensorEventListener, Sensor pair
+     * and is associated with a single SensorEventQueue.
+     */
+    private static final class SensorEventListenerSensorPair {
+        private final SensorEventListener mSensorEventListener;
+        private final Sensor mSensor;
+        public SensorEventListenerSensorPair(SensorEventListener listener, Sensor sensor) {
+            mSensorEventListener = listener;
+            mSensor = sensor;
+        }
+        public boolean isSameListenerSensorPair(SensorEventListener listener, Sensor sensor) {
+            // if sensor is null, we match only on the listener
+            if (sensor != null) {
+                return (listener == mSensorEventListener) &&
+                        (sensor.getHandle() == mSensor.getHandle());
+            } else {
+                return (listener == mSensorEventListener);
+            }
+        }
+    }
 
-    // Used within this module from outside SensorManager, don't make private
-    static native int sensors_create_queue();
-    static native void sensors_destroy_queue(int queue);
-    static native boolean sensors_enable_sensor(int queue, String name, int sensor, int enable);
-    static native int sensors_data_poll(int queue, float[] values, int[] status, long[] timestamp);
+    /*
+     * SensorEventQueue is the communication channel with the sensor service,
+     * there is a one-to-one mapping between SensorEventQueue and
+     * SensorEventListener.
+     */
+    private static final class SensorEventQueue {
+        private static native int nativeInitSensorEventQueue(SensorEventQueue eventQ, MessageQueue msgQ, float[] scratch);
+        private static native int nativeEnableSensor(int eventQ, int handle, int us);
+        private static native int nativeDisableSensor(int eventQ, int handle);
+        private static native void nativeDestroySensorEventQueue(int eventQ);
+        private int nSensorEventQueue;
+        private final SensorEventListener mListener;
+        private final SparseBooleanArray mActiveSensors = new SparseBooleanArray();
+        private final SparseIntArray mSensorAccuracies = new SparseIntArray();
+        private final SparseBooleanArray mFirstEvent = new SparseBooleanArray();
+        private final CloseGuard mCloseGuard = CloseGuard.get();
+        private final float[] mScratch = new float[16];
+
+        public SensorEventQueue(SensorEventListener listener, MessageQueue msgQ) {
+            nSensorEventQueue = nativeInitSensorEventQueue(this, msgQ, mScratch);
+            mListener = listener;
+            mCloseGuard.open("dispose");
+        }
+        public void dispose() {
+            dispose(false);
+        }
+
+        public boolean addSensor(Sensor sensor, int delay) {
+            if (enableSensor(sensor, delay) == 0) {
+                mActiveSensors.put(sensor.getHandle(), true);
+                return true;
+            }
+            return false;
+        }
+
+        public void removeAllSensors() {
+            for (int i=0 ; i<mActiveSensors.size(); i++) {
+                if (mActiveSensors.valueAt(i) == true) {
+                    int handle = mActiveSensors.keyAt(i);
+                    Sensor sensor = sHandleToSensor.get(handle);
+                    if (sensor != null) {
+                        disableSensor(sensor);
+                        mActiveSensors.put(handle, false);
+                    } else {
+                        // it should never happen -- just ignore.
+                    }
+                }
+            }
+        }
+
+        public void removeSensor(Sensor sensor) {
+            final int handle = sensor.getHandle();
+            if (mActiveSensors.get(handle)) {
+                disableSensor(sensor);
+                mActiveSensors.put(sensor.getHandle(), false);
+            }
+        }
+
+        public boolean hasSensors() {
+            // no more sensors are set
+            return mActiveSensors.indexOfValue(true) >= 0;
+        }
+        
+        @Override
+        protected void finalize() throws Throwable {
+            try {
+                dispose(true);
+            } finally {
+                super.finalize();
+            }
+        }
+
+        private void dispose(boolean finalized) {
+            if (mCloseGuard != null) {
+                if (finalized) {
+                    mCloseGuard.warnIfOpen();
+                }
+                mCloseGuard.close();
+            }
+            if (nSensorEventQueue != 0) {
+                nativeDestroySensorEventQueue(nSensorEventQueue);
+                nSensorEventQueue = 0;
+            }
+        }
+
+        private int enableSensor(Sensor sensor, int us) {
+            if (nSensorEventQueue == 0) throw new NullPointerException();
+            if (sensor == null) throw new NullPointerException();
+            return nativeEnableSensor(nSensorEventQueue, sensor.getHandle(), us);
+        }
+        private int disableSensor(Sensor sensor) {
+            if (nSensorEventQueue == 0) throw new NullPointerException();
+            if (sensor == null) throw new NullPointerException();
+            return nativeDisableSensor(nSensorEventQueue, sensor.getHandle());
+        }
+
+        // Called from native code.
+        @SuppressWarnings("unused")
+        private void dispatchSensorEvent(int handle, float[] values, int inAccuracy, long timestamp) {
+            // this is always called on the same thread.
+            final SensorEvent t = sPool.getFromPool();
+            try {
+                final Sensor sensor = sHandleToSensor.get(handle);
+                final SensorEventListener listener = mListener;
+                // FIXME: handle more than 3 values
+                System.arraycopy(values, 0, t.values, 0, 3);
+                t.timestamp = timestamp;
+                t.accuracy = inAccuracy;
+                t.sensor = sensor;
+                switch (t.sensor.getType()) {
+                    // Only report accuracy for sensors that support it.
+                    case Sensor.TYPE_MAGNETIC_FIELD:
+                    case Sensor.TYPE_ORIENTATION:
+                        // call onAccuracyChanged() only if the value changes
+                        final int accuracy = mSensorAccuracies.get(handle);
+                        if ((t.accuracy >= 0) && (accuracy != t.accuracy)) {
+                            mSensorAccuracies.put(handle, t.accuracy);
+                            listener.onAccuracyChanged(t.sensor, t.accuracy);
+                        }
+                        break;
+                    default:
+                        // For other sensors, just report the accuracy once
+                        if (mFirstEvent.get(handle) == false) {
+                            mFirstEvent.put(handle, true);
+                            listener.onAccuracyChanged(
+                                    t.sensor, SENSOR_STATUS_ACCURACY_HIGH);
+                        }
+                        break;
+                }
+                listener.onSensorChanged(t);
+            } finally {
+                sPool.returnToPool(t);
+            }
+        }
+    }
+
+    /*
+     * A dumb pool of SensorEvent
+     */
+    private static final class SensorEventPool {
+        private final int mPoolSize;
+        private final SensorEvent mPool[];
+        private int mNumItemsInPool;
+
+        private SensorEvent createSensorEvent() {
+            // maximal size for all legacy events is 3
+            return new SensorEvent(3);
+        }
+
+        SensorEventPool(int poolSize) {
+            mPoolSize = poolSize;
+            mNumItemsInPool = poolSize;
+            mPool = new SensorEvent[poolSize];
+        }
+
+        SensorEvent getFromPool() {
+            SensorEvent t = null;
+            synchronized (this) {
+                if (mNumItemsInPool > 0) {
+                    // remove the "top" item from the pool
+                    final int index = mPoolSize - mNumItemsInPool;
+                    t = mPool[index];
+                    mPool[index] = null;
+                    mNumItemsInPool--;
+                }
+            }
+            if (t == null) {
+                // the pool was empty or this item was removed from the pool for
+                // the first time. In any case, we need to create a new item.
+                t = createSensorEvent();
+            }
+            return t;
+        }
+
+        void returnToPool(SensorEvent t) {
+            synchronized (this) {
+                // is there space left in the pool?
+                if (mNumItemsInPool < mPoolSize) {
+                    // if so, return the item to the pool
+                    mNumItemsInPool++;
+                    final int index = mPoolSize - mNumItemsInPool;
+                    mPool[index] = t;
+                }
+            }
+        }
+    }
 }
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 262d87d..761faaf 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -212,8 +212,10 @@
                 } catch (RemoteException ex) {
                     throw new RuntimeException("Could not get input device information.", ex);
                 }
+                if (inputDevice != null) {
+                    mInputDevices.setValueAt(index, inputDevice);
+                }
             }
-            mInputDevices.setValueAt(index, inputDevice);
             return inputDevice;
         }
     }
@@ -241,6 +243,8 @@
                         inputDevice = mIm.getInputDevice(id);
                     } catch (RemoteException ex) {
                         // Ignore the problem for the purposes of this method.
+                    }
+                    if (inputDevice == null) {
                         continue;
                     }
                     mInputDevices.setValueAt(i, inputDevice);
@@ -809,6 +813,22 @@
             }
         }
 
+        /**
+         * @hide
+         */
+        @Override
+        public void vibrate(int owningUid, String owningPackage, long milliseconds) {
+            vibrate(milliseconds);
+        }
+
+        /**
+         * @hide
+         */
+        @Override
+        public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat) {
+            vibrate(pattern, repeat);
+        }
+
         @Override
         public void cancel() {
             try {
diff --git a/core/java/android/hardware/usb/IUsbManager.aidl b/core/java/android/hardware/usb/IUsbManager.aidl
index 8286686..9bc967f 100644
--- a/core/java/android/hardware/usb/IUsbManager.aidl
+++ b/core/java/android/hardware/usb/IUsbManager.aidl
@@ -95,4 +95,7 @@
 
     /* Deny USB debugging from the attached host */
     void denyUsbDebugging();
+
+    /* Clear public keys installed for secure USB debugging */
+    void clearUsbDebuggingKeys();
 }
diff --git a/core/java/android/net/CaptivePortalTracker.java b/core/java/android/net/CaptivePortalTracker.java
index ce71e6b..354a8c4 100644
--- a/core/java/android/net/CaptivePortalTracker.java
+++ b/core/java/android/net/CaptivePortalTracker.java
@@ -370,13 +370,4 @@
         }
         mNotificationShown = visible;
     }
-
-    private static void log(String s) {
-        Log.d(TAG, s);
-    }
-
-    private static void loge(String s) {
-        Log.e(TAG, s);
-    }
-
 }
diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java
index 846443d..c0a894b 100644
--- a/core/java/android/net/SSLCertificateSocketFactory.java
+++ b/core/java/android/net/SSLCertificateSocketFactory.java
@@ -24,6 +24,7 @@
 import java.net.SocketException;
 import java.security.KeyManagementException;
 import java.security.cert.X509Certificate;
+import java.security.interfaces.ECPrivateKey;
 import javax.net.SocketFactory;
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
@@ -88,6 +89,7 @@
     private TrustManager[] mTrustManagers = null;
     private KeyManager[] mKeyManagers = null;
     private byte[] mNpnProtocols = null;
+    private ECPrivateKey mChannelIdPrivateKey = null;
 
     private final int mHandshakeTimeoutMillis;
     private final SSLClientSessionCache mSessionCache;
@@ -319,6 +321,20 @@
     }
 
     /**
+     * Sets the {@link ECPrivateKey} to be used for TLS Channel ID by connections made by this
+     * factory.
+     *
+     * @param privateKey private key (enables TLS Channel ID) or {@code null} for no key (disables
+     *        TLS Channel ID). The private key has to be an Elliptic Curve (EC) key based on the
+     *        NIST P-256 curve (aka SECG secp256r1 or ANSI X9.62 prime256v1).
+     *
+     * @hide
+     */
+    public void setChannelIdPrivateKey(ECPrivateKey privateKey) {
+        mChannelIdPrivateKey = privateKey;
+    }
+
+    /**
      * Enables <a href="http://tools.ietf.org/html/rfc5077#section-3.2">session ticket</a>
      * support on the given socket.
      *
@@ -378,6 +394,7 @@
         OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(k, host, port, close);
         s.setNpnProtocols(mNpnProtocols);
         s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+        s.setChannelIdPrivateKey(mChannelIdPrivateKey);
         if (mSecure) {
             verifyHostname(s, host);
         }
@@ -397,6 +414,7 @@
         OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket();
         s.setNpnProtocols(mNpnProtocols);
         s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+        s.setChannelIdPrivateKey(mChannelIdPrivateKey);
         return s;
     }
 
@@ -414,6 +432,7 @@
                 addr, port, localAddr, localPort);
         s.setNpnProtocols(mNpnProtocols);
         s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+        s.setChannelIdPrivateKey(mChannelIdPrivateKey);
         return s;
     }
 
@@ -429,6 +448,7 @@
         OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(addr, port);
         s.setNpnProtocols(mNpnProtocols);
         s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+        s.setChannelIdPrivateKey(mChannelIdPrivateKey);
         return s;
     }
 
@@ -445,6 +465,7 @@
                 host, port, localAddr, localPort);
         s.setNpnProtocols(mNpnProtocols);
         s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+        s.setChannelIdPrivateKey(mChannelIdPrivateKey);
         if (mSecure) {
             verifyHostname(s, host);
         }
@@ -462,6 +483,7 @@
         OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(host, port);
         s.setNpnProtocols(mNpnProtocols);
         s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+        s.setChannelIdPrivateKey(mChannelIdPrivateKey);
         if (mSecure) {
             verifyHostname(s, host);
         }
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index e437d2e..a014cec 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -315,6 +315,30 @@
         return total;
     }
 
+    /** {@hide} */
+    public static long getMobileTcpRxPackets() {
+        long total = 0;
+        for (String iface : getMobileIfaces()) {
+            final long stat = nativeGetIfaceStat(iface, TYPE_TCP_RX_PACKETS);
+            if (stat != UNSUPPORTED) {
+                total += stat;
+            }
+        }
+        return total;
+    }
+
+    /** {@hide} */
+    public static long getMobileTcpTxPackets() {
+        long total = 0;
+        for (String iface : getMobileIfaces()) {
+            final long stat = nativeGetIfaceStat(iface, TYPE_TCP_TX_PACKETS);
+            if (stat != UNSUPPORTED) {
+                total += stat;
+            }
+        }
+        return total;
+    }
+
     /**
      * Get the total number of packets transmitted through the specified interface.
      *
@@ -587,6 +611,8 @@
     private static final int TYPE_RX_PACKETS = 1;
     private static final int TYPE_TX_BYTES = 2;
     private static final int TYPE_TX_PACKETS = 3;
+    private static final int TYPE_TCP_RX_PACKETS = 4;
+    private static final int TYPE_TCP_TX_PACKETS = 5;
 
     private static native long nativeGetTotalStat(int type);
     private static native long nativeGetIfaceStat(String iface, int type);
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index abbb6a1..499ec77 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -301,6 +301,11 @@
         public abstract int getUserActivityCount(int type, int which);
         
         public static abstract class Sensor {
+            /*
+             * FIXME: it's not correct to use this magic value because it
+             * could clash with a sensor handle (which are defined by
+             * the sensor HAL, and therefore out of our control
+             */
             // Magic sensor number for the GPS.
             public static final int GPS = -10000;
             
diff --git a/core/java/android/os/IVibratorService.aidl b/core/java/android/os/IVibratorService.aidl
index 15cedf9..456ffb1 100644
--- a/core/java/android/os/IVibratorService.aidl
+++ b/core/java/android/os/IVibratorService.aidl
@@ -20,8 +20,8 @@
 interface IVibratorService
 {
     boolean hasVibrator();
-    void vibrate(String packageName, long milliseconds, IBinder token);
-    void vibratePattern(String packageName, in long[] pattern, int repeat, IBinder token);
+    void vibrate(int uid, String packageName, long milliseconds, IBinder token);
+    void vibratePattern(int uid, String packageName, in long[] pattern, int repeat, IBinder token);
     void cancelVibrate(IBinder token);
 }
 
diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java
index 5ad60ec..222578a 100644
--- a/core/java/android/os/MessageQueue.java
+++ b/core/java/android/os/MessageQueue.java
@@ -48,10 +48,10 @@
     // Barriers are indicated by messages with a null target whose arg1 field carries the token.
     private int mNextBarrierToken;
 
-    private native void nativeInit();
-    private native void nativeDestroy();
-    private native void nativePollOnce(int ptr, int timeoutMillis);
-    private native void nativeWake(int ptr);
+    private native static int nativeInit();
+    private native static void nativeDestroy(int ptr);
+    private native static void nativePollOnce(int ptr, int timeoutMillis);
+    private native static void nativeWake(int ptr);
 
     /**
      * Callback interface for discovering when a thread is going to block
@@ -102,18 +102,25 @@
 
     MessageQueue(boolean quitAllowed) {
         mQuitAllowed = quitAllowed;
-        nativeInit();
+        mPtr = nativeInit();
     }
 
     @Override
     protected void finalize() throws Throwable {
         try {
-            nativeDestroy();
+            dispose();
         } finally {
             super.finalize();
         }
     }
 
+    private void dispose() {
+        if (mPtr != 0) {
+            nativeDestroy(mPtr);
+            mPtr = 0;
+        }
+    }
+
     final Message next() {
         int pendingIdleHandlerCount = -1; // -1 only during first iteration
         int nextPollTimeoutMillis = 0;
@@ -126,6 +133,7 @@
 
             synchronized (this) {
                 if (mQuiting) {
+                    dispose();
                     return null;
                 }
 
diff --git a/core/java/android/os/NullVibrator.java b/core/java/android/os/NullVibrator.java
index 8de4e06..ac6027f 100644
--- a/core/java/android/os/NullVibrator.java
+++ b/core/java/android/os/NullVibrator.java
@@ -49,6 +49,22 @@
         }
     }
 
+    /**
+     * @hide
+     */
+    @Override
+    public void vibrate(int owningUid, String owningPackage, long milliseconds) {
+        vibrate(milliseconds);
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat) {
+        vibrate(pattern, repeat);
+    }
+
     @Override
     public void cancel() {
     }
diff --git a/core/java/android/os/SystemVibrator.java b/core/java/android/os/SystemVibrator.java
index 08eba4f..e66fb285 100644
--- a/core/java/android/os/SystemVibrator.java
+++ b/core/java/android/os/SystemVibrator.java
@@ -16,6 +16,7 @@
 
 package android.os;
 
+import android.app.ActivityThread;
 import android.content.Context;
 import android.util.Log;
 
@@ -32,7 +33,7 @@
     private final Binder mToken = new Binder();
 
     public SystemVibrator() {
-        mPackageName = null;
+        mPackageName = ActivityThread.currentPackageName();
         mService = IVibratorService.Stub.asInterface(
                 ServiceManager.getService("vibrator"));
     }
@@ -58,19 +59,35 @@
 
     @Override
     public void vibrate(long milliseconds) {
+        vibrate(Process.myUid(), mPackageName, milliseconds);
+    }
+
+    @Override
+    public void vibrate(long[] pattern, int repeat) {
+        vibrate(Process.myUid(), mPackageName, pattern, repeat);
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void vibrate(int owningUid, String owningPackage, long milliseconds) {
         if (mService == null) {
             Log.w(TAG, "Failed to vibrate; no vibrator service.");
             return;
         }
         try {
-            mService.vibrate(mPackageName, milliseconds, mToken);
+            mService.vibrate(owningUid, owningPackage, milliseconds, mToken);
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to vibrate.", e);
         }
     }
 
+    /**
+     * @hide
+     */
     @Override
-    public void vibrate(long[] pattern, int repeat) {
+    public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat) {
         if (mService == null) {
             Log.w(TAG, "Failed to vibrate; no vibrator service.");
             return;
@@ -80,7 +97,7 @@
         // anyway
         if (repeat < pattern.length) {
             try {
-                mService.vibratePattern(mPackageName, pattern, repeat, mToken);
+                mService.vibratePattern(owningUid, owningPackage, pattern, repeat, mToken);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed to vibrate.", e);
             }
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java
index b67be4b..6650fca 100644
--- a/core/java/android/os/Vibrator.java
+++ b/core/java/android/os/Vibrator.java
@@ -73,6 +73,20 @@
     public abstract void vibrate(long[] pattern, int repeat);
 
     /**
+     * @hide
+     * Like {@link #vibrate(long)}, but allowing the caller to specify that
+     * the vibration is owned by someone else.
+     */
+    public abstract void vibrate(int owningUid, String owningPackage, long milliseconds);
+
+    /**
+     * @hide
+     * Like {@link #vibrate(long[], int)}, but allowing the caller to specify that
+     * the vibration is owned by someone else.
+     */
+    public abstract void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat);
+
+    /**
      * Turn the vibrator off.
      * <p>This method requires the caller to hold the permission
      * {@link android.Manifest.permission#VIBRATE}.
diff --git a/core/java/android/os/WorkSource.java b/core/java/android/os/WorkSource.java
index 69118fe..b79bdee 100644
--- a/core/java/android/os/WorkSource.java
+++ b/core/java/android/os/WorkSource.java
@@ -11,7 +11,7 @@
  */
 public class WorkSource implements Parcelable {
     static final String TAG = "WorkSource";
-    static final boolean DEBUG = true;
+    static final boolean DEBUG = false;
 
     int mNum;
     int[] mUids;
diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java
index 5fdca86..d20c3dc 100644
--- a/core/java/android/provider/CalendarContract.java
+++ b/core/java/android/provider/CalendarContract.java
@@ -1378,6 +1378,8 @@
                 DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, ALL_DAY);
                 DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, ACCESS_LEVEL);
                 DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, AVAILABILITY);
+                DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, EVENT_COLOR);
+                DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, EVENT_COLOR_KEY);
                 DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, HAS_ALARM);
                 DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv,
                         HAS_EXTENDED_PROPERTIES);
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index e2dc5d5..c1af7a5 100644
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -140,7 +140,10 @@
      * Listener that will be called when the TTS service has
      * completed synthesizing an utterance. This is only called if the utterance
      * has an utterance ID (see {@link TextToSpeech.Engine#KEY_PARAM_UTTERANCE_ID}).
+     *
+     * @deprecated Use {@link UtteranceProgressListener} instead.
      */
+    @Deprecated
     public interface OnUtteranceCompletedListener {
         /**
          * Called when an utterance has been synthesized.
@@ -236,19 +239,28 @@
         /**
          * Indicates erroneous data when checking the installation status of the resources used by
          * the TextToSpeech engine with the {@link #ACTION_CHECK_TTS_DATA} intent.
+         *
+         * @deprecated Use CHECK_VOICE_DATA_FAIL instead.
          */
+        @Deprecated
         public static final int CHECK_VOICE_DATA_BAD_DATA = -1;
 
         /**
          * Indicates missing resources when checking the installation status of the resources used
          * by the TextToSpeech engine with the {@link #ACTION_CHECK_TTS_DATA} intent.
+         *
+         * @deprecated Use CHECK_VOICE_DATA_FAIL instead.
          */
+        @Deprecated
         public static final int CHECK_VOICE_DATA_MISSING_DATA = -2;
 
         /**
          * Indicates missing storage volume when checking the installation status of the resources
          * used by the TextToSpeech engine with the {@link #ACTION_CHECK_TTS_DATA} intent.
+         *
+         * @deprecated Use CHECK_VOICE_DATA_FAIL instead.
          */
+        @Deprecated
         public static final int CHECK_VOICE_DATA_MISSING_VOLUME = -3;
 
         /**
@@ -284,9 +296,8 @@
                 "android.speech.tts.engine.INSTALL_TTS_DATA";
 
         /**
-         * Broadcast Action: broadcast to signal the completion of the installation of
-         * the data files used by the synthesis engine. Success or failure is indicated in the
-         * {@link #EXTRA_TTS_DATA_INSTALLED} extra.
+         * Broadcast Action: broadcast to signal the change in the list of available
+         * languages or/and their features.
          */
         @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
         public static final String ACTION_TTS_DATA_INSTALLED =
@@ -299,20 +310,16 @@
          * return one of the following codes:
          * {@link #CHECK_VOICE_DATA_PASS},
          * {@link #CHECK_VOICE_DATA_FAIL},
-         * {@link #CHECK_VOICE_DATA_BAD_DATA},
-         * {@link #CHECK_VOICE_DATA_MISSING_DATA}, or
-         * {@link #CHECK_VOICE_DATA_MISSING_VOLUME}.
          * <p> Moreover, the data received in the activity result will contain the following
          * fields:
          * <ul>
-         *   <li>{@link #EXTRA_VOICE_DATA_ROOT_DIRECTORY} which
-         *       indicates the path to the location of the resource files,</li>
-         *   <li>{@link #EXTRA_VOICE_DATA_FILES} which contains
-         *       the list of all the resource files,</li>
-         *   <li>and {@link #EXTRA_VOICE_DATA_FILES_INFO} which
-         *       contains, for each resource file, the description of the language covered by
-         *       the file in the xxx-YYY format, where xxx is the 3-letter ISO language code,
-         *       and YYY is the 3-letter ISO country code.</li>
+         *   <li>{@link #EXTRA_AVAILABLE_VOICES} which contains an ArrayList<String> of all the
+         *   available voices. The format of each voice is: lang-COUNTRY-variant where COUNTRY and
+         *   variant are optional (ie, "eng" or "eng-USA" or "eng-USA-FEMALE").</li>
+         *   <li>{@link #EXTRA_UNAVAILABLE_VOICES} which contains an ArrayList<String> of all the
+         *   unavailable voices (ones that user can install). The format of each voice is:
+         *   lang-COUNTRY-variant where COUNTRY and variant are optional (ie, "eng" or
+         *   "eng-USA" or "eng-USA-FEMALE").</li>
          * </ul>
          */
         @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
@@ -320,37 +327,33 @@
                 "android.speech.tts.engine.CHECK_TTS_DATA";
 
         /**
-         * Activity intent for getting some sample text to use for demonstrating TTS.
+         * Activity intent for getting some sample text to use for demonstrating TTS. Specific
+         * locale have to be requested by passing following extra parameters:
+         * <ul>
+         *   <li>language</li>
+         *   <li>country</li>
+         *   <li>variant</li>
+         * </ul>
          *
-         * @hide This intent was used by engines written against the old API.
-         * Not sure if it should be exposed.
+         * Upon completion, the activity result may contain the following fields:
+         * <ul>
+         *   <li>{@link #EXTRA_SAMPLE_TEXT} which contains an String with sample text.</li>
+         * </ul>
          */
         @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
         public static final String ACTION_GET_SAMPLE_TEXT =
                 "android.speech.tts.engine.GET_SAMPLE_TEXT";
 
+        /**
+         * Extra information received with the {@link #ACTION_GET_SAMPLE_TEXT} intent result where
+         * the TextToSpeech engine returns an String with sample text for requested voice
+         */
+        public static final String EXTRA_SAMPLE_TEXT = "sampleText";
+
+
         // extras for a TTS engine's check data activity
         /**
-         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent where
-         * the TextToSpeech engine specifies the path to its resources.
-         */
-        public static final String EXTRA_VOICE_DATA_ROOT_DIRECTORY = "dataRoot";
-
-        /**
-         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent where
-         * the TextToSpeech engine specifies the file names of its resources under the
-         * resource path.
-         */
-        public static final String EXTRA_VOICE_DATA_FILES = "dataFiles";
-
-        /**
-         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent where
-         * the TextToSpeech engine specifies the locale associated with each resource file.
-         */
-        public static final String EXTRA_VOICE_DATA_FILES_INFO = "dataFilesInfo";
-
-        /**
-         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent where
+         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent result where
          * the TextToSpeech engine returns an ArrayList<String> of all the available voices.
          * The format of each voice is: lang-COUNTRY-variant where COUNTRY and variant are
          * optional (ie, "eng" or "eng-USA" or "eng-USA-FEMALE").
@@ -358,7 +361,7 @@
         public static final String EXTRA_AVAILABLE_VOICES = "availableVoices";
 
         /**
-         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent where
+         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent result where
          * the TextToSpeech engine returns an ArrayList<String> of all the unavailable voices.
          * The format of each voice is: lang-COUNTRY-variant where COUNTRY and variant are
          * optional (ie, "eng" or "eng-USA" or "eng-USA-FEMALE").
@@ -366,22 +369,63 @@
         public static final String EXTRA_UNAVAILABLE_VOICES = "unavailableVoices";
 
         /**
+         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent result where
+         * the TextToSpeech engine specifies the path to its resources.
+         *
+         * It may be used by language packages to find out where to put their data.
+         *
+         * @deprecated TTS engine implementation detail, this information has no use for
+         * text-to-speech API client.
+         */
+        @Deprecated
+        public static final String EXTRA_VOICE_DATA_ROOT_DIRECTORY = "dataRoot";
+
+        /**
+         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent result where
+         * the TextToSpeech engine specifies the file names of its resources under the
+         * resource path.
+         *
+         * @deprecated TTS engine implementation detail, this information has no use for
+         * text-to-speech API client.
+         */
+        @Deprecated
+        public static final String EXTRA_VOICE_DATA_FILES = "dataFiles";
+
+        /**
+         * Extra information received with the {@link #ACTION_CHECK_TTS_DATA} intent result where
+         * the TextToSpeech engine specifies the locale associated with each resource file.
+         *
+         * @deprecated TTS engine implementation detail, this information has no use for
+         * text-to-speech API client.
+         */
+        @Deprecated
+        public static final String EXTRA_VOICE_DATA_FILES_INFO = "dataFilesInfo";
+
+        /**
          * Extra information sent with the {@link #ACTION_CHECK_TTS_DATA} intent where the
          * caller indicates to the TextToSpeech engine which specific sets of voice data to
          * check for by sending an ArrayList<String> of the voices that are of interest.
          * The format of each voice is: lang-COUNTRY-variant where COUNTRY and variant are
          * optional (ie, "eng" or "eng-USA" or "eng-USA-FEMALE").
+         *
+         * @deprecated Redundant functionality, checking for existence of specific sets of voice
+         * data can be done on client side.
          */
+        @Deprecated
         public static final String EXTRA_CHECK_VOICE_DATA_FOR = "checkVoiceDataFor";
 
         // extras for a TTS engine's data installation
         /**
-         * Extra information received with the {@link #ACTION_TTS_DATA_INSTALLED} intent.
+         * Extra information received with the {@link #ACTION_TTS_DATA_INSTALLED} intent result.
          * It indicates whether the data files for the synthesis engine were successfully
          * installed. The installation was initiated with the  {@link #ACTION_INSTALL_TTS_DATA}
          * intent. The possible values for this extra are
          * {@link TextToSpeech#SUCCESS} and {@link TextToSpeech#ERROR}.
+         *
+         * @deprecated No longer in use. If client ise interested in information about what
+         * changed, is should send ACTION_CHECK_TTS_DATA intent to discover available voices.
          */
+        @Deprecated
         public static final String EXTRA_TTS_DATA_INSTALLED = "dataInstalled";
 
         // keys for the parameters passed with speak commands. Hidden keys are used internally
@@ -474,6 +518,10 @@
          * for a description of how feature keys work. If set and supported by the engine
          * as per {@link TextToSpeech#getFeatures(Locale)}, the engine must synthesize
          * text on-device (without making network requests).
+         *
+         * @see TextToSpeech#speak(String, int, java.util.HashMap)
+         * @see TextToSpeech#synthesizeToFile(String, java.util.HashMap, String)
+         * @see TextToSpeech#getFeatures(java.util.Locale)
          */
         public static final String KEY_FEATURE_EMBEDDED_SYNTHESIS = "embeddedTts";
     }
@@ -1475,8 +1523,8 @@
                         Log.w(TAG, method + " failed: not connected to TTS engine");
                         return errorResult;
                     }
-                    if (onlyEstablishedConnection && isEstablished()) {
-                        Log.w(TAG, method + " failed: TTS engine connection not fully setuped");
+                    if (onlyEstablishedConnection && !isEstablished()) {
+                        Log.w(TAG, method + " failed: TTS engine connection not fully set up");
                         return errorResult;
                     }
                     return action.run(mService);
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index ba82d79..81c25d8 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -16,8 +16,8 @@
 
 package android.view;
 
-import static android.view.accessibility.AccessibilityNodeInfo.INCLUDE_NOT_IMPORTANT_VIEWS;
-
+import android.app.ActivityThread;
+import android.content.Context;
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.os.Bundle;
@@ -34,6 +34,7 @@
 import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
 
 import com.android.internal.os.SomeArgs;
+import com.android.internal.util.Predicate;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -49,7 +50,7 @@
  */
 final class AccessibilityInteractionController {
 
-    private ArrayList<AccessibilityNodeInfo> mTempAccessibilityNodeInfoList =
+    private final ArrayList<AccessibilityNodeInfo> mTempAccessibilityNodeInfoList =
         new ArrayList<AccessibilityNodeInfo>();
 
     private final Handler mHandler;
@@ -69,6 +70,8 @@
     private final Rect mTempRect1 = new Rect();
     private final Rect mTempRect2 = new Rect();
 
+    private AddNodeInfosForViewId mAddNodeInfosForViewId;
+
     public AccessibilityInteractionController(ViewRootImpl viewRootImpl) {
         Looper looper =  viewRootImpl.mHandler.getLooper();
         mMyLooperThreadId = looper.getThread().getId();
@@ -135,8 +138,7 @@
             if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
                 return;
             }
-            mViewRootImpl.mAttachInfo.mIncludeNotImportantViews =
-                (flags & INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
+            mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
             if (accessibilityViewId == AccessibilityNodeInfo.UNDEFINED) {
                 root = mViewRootImpl.mView;
@@ -148,7 +150,7 @@
             }
         } finally {
             try {
-                mViewRootImpl.mAttachInfo.mIncludeNotImportantViews = false;
+                mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
                 applyAppScaleAndMagnificationSpecIfNeeded(infos, spec);
                 if (spec != null) {
                     spec.recycle();
@@ -161,19 +163,19 @@
         }
     }
 
-    public void findAccessibilityNodeInfoByViewIdClientThread(long accessibilityNodeId,
-            int viewId, int interactionId, IAccessibilityInteractionConnectionCallback callback,
+    public void findAccessibilityNodeInfosByViewIdClientThread(long accessibilityNodeId,
+            String viewId, int interactionId, IAccessibilityInteractionConnectionCallback callback,
             int flags, int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
         Message message = mHandler.obtainMessage();
-        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID;
+        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFOS_BY_VIEW_ID;
         message.arg1 = flags;
         message.arg2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
 
         SomeArgs args = SomeArgs.obtain();
-        args.argi1 = viewId;
-        args.argi2 = interactionId;
+        args.argi1 = interactionId;
         args.arg1 = callback;
         args.arg2 = spec;
+        args.arg3 = viewId;
 
         message.obj = args;
 
@@ -189,26 +191,26 @@
         }
     }
 
-    private void findAccessibilityNodeInfoByViewIdUiThread(Message message) {
+    private void findAccessibilityNodeInfosByViewIdUiThread(Message message) {
         final int flags = message.arg1;
         final int accessibilityViewId = message.arg2;
 
         SomeArgs args = (SomeArgs) message.obj;
-        final int viewId = args.argi1;
-        final int interactionId = args.argi2;
+        final int interactionId = args.argi1;
         final IAccessibilityInteractionConnectionCallback callback =
             (IAccessibilityInteractionConnectionCallback) args.arg1;
         final MagnificationSpec spec = (MagnificationSpec) args.arg2;
+        final String viewId = (String) args.arg3;
 
         args.recycle();
 
-        AccessibilityNodeInfo info = null;
+        final List<AccessibilityNodeInfo> infos = mTempAccessibilityNodeInfoList;
+        infos.clear();
         try {
             if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
                 return;
             }
-            mViewRootImpl.mAttachInfo.mIncludeNotImportantViews =
-                (flags & INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
+            mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
             if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
                 root = findViewByAccessibilityId(accessibilityViewId);
@@ -216,19 +218,31 @@
                 root = mViewRootImpl.mView;
             }
             if (root != null) {
-                View target = root.findViewById(viewId);
-                if (target != null && isShown(target)) {
-                    info = target.createAccessibilityNodeInfo();
+                int resolvedViewId = root.getContext().getResources().getIdentifier(
+                        viewId, "id", root.getContext().getPackageName());
+                if (resolvedViewId <= 0) {
+                    resolvedViewId = ((Context) ActivityThread.currentActivityThread()
+                            .getSystemContext()).getResources()
+                            .getIdentifier(viewId, "id", "android");
                 }
+                if (resolvedViewId <= 0) {
+                    return;
+                }
+                if (mAddNodeInfosForViewId == null) {
+                    mAddNodeInfosForViewId = new AddNodeInfosForViewId();
+                }
+                mAddNodeInfosForViewId.init(resolvedViewId, infos);
+                root.findViewByPredicate(mAddNodeInfosForViewId);
+                mAddNodeInfosForViewId.reset();
             }
         } finally {
             try {
-                mViewRootImpl.mAttachInfo.mIncludeNotImportantViews = false;
-                applyAppScaleAndMagnificationSpecIfNeeded(info, spec);
+                mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
+                applyAppScaleAndMagnificationSpecIfNeeded(infos, spec);
                 if (spec != null) {
                     spec.recycle();
                 }
-                callback.setFindAccessibilityNodeInfoResult(info, interactionId);
+                callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
             } catch (RemoteException re) {
                 /* ignore - the other side will time out */
             }
@@ -281,8 +295,7 @@
             if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
                 return;
             }
-            mViewRootImpl.mAttachInfo.mIncludeNotImportantViews =
-                (flags & INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
+            mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
             if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
                 root = findViewByAccessibilityId(accessibilityViewId);
@@ -325,7 +338,7 @@
             }
         } finally {
             try {
-                mViewRootImpl.mAttachInfo.mIncludeNotImportantViews = false;
+                mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
                 applyAppScaleAndMagnificationSpecIfNeeded(infos, spec);
                 if (spec != null) {
                     spec.recycle();
@@ -384,8 +397,7 @@
             if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
                 return;
             }
-            mViewRootImpl.mAttachInfo.mIncludeNotImportantViews =
-                (flags & INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
+            mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
             if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
                 root = findViewByAccessibilityId(accessibilityViewId);
@@ -426,7 +438,7 @@
             }
         } finally {
             try {
-                mViewRootImpl.mAttachInfo.mIncludeNotImportantViews = false;
+                mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
                 applyAppScaleAndMagnificationSpecIfNeeded(focused, spec);
                 if (spec != null) {
                     spec.recycle();
@@ -484,8 +496,7 @@
             if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
                 return;
             }
-            mViewRootImpl.mAttachInfo.mIncludeNotImportantViews =
-                (flags & INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
+            mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
             if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
                 root = findViewByAccessibilityId(accessibilityViewId);
@@ -500,7 +511,7 @@
             }
         } finally {
             try {
-                mViewRootImpl.mAttachInfo.mIncludeNotImportantViews = false;
+                mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
                 applyAppScaleAndMagnificationSpecIfNeeded(next, spec);
                 if (spec != null) {
                     spec.recycle();
@@ -561,8 +572,7 @@
             if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
                 return;
             }
-            mViewRootImpl.mAttachInfo.mIncludeNotImportantViews =
-                (flags & INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
+            mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View target = null;
             if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
                 target = findViewByAccessibilityId(accessibilityViewId);
@@ -580,7 +590,7 @@
             }
         } finally {
             try {
-                mViewRootImpl.mAttachInfo.mIncludeNotImportantViews = false;
+                mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
                 callback.setPerformAccessibilityActionResult(succeeded, interactionId);
             } catch (RemoteException re) {
                 /* ignore - the other side will time out */
@@ -690,20 +700,20 @@
 
         private final ArrayList<View> mTempViewList = new ArrayList<View>();
 
-        public void prefetchAccessibilityNodeInfos(View view, int virtualViewId, int prefetchFlags,
+        public void prefetchAccessibilityNodeInfos(View view, int virtualViewId, int fetchFlags,
                 List<AccessibilityNodeInfo> outInfos) {
             AccessibilityNodeProvider provider = view.getAccessibilityNodeProvider();
             if (provider == null) {
                 AccessibilityNodeInfo root = view.createAccessibilityNodeInfo();
                 if (root != null) {
                     outInfos.add(root);
-                    if ((prefetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_PREDECESSORS) != 0) {
+                    if ((fetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_PREDECESSORS) != 0) {
                         prefetchPredecessorsOfRealNode(view, outInfos);
                     }
-                    if ((prefetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_SIBLINGS) != 0) {
+                    if ((fetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_SIBLINGS) != 0) {
                         prefetchSiblingsOfRealNode(view, outInfos);
                     }
-                    if ((prefetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS) != 0) {
+                    if ((fetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS) != 0) {
                         prefetchDescendantsOfRealNode(view, outInfos);
                     }
                 }
@@ -711,13 +721,13 @@
                 AccessibilityNodeInfo root = provider.createAccessibilityNodeInfo(virtualViewId);
                 if (root != null) {
                     outInfos.add(root);
-                    if ((prefetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_PREDECESSORS) != 0) {
+                    if ((fetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_PREDECESSORS) != 0) {
                         prefetchPredecessorsOfVirtualNode(root, view, provider, outInfos);
                     }
-                    if ((prefetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_SIBLINGS) != 0) {
+                    if ((fetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_SIBLINGS) != 0) {
                         prefetchSiblingsOfVirtualNode(root, view, provider, outInfos);
                     }
-                    if ((prefetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS) != 0) {
+                    if ((fetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS) != 0) {
                         prefetchDescendantsOfVirtualNode(root, provider, outInfos);
                     }
                 }
@@ -920,7 +930,7 @@
     private class PrivateHandler extends Handler {
         private final static int MSG_PERFORM_ACCESSIBILITY_ACTION = 1;
         private final static int MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_ACCESSIBILITY_ID = 2;
-        private final static int MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID = 3;
+        private final static int MSG_FIND_ACCESSIBLITY_NODE_INFOS_BY_VIEW_ID = 3;
         private final static int MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT = 4;
         private final static int MSG_FIND_FOCUS = 5;
         private final static int MSG_FOCUS_SEARCH = 6;
@@ -937,8 +947,8 @@
                     return "MSG_PERFORM_ACCESSIBILITY_ACTION";
                 case MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_ACCESSIBILITY_ID:
                     return "MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_ACCESSIBILITY_ID";
-                case MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID:
-                    return "MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID";
+                case MSG_FIND_ACCESSIBLITY_NODE_INFOS_BY_VIEW_ID:
+                    return "MSG_FIND_ACCESSIBLITY_NODE_INFOS_BY_VIEW_ID";
                 case MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT:
                     return "MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT";
                 case MSG_FIND_FOCUS:
@@ -960,8 +970,8 @@
                 case MSG_PERFORM_ACCESSIBILITY_ACTION: {
                     perfromAccessibilityActionUiThread(message);
                 } break;
-                case MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID: {
-                    findAccessibilityNodeInfoByViewIdUiThread(message);
+                case MSG_FIND_ACCESSIBLITY_NODE_INFOS_BY_VIEW_ID: {
+                    findAccessibilityNodeInfosByViewIdUiThread(message);
                 } break;
                 case MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT: {
                     findAccessibilityNodeInfosByTextUiThread(message);
@@ -977,4 +987,27 @@
             }
         }
     }
+
+    private final class AddNodeInfosForViewId implements Predicate<View> {
+        private int mViewId = View.NO_ID;
+        private List<AccessibilityNodeInfo> mInfos;
+
+        public void init(int viewId, List<AccessibilityNodeInfo> infos) {
+            mViewId = viewId;
+            mInfos = infos;
+        }
+
+        public void reset() {
+            mViewId = View.NO_ID;
+            mInfos = null;
+        }
+
+        @Override
+        public boolean apply(View view) {
+            if (view.getId() == mViewId && isShown(view)) {
+                mInfos.add(view.createAccessibilityNodeInfo());
+            }
+            return false;
+        }
+    }
 }
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index e0cf3b2..80c9324 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -144,6 +144,14 @@
         }
     }
 
+    @Override
+    public void setName(String name) {
+        super.setName(name);
+        nSetName(mRenderer, name);
+    }
+
+    private static native void nSetName(int renderer, String name);
+
     ///////////////////////////////////////////////////////////////////////////
     // Hardware layers
     ///////////////////////////////////////////////////////////////////////////
@@ -507,22 +515,22 @@
 
     @Override
     public boolean quickReject(float left, float top, float right, float bottom, EdgeType type) {
-        return nQuickReject(mRenderer, left, top, right, bottom, type.nativeInt);
+        return nQuickReject(mRenderer, left, top, right, bottom);
     }
     
     private static native boolean nQuickReject(int renderer, float left, float top,
-            float right, float bottom, int edge);
+            float right, float bottom);
 
     @Override
     public boolean quickReject(Path path, EdgeType type) {
         path.computeBounds(mPathBounds, true);
         return nQuickReject(mRenderer, mPathBounds.left, mPathBounds.top,
-                mPathBounds.right, mPathBounds.bottom, type.nativeInt);
+                mPathBounds.right, mPathBounds.bottom);
     }
 
     @Override
     public boolean quickReject(RectF rect, EdgeType type) {
-        return nQuickReject(mRenderer, rect.left, rect.top, rect.right, rect.bottom, type.nativeInt);
+        return nQuickReject(mRenderer, rect.left, rect.top, rect.right, rect.bottom);
     }
 
     ///////////////////////////////////////////////////////////////////////////
diff --git a/core/java/android/view/GLES20RecordingCanvas.java b/core/java/android/view/GLES20RecordingCanvas.java
index 168ae81..7da2451 100644
--- a/core/java/android/view/GLES20RecordingCanvas.java
+++ b/core/java/android/view/GLES20RecordingCanvas.java
@@ -43,7 +43,7 @@
     private GLES20DisplayList mDisplayList;
 
     private GLES20RecordingCanvas() {
-        super(true /*record*/, true /*translucent*/);
+        super(true, true);
     }
 
     static GLES20RecordingCanvas obtain(GLES20DisplayList displayList) {
diff --git a/core/java/android/view/HardwareCanvas.java b/core/java/android/view/HardwareCanvas.java
index eeae3ed..3d19260 100644
--- a/core/java/android/view/HardwareCanvas.java
+++ b/core/java/android/view/HardwareCanvas.java
@@ -27,6 +27,8 @@
  * @hide 
  */
 public abstract class HardwareCanvas extends Canvas {
+    private String mName;
+
     @Override
     public boolean isHardwareAccelerated() {
         return true;
@@ -36,7 +38,30 @@
     public void setBitmap(Bitmap bitmap) {
         throw new UnsupportedOperationException();
     }
-    
+
+    /**
+     * Specifies the name of this canvas. Naming the canvas is entirely
+     * optional but can be useful for debugging purposes.
+     *
+     * @param name The name of the canvas, can be null
+     *
+     * @see #getName()
+     */
+    public void setName(String name) {
+        mName = name;
+    }
+
+    /**
+     * Returns the name of this canvas.
+     *
+     * @return The name of the canvas or null
+     *
+     * @see #setName(String)
+     */
+    public String getName() {
+        return mName;
+    }
+
     /**
      * Invoked before any drawing operation is performed in this canvas.
      * 
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 2b4260d..e0d48a4 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -543,6 +543,13 @@
     }
 
     /**
+     * Optional, sets the name of the renderer. Useful for debugging purposes.
+     *
+     * @param name The name of this renderer, can be null
+     */
+    abstract void setName(String name);
+
+    /**
      * Creates a hardware renderer using OpenGL.
      * 
      * @param glVersion The version of OpenGL to use (1 for OpenGL 1, 11 for OpenGL 1.1, etc.)
@@ -756,6 +763,8 @@
         GL mGl;
         HardwareCanvas mCanvas;
 
+        String mName;
+
         long mFrameCount;
         Paint mDebugPaint;
 
@@ -963,6 +972,7 @@
                     } else {
                         if (mCanvas == null) {
                             mCanvas = createCanvas();
+                            mCanvas.setName(mName);
                         }
                         if (mCanvas != null) {
                             setEnabled(true);
@@ -1277,6 +1287,11 @@
             return mCanvas;
         }
 
+        @Override
+        void setName(String name) {
+            mName = name;
+        }
+
         boolean canDraw() {
             return mGl != null && mCanvas != null;
         }        
@@ -1868,7 +1883,7 @@
                 mDebugDataProvider.setupGraphPaint(mProfilePaint, i);
                 switch (graphType) {
                     case GraphDataProvider.GRAPH_TYPE_BARS:
-                        mGlCanvas.drawRects(mProfileShapes[i], count, mProfilePaint);
+                        mGlCanvas.drawRects(mProfileShapes[i], count * 4, mProfilePaint);
                         break;
                     case GraphDataProvider.GRAPH_TYPE_LINES:
                         mGlCanvas.drawLines(mProfileShapes[i], 0, count * 4, mProfilePaint);
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 1ee2bb3..a9ad97f 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -190,6 +190,13 @@
     void thawRotation();
 
     /**
+     * Gets whether the rotation is frozen. 
+     *
+     * @return Whether the rotation is frozen.
+     */
+    boolean isRotationFrozen();
+
+    /**
      * Create a screenshot of the applications currently displayed.
      */
     Bitmap screenshotApplications(IBinder appToken, int displayId, int maxWidth, int maxHeight);
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index c2a3e58..bb533bf 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -302,27 +302,27 @@
     public static final int KEYCODE_SWITCH_CHARSET  = 95;   // switch char-sets (Kanji,Katakana)
     /** Key code constant: A Button key.
      * On a game controller, the A button should be either the button labeled A
-     * or the first button on the upper row of controller buttons. */
+     * or the first button on the bottom row of controller buttons. */
     public static final int KEYCODE_BUTTON_A        = 96;
     /** Key code constant: B Button key.
      * On a game controller, the B button should be either the button labeled B
-     * or the second button on the upper row of controller buttons. */
+     * or the second button on the bottom row of controller buttons. */
     public static final int KEYCODE_BUTTON_B        = 97;
     /** Key code constant: C Button key.
      * On a game controller, the C button should be either the button labeled C
-     * or the third button on the upper row of controller buttons. */
+     * or the third button on the bottom row of controller buttons. */
     public static final int KEYCODE_BUTTON_C        = 98;
     /** Key code constant: X Button key.
      * On a game controller, the X button should be either the button labeled X
-     * or the first button on the lower row of controller buttons. */
+     * or the first button on the upper row of controller buttons. */
     public static final int KEYCODE_BUTTON_X        = 99;
     /** Key code constant: Y Button key.
      * On a game controller, the Y button should be either the button labeled Y
-     * or the second button on the lower row of controller buttons. */
+     * or the second button on the upper row of controller buttons. */
     public static final int KEYCODE_BUTTON_Y        = 100;
     /** Key code constant: Z Button key.
      * On a game controller, the Z button should be either the button labeled Z
-     * or the third button on the lower row of controller buttons. */
+     * or the third button on the upper row of controller buttons. */
     public static final int KEYCODE_BUTTON_Z        = 101;
     /** Key code constant: L1 Button key.
      * On a game controller, the L1 button should be either the button labeled L1 (or L)
@@ -623,8 +623,14 @@
     /** Key code constant: Assist key.
      * Launches the global assist activity.  Not delivered to applications. */
     public static final int KEYCODE_ASSIST          = 219;
+    /** Key code constant: Brightness Down key.
+     * Adjusts the screen brightness down. */
+    public static final int KEYCODE_BRIGHTNESS_DOWN = 220;
+    /** Key code constant: Brightness Up key.
+     * Adjusts the screen brightness up. */
+    public static final int KEYCODE_BRIGHTNESS_UP   = 221;
 
-    private static final int LAST_KEYCODE           = KEYCODE_ASSIST;
+    private static final int LAST_KEYCODE           = KEYCODE_BRIGHTNESS_UP;
 
     // NOTE: If you add a new keycode here you must also add it to:
     //  isSystem()
@@ -866,6 +872,8 @@
         names.append(KEYCODE_RO, "KEYCODE_RO");
         names.append(KEYCODE_KANA, "KEYCODE_KANA");
         names.append(KEYCODE_ASSIST, "KEYCODE_ASSIST");
+        names.append(KEYCODE_BRIGHTNESS_DOWN, "KEYCODE_BRIGHTNESS_DOWN");
+        names.append(KEYCODE_BRIGHTNESS_UP, "KEYCODE_BRIGHTNESS_UP");
     };
 
     // Symbolic names of all metakeys in bit order from least significant to most significant.
diff --git a/core/java/android/view/SimulatedDpad.java b/core/java/android/view/SimulatedDpad.java
index 0a37fdd..883fd49 100644
--- a/core/java/android/view/SimulatedDpad.java
+++ b/core/java/android/view/SimulatedDpad.java
@@ -145,6 +145,10 @@
         if (!synthesizeNewKeys) {
             mHandler.removeMessages(MSG_FLICK);
         }
+        InputDevice device = event.getDevice();
+        if (device == null) {
+            return;
+        }
         // Store what time the touchpad event occurred
         final long time = SystemClock.uptimeMillis();
         switch (event.getAction()) {
@@ -157,7 +161,7 @@
                 mAccumulatedY = 0;
                 mLastMoveX = 0;
                 mLastMoveY = 0;
-                if (event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax()
+                if (device.getMotionRange(MotionEvent.AXIS_Y).getMax()
                         * EDGE_SWIPE_THRESHOLD < event.getY()) {
                     // Did the swipe begin in a valid region
                     mEdgeSwipePossible = true;
@@ -176,13 +180,13 @@
                 }
                 // Checks if the swipe has crossed the midpoint
                 // and if our swipe gesture is complete
-                if (event.getY() < (event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax()
+                if (event.getY() < (device.getMotionRange(MotionEvent.AXIS_Y).getMax()
                         * .5) && mEdgeSwipePossible) {
                     mEdgeSwipePossible = false;
 
                     Intent intent =
                             ((SearchManager)mContext.getSystemService(Context.SEARCH_SERVICE))
-                            .getAssistIntent(mContext, UserHandle.USER_CURRENT_OR_SELF);
+                            .getAssistIntent(mContext, false, UserHandle.USER_CURRENT_OR_SELF);
                     if (intent != null) {
                         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                         try {
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index a972b75..c10f287 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -215,7 +215,6 @@
     private int mNativeSurfaceControl; // SurfaceControl*
     private int mGenerationId; // incremented each time mNativeSurface changes
     private final Canvas mCanvas = new CompatibleCanvas();
-    private int mCanvasSaveCount; // Canvas save count at time of lockCanvas()
 
     // The Translator for density compatibility mode.  This is used for scaling
     // the canvas to perform the appropriate density transformation.
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index a4e4f37..a1305e4 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import android.app.ActivityThread;
 import android.content.ClipData;
 import android.content.Context;
 import android.content.res.Configuration;
@@ -1561,9 +1562,6 @@
      */
     int mAccessibilityViewId = NO_ID;
 
-    /**
-     * @hide
-     */
     private int mAccessibilityCursorPosition = ACCESSIBILITY_CURSOR_POSITION_UNDEFINED;
 
     /**
@@ -2515,8 +2513,10 @@
 
     /**
      * The undefined cursor position.
+     *
+     * @hide
      */
-    private static final int ACCESSIBILITY_CURSOR_POSITION_UNDEFINED = -1;
+    public static final int ACCESSIBILITY_CURSOR_POSITION_UNDEFINED = -1;
 
     /**
      * Indicates that the screen has changed state and is now off.
@@ -4859,13 +4859,25 @@
         event.setEnabled(isEnabled());
         event.setContentDescription(mContentDescription);
 
-        if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED && mAttachInfo != null) {
-            ArrayList<View> focusablesTempList = mAttachInfo.mTempArrayList;
-            getRootView().addFocusables(focusablesTempList, View.FOCUS_FORWARD,
-                    FOCUSABLES_ALL);
-            event.setItemCount(focusablesTempList.size());
-            event.setCurrentItemIndex(focusablesTempList.indexOf(this));
-            focusablesTempList.clear();
+        switch (event.getEventType()) {
+            case AccessibilityEvent.TYPE_VIEW_FOCUSED: {
+                ArrayList<View> focusablesTempList = (mAttachInfo != null)
+                        ? mAttachInfo.mTempArrayList : new ArrayList<View>();
+                getRootView().addFocusables(focusablesTempList, View.FOCUS_FORWARD, FOCUSABLES_ALL);
+                event.setItemCount(focusablesTempList.size());
+                event.setCurrentItemIndex(focusablesTempList.indexOf(this));
+                if (mAttachInfo != null) {
+                    focusablesTempList.clear();
+                }
+            } break;
+            case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED: {
+                CharSequence text = getIterableTextForAccessibility();
+                if (text != null && text.length() > 0) {
+                    event.setFromIndex(getAccessibilitySelectionStart());
+                    event.setToIndex(getAccessibilitySelectionEnd());
+                    event.setItemCount(text.length());
+                }
+            } break;
         }
     }
 
@@ -5007,6 +5019,25 @@
             if (label != null) {
                 info.setLabeledBy(label);
             }
+
+            if ((mAttachInfo.mAccessibilityFetchFlags
+                    & AccessibilityNodeInfo.FLAG_REPORT_VIEW_IDS) != 0) {
+                String viewId = null;
+                try {
+                    viewId = getResources().getResourceName(mID);
+                } catch (Resources.NotFoundException nfe) {
+                    /* ignore */
+                }
+                if (viewId == null) {
+                    try {
+                        viewId = ((Context) ActivityThread.currentActivityThread()
+                                .getSystemContext()).getResources().getResourceName(mID);
+                    } catch (Resources.NotFoundException nfe) {
+                        /* ignore */
+                    }
+                }
+                info.setViewIdResourceName(viewId);
+            }
         }
 
         if (mLabelForId != View.NO_ID) {
@@ -5062,7 +5093,11 @@
             info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
         }
 
-        if (mContentDescription != null && mContentDescription.length() > 0) {
+        CharSequence text = getIterableTextForAccessibility();
+        if (text != null && text.length() > 0) {
+            info.setTextSelection(getAccessibilitySelectionStart(), getAccessibilitySelectionEnd());
+
+            info.addAction(AccessibilityNodeInfo.ACTION_SET_SELECTION);
             info.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
             info.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
             info.setMovementGranularities(AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER
@@ -6838,7 +6873,9 @@
      */
     public boolean includeForAccessibility() {
         if (mAttachInfo != null) {
-            return mAttachInfo.mIncludeNotImportantViews || isImportantForAccessibility();
+            return (mAttachInfo.mAccessibilityFetchFlags
+                    & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0
+                    || isImportantForAccessibility();
         }
         return false;
     }
@@ -6987,21 +7024,43 @@
                 if (arguments != null) {
                     final int granularity = arguments.getInt(
                             AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT);
-                    return nextAtGranularity(granularity);
+                    final boolean extendSelection = arguments.getBoolean(
+                            AccessibilityNodeInfo.ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN);
+                    return nextAtGranularity(granularity, extendSelection);
                 }
             } break;
             case AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY: {
                 if (arguments != null) {
                     final int granularity = arguments.getInt(
                             AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT);
-                    return previousAtGranularity(granularity);
+                    final boolean extendSelection = arguments.getBoolean(
+                            AccessibilityNodeInfo.ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN);
+                    return previousAtGranularity(granularity, extendSelection);
+                }
+            } break;
+            case AccessibilityNodeInfo.ACTION_SET_SELECTION: {
+                CharSequence text = getIterableTextForAccessibility();
+                if (text == null) {
+                    return false;
+                }
+                final int start = (arguments != null) ? arguments.getInt(
+                        AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT, -1) : -1;
+                final int end = (arguments != null) ? arguments.getInt(
+                AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT, -1) : -1;
+                // Only cursor position can be specified (selection length == 0)
+                if ((getAccessibilitySelectionStart() != start
+                        || getAccessibilitySelectionEnd() != end)
+                        && (start == end)) {
+                    setAccessibilitySelection(start, end);
+                    notifyAccessibilityStateChanged();
+                    return true;
                 }
             } break;
         }
         return false;
     }
 
-    private boolean nextAtGranularity(int granularity) {
+    private boolean nextAtGranularity(int granularity, boolean extendSelection) {
         CharSequence text = getIterableTextForAccessibility();
         if (text == null || text.length() == 0) {
             return false;
@@ -7010,21 +7069,32 @@
         if (iterator == null) {
             return false;
         }
-        final int current = getAccessibilityCursorPosition();
+        int current = getAccessibilitySelectionEnd();
+        if (current == ACCESSIBILITY_CURSOR_POSITION_UNDEFINED) {
+            current = 0;
+        }
         final int[] range = iterator.following(current);
         if (range == null) {
             return false;
         }
         final int start = range[0];
         final int end = range[1];
-        setAccessibilityCursorPosition(end);
+        if (extendSelection && isAccessibilitySelectionExtendable()) {
+            int selectionStart = getAccessibilitySelectionStart();
+            if (selectionStart == ACCESSIBILITY_CURSOR_POSITION_UNDEFINED) {
+                selectionStart = start;
+            }
+            setAccessibilitySelection(selectionStart, end);
+        } else {
+            setAccessibilitySelection(end, end);
+        }
         sendViewTextTraversedAtGranularityEvent(
                 AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY,
                 granularity, start, end);
         return true;
     }
 
-    private boolean previousAtGranularity(int granularity) {
+    private boolean previousAtGranularity(int granularity, boolean extendSelection) {
         CharSequence text = getIterableTextForAccessibility();
         if (text == null || text.length() == 0) {
             return false;
@@ -7033,15 +7103,9 @@
         if (iterator == null) {
             return false;
         }
-        int current = getAccessibilityCursorPosition();
+        int current = getAccessibilitySelectionStart();
         if (current == ACCESSIBILITY_CURSOR_POSITION_UNDEFINED) {
             current = text.length();
-            setAccessibilityCursorPosition(current);
-        } else if (granularity == AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER) {
-            // When traversing by character we always put the cursor after the character
-            // to ease edit and have to compensate before asking the for previous segment.
-            current--;
-            setAccessibilityCursorPosition(current);
         }
         final int[] range = iterator.preceding(current);
         if (range == null) {
@@ -7049,11 +7113,14 @@
         }
         final int start = range[0];
         final int end = range[1];
-        // Always put the cursor after the character to ease edit.
-        if (granularity == AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER) {
-            setAccessibilityCursorPosition(end);
+        if (extendSelection && isAccessibilitySelectionExtendable()) {
+            int selectionEnd = getAccessibilitySelectionEnd();
+            if (selectionEnd == ACCESSIBILITY_CURSOR_POSITION_UNDEFINED) {
+                selectionEnd = end;
+            }
+            setAccessibilitySelection(start, selectionEnd);
         } else {
-            setAccessibilityCursorPosition(start);
+            setAccessibilitySelection(start, start);
         }
         sendViewTextTraversedAtGranularityEvent(
                 AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY,
@@ -7073,17 +7140,43 @@
     }
 
     /**
+     * Gets whether accessibility selection can be extended.
+     *
+     * @return If selection is extensible.
+     *
      * @hide
      */
-    public int getAccessibilityCursorPosition() {
+    public boolean isAccessibilitySelectionExtendable() {
+        return false;
+    }
+
+    /**
+     * @hide
+     */
+    public int getAccessibilitySelectionStart() {
         return mAccessibilityCursorPosition;
     }
 
     /**
      * @hide
      */
-    public void setAccessibilityCursorPosition(int position) {
-        mAccessibilityCursorPosition = position;
+    public int getAccessibilitySelectionEnd() {
+        return getAccessibilitySelectionStart();
+    }
+
+    /**
+     * @hide
+     */
+    public void setAccessibilitySelection(int start, int end) {
+        if (start ==  end && end == mAccessibilityCursorPosition) {
+            return;
+        }
+        if (start >= 0 && start == end && end <= getIterableTextForAccessibility().length()) {
+            mAccessibilityCursorPosition = start;
+        } else {
+            mAccessibilityCursorPosition = ACCESSIBILITY_CURSOR_POSITION_UNDEFINED;
+        }
+        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED);
     }
 
     private void sendViewTextTraversedAtGranularityEvent(int action, int granularity,
@@ -8092,8 +8185,7 @@
             // in onHoverEvent.
             // Note that onGenericMotionEvent will be called by default when
             // onHoverEvent returns false (refer to dispatchGenericMotionEvent).
-            dispatchGenericMotionEventInternal(event);
-            return true;
+            return dispatchGenericMotionEventInternal(event);
         }
 
         return false;
@@ -18004,10 +18096,12 @@
         int mAccessibilityWindowId = View.NO_ID;
 
         /**
-         * Whether to ingore not exposed for accessibility Views when
-         * reporting the view tree to accessibility services.
+         * Flags related to accessibility processing.
+         *
+         * @see AccessibilityNodeInfo#FLAG_INCLUDE_NOT_IMPORTANT_VIEWS
+         * @see AccessibilityNodeInfo#FLAG_REPORT_VIEW_IDS
          */
-        boolean mIncludeNotImportantViews;
+        int mAccessibilityFetchFlags;
 
         /**
          * The drawable for highlighting accessibility focus.
diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java
index 6e28268..987ff785 100644
--- a/core/java/android/view/ViewDebug.java
+++ b/core/java/android/view/ViewDebug.java
@@ -45,6 +45,7 @@
 import java.util.HashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Various debugging/tracing tools related to {@link View} and the view hierarchy.
@@ -1374,4 +1375,68 @@
         sb.append(capturedViewExportMethods(view, klass, ""));
         Log.d(tag, sb.toString());
     }
+
+    /**
+     * Invoke a particular method on given view.
+     * The given method is always invoked on the UI thread. The caller thread will stall until the
+     * method invocation is complete. Returns an object equal to the result of the method
+     * invocation, null if the method is declared to return void
+     * @throws Exception if the method invocation caused any exception
+     * @hide
+     */
+    public static Object invokeViewMethod(final View view, final Method method,
+            final Object[] args) {
+        final CountDownLatch latch = new CountDownLatch(1);
+        final AtomicReference<Object> result = new AtomicReference<Object>();
+        final AtomicReference<Throwable> exception = new AtomicReference<Throwable>();
+
+        view.post(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    result.set(method.invoke(view, args));
+                } catch (InvocationTargetException e) {
+                    exception.set(e.getCause());
+                } catch (Exception e) {
+                    exception.set(e);
+                }
+
+                latch.countDown();
+            }
+        });
+
+        try {
+            latch.await();
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+
+        if (exception.get() != null) {
+            throw new RuntimeException(exception.get());
+        }
+
+        return result.get();
+    }
+
+    /**
+     * @hide
+     */
+    public static void setLayoutParameter(final View view, final String param, final int value)
+            throws NoSuchFieldException, IllegalAccessException {
+        final ViewGroup.LayoutParams p = view.getLayoutParams();
+        final Field f = p.getClass().getField(param);
+        if (f.getType() != int.class) {
+            throw new RuntimeException("Only integer layout parameters can be set. Field "
+                        + param + " is of type " + f.getType().getSimpleName());
+        }
+
+        f.set(p, Integer.valueOf(value));
+
+        view.post(new Runnable() {
+            @Override
+            public void run() {
+                view.setLayoutParams(p);
+            }
+        });
+    }
 }
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 3faac40..fa2f8c8 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -139,6 +139,7 @@
 
     final IWindowSession mWindowSession;
     final Display mDisplay;
+    final String mBasePackageName;
 
     long mLastTrackballTime = 0;
     final TrackballAxis mTrackballAxisX = new TrackballAxis();
@@ -355,6 +356,7 @@
         // allow the spawning of threads.
         mWindowSession = WindowManagerGlobal.getWindowSession(context.getMainLooper());
         mDisplay = display;
+        mBasePackageName = context.getBasePackageName();
 
         CompatibilityInfoHolder cih = display.getCompatibilityInfo();
         mCompatibilityInfo = cih != null ? cih : new CompatibilityInfoHolder();
@@ -477,6 +479,9 @@
                 mViewLayoutDirectionInitial = mView.getRawLayoutDirection();
                 mFallbackEventHandler.setView(view);
                 mWindowAttributes.copyFrom(attrs);
+                if (mWindowAttributes.packageName == null) {
+                    mWindowAttributes.packageName = mBasePackageName;
+                }
                 attrs = mWindowAttributes;
                 // Keep track of the actual window flags supplied by the client.
                 mClientWindowLayoutFlags = attrs.flags;
@@ -739,6 +744,7 @@
 
                 final boolean translucent = attrs.format != PixelFormat.OPAQUE;
                 mAttachInfo.mHardwareRenderer = HardwareRenderer.createGlRenderer(2, translucent);
+                mAttachInfo.mHardwareRenderer.setName(attrs.getTitle().toString());
                 mAttachInfo.mHardwareAccelerated = mAttachInfo.mHardwareAccelerationRequested
                         = mAttachInfo.mHardwareRenderer != null;
 
@@ -773,6 +779,9 @@
             attrs.systemUiVisibility = mWindowAttributes.systemUiVisibility;
             attrs.subtreeSystemUiVisibility = mWindowAttributes.subtreeSystemUiVisibility;
             mWindowAttributesChangesFlag = mWindowAttributes.copyFrom(attrs);
+            if (mWindowAttributes.packageName == null) {
+                mWindowAttributes.packageName = mBasePackageName;
+            }
             mWindowAttributes.flags |= compatibleWindowFlag;
 
             applyKeepScreenOnFlag(mWindowAttributes);
@@ -1513,16 +1522,7 @@
                                 hwInitialized = mAttachInfo.mHardwareRenderer.initialize(
                                         mHolder.getSurface());
                             } catch (Surface.OutOfResourcesException e) {
-                                Log.e(TAG, "OutOfResourcesException initializing HW surface", e);
-                                try {
-                                    if (!mWindowSession.outOfMemory(mWindow) &&
-                                            Process.myUid() != Process.SYSTEM_UID) {
-                                        Slog.w(TAG, "No processes killed for memory; killing self");
-                                        Process.killProcess(Process.myPid());
-                                    }
-                                } catch (RemoteException ex) {
-                                }
-                                mLayoutRequested = true;    // ask wm for a new surface next time.
+                                handleOutOfResourcesException(e);
                                 return;
                             }
                         }
@@ -1549,15 +1549,7 @@
                     try {
                         mAttachInfo.mHardwareRenderer.updateSurface(mHolder.getSurface());
                     } catch (Surface.OutOfResourcesException e) {
-                        Log.e(TAG, "OutOfResourcesException updating HW surface", e);
-                        try {
-                            if (!mWindowSession.outOfMemory(mWindow)) {
-                                Slog.w(TAG, "No processes killed for memory; killing self");
-                                Process.killProcess(Process.myPid());
-                            }
-                        } catch (RemoteException ex) {
-                        }
-                        mLayoutRequested = true;    // ask wm for a new surface next time.
+                        handleOutOfResourcesException(e);
                         return;
                     }
                 }
@@ -1879,6 +1871,19 @@
         mIsInTraversal = false;
     }
 
+    private void handleOutOfResourcesException(Surface.OutOfResourcesException e) {
+        Log.e(TAG, "OutOfResourcesException initializing HW surface", e);
+        try {
+            if (!mWindowSession.outOfMemory(mWindow) &&
+                    Process.myUid() != Process.SYSTEM_UID) {
+                Slog.w(TAG, "No processes killed for memory; killing self");
+                Process.killProcess(Process.myPid());
+            }
+        } catch (RemoteException ex) {
+        }
+        mLayoutRequested = true;    // ask wm for a new surface next time.
+    }
+
     private void performMeasure(int childWidthMeasureSpec, int childHeightMeasureSpec) {
         Trace.traceBegin(Trace.TRACE_TAG_VIEW, "measure");
         try {
@@ -2296,8 +2301,35 @@
                         animating ? null : mCurrentDirty)) {
                     mPreviousDirty.set(0, 0, mWidth, mHeight);
                 }
-            } else if (!drawSoftware(surface, attachInfo, yoff, scalingRequired, dirty)) {
-                return;
+            } else {
+                // If we get here with a disabled & requested hardware renderer, something went
+                // wrong (an invalidate posted right before we destroyed the hardware surface
+                // for instance) so we should just bail out. Locking the surface with software
+                // rendering at this point would lock it forever and prevent hardware renderer
+                // from doing its job when it comes back.
+                // Before we request a new frame we must however attempt to reinitiliaze the
+                // hardware renderer if it's in requested state. This would happen after an
+                // eglTerminate() for instance.
+                if (attachInfo.mHardwareRenderer != null &&
+                        !attachInfo.mHardwareRenderer.isEnabled() &&
+                        attachInfo.mHardwareRenderer.isRequested()) {
+
+                    try {
+                        attachInfo.mHardwareRenderer.initializeIfNeeded(mWidth, mHeight,
+                                mHolder.getSurface());
+                    } catch (Surface.OutOfResourcesException e) {
+                        handleOutOfResourcesException(e);
+                        return;
+                    }
+
+                    mFullRedrawNeeded = true;
+                    scheduleTraversals();
+                    return;
+                }
+
+                if (!drawSoftware(surface, attachInfo, yoff, scalingRequired, dirty)) {
+                    return;
+                }
             }
         }
 
@@ -2313,18 +2345,6 @@
     private boolean drawSoftware(Surface surface, AttachInfo attachInfo, int yoff,
             boolean scalingRequired, Rect dirty) {
 
-        // If we get here with a disabled & requested hardware renderer, something went
-        // wrong (an invalidate posted right before we destroyed the hardware surface
-        // for instance) so we should just bail out. Locking the surface with software
-        // rendering at this point would lock it forever and prevent hardware renderer
-        // from doing its job when it comes back.
-        if (attachInfo.mHardwareRenderer != null && !attachInfo.mHardwareRenderer.isEnabled() &&
-                attachInfo.mHardwareRenderer.isRequested()) {
-            mFullRedrawNeeded = true;
-            scheduleTraversals();
-            return false;
-        }
-
         // Draw with software renderer.
         Canvas canvas;
         try {
@@ -2343,15 +2363,7 @@
             // TODO: Do this in native
             canvas.setDensity(mDensity);
         } catch (Surface.OutOfResourcesException e) {
-            Log.e(TAG, "OutOfResourcesException locking surface", e);
-            try {
-                if (!mWindowSession.outOfMemory(mWindow)) {
-                    Slog.w(TAG, "No processes killed for memory; killing self");
-                    Process.killProcess(Process.myPid());
-                }
-            } catch (RemoteException ex) {
-            }
-            mLayoutRequested = true;    // ask wm for a new surface next time.
+            handleOutOfResourcesException(e);
             return false;
         } catch (IllegalArgumentException e) {
             Log.e(TAG, "Could not lock surface", e);
@@ -2996,10 +3008,8 @@
                                 mSurface != null && mSurface.isValid()) {
                             mFullRedrawNeeded = true;
                             try {
-                                if (mAttachInfo.mHardwareRenderer.initializeIfNeeded(
-                                        mWidth, mHeight, mHolder.getSurface())) {
-                                    mFullRedrawNeeded = true;
-                                }
+                                mAttachInfo.mHardwareRenderer.initializeIfNeeded(
+                                        mWidth, mHeight, mHolder.getSurface());
                             } catch (Surface.OutOfResourcesException e) {
                                 Log.e(TAG, "OutOfResourcesException locking surface", e);
                                 try {
@@ -5481,15 +5491,16 @@
         }
 
         @Override
-        public void findAccessibilityNodeInfoByViewId(long accessibilityNodeId, int viewId,
-                int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
+        public void findAccessibilityNodeInfosByViewId(long accessibilityNodeId,
+                String viewId, int interactionId,
+                IAccessibilityInteractionConnectionCallback callback, int flags,
                 int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
             ViewRootImpl viewRootImpl = mViewRootImpl.get();
             if (viewRootImpl != null && viewRootImpl.mView != null) {
                 viewRootImpl.getAccessibilityInteractionController()
-                    .findAccessibilityNodeInfoByViewIdClientThread(accessibilityNodeId, viewId,
-                            interactionId, callback, flags, interrogatingPid, interrogatingTid,
-                            spec);
+                    .findAccessibilityNodeInfosByViewIdClientThread(accessibilityNodeId,
+                            viewId, interactionId, callback, flags, interrogatingPid,
+                            interrogatingTid, spec);
             } else {
                 // We cannot make the call and notify the caller so it does not wait.
                 try {
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 9377cfa..b5d216a 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -135,6 +135,16 @@
      */
     public interface WindowState {
         /**
+         * Return the uid of the app that owns this window.
+         */
+        int getOwningUid();
+
+        /**
+         * Return the package name of the app that owns this window.
+         */
+        String getOwningPackage();
+
+        /**
          * Perform standard frame computation.  The result can be obtained with
          * getFrame() if so desired.  Must be called with the window manager
          * lock held.
@@ -450,13 +460,15 @@
     /**
      * Check permissions when adding a window.
      * 
-     * @param attrs The window's LayoutParams. 
+     * @param attrs The window's LayoutParams.
+     * @param outAppOp First element will be filled with the app op corresponding to
+     *                 this window, or OP_NONE.
      *  
      * @return {@link WindowManagerGlobal#ADD_OKAY} if the add can proceed;
      *      else an error code, usually
      *      {@link WindowManagerGlobal#ADD_PERMISSION_DENIED}, to abort the add.
      */
-    public int checkAddPermission(WindowManager.LayoutParams attrs);
+    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp);
 
     /**
      * Check permissions when adding a window.
@@ -1035,6 +1047,16 @@
     public void keepScreenOnStoppedLw();
 
     /**
+     * Gets the current user rotation mode. 
+     *
+     * @return The rotation mode.
+     *
+     * @see WindowManagerPolicy#USER_ROTATION_LOCKED
+     * @see WindowManagerPolicy#USER_ROTATION_FREE 
+     */
+    public int getUserRotationMode();
+
+    /**
      * Inform the policy that the user has chosen a preferred orientation ("rotation lock"). 
      *
      * @param mode One of {@link WindowManagerPolicy#USER_ROTATION_LOCKED} or
diff --git a/core/java/android/view/WindowOrientationListener.java b/core/java/android/view/WindowOrientationListener.java
index 4c34dd4..bf77c67 100644
--- a/core/java/android/view/WindowOrientationListener.java
+++ b/core/java/android/view/WindowOrientationListener.java
@@ -98,6 +98,7 @@
             if (LOG) {
                 Log.d(TAG, "WindowOrientationListener enabled");
             }
+            mSensorEventListener.reset();
             mSensorManager.registerListener(mSensorEventListener, mSensor, mRate);
             mEnabled = true;
         }
diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
index 67df684..84d7e72 100644
--- a/core/java/android/view/accessibility/AccessibilityInteractionClient.java
+++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
@@ -230,23 +230,25 @@
      *     where to start the search. Use
      *     {@link android.view.accessibility.AccessibilityNodeInfo#ROOT_NODE_ID}
      *     to start from the root.
-     * @param viewId The id of the view.
-     * @return An {@link AccessibilityNodeInfo} if found, null otherwise.
+     * @param viewId The fully qualified resource name of the view id to find.
+     * @return An list of {@link AccessibilityNodeInfo} if found, empty list otherwise.
      */
-    public AccessibilityNodeInfo findAccessibilityNodeInfoByViewId(int connectionId,
-            int accessibilityWindowId, long accessibilityNodeId, int viewId) {
+    public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewId(int connectionId,
+            int accessibilityWindowId, long accessibilityNodeId, String viewId) {
         try {
             IAccessibilityServiceConnection connection = getConnection(connectionId);
             if (connection != null) {
                 final int interactionId = mInteractionIdCounter.getAndIncrement();
-                final boolean success =connection.findAccessibilityNodeInfoByViewId(
+                final boolean success = connection.findAccessibilityNodeInfosByViewId(
                         accessibilityWindowId, accessibilityNodeId, viewId, interactionId, this,
                         Thread.currentThread().getId());
                 if (success) {
-                    AccessibilityNodeInfo info = getFindAccessibilityNodeInfoResultAndClear(
+                    List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
                             interactionId);
-                    finalizeAndCacheAccessibilityNodeInfo(info, connectionId);
-                    return info;
+                    if (infos != null) {
+                        finalizeAndCacheAccessibilityNodeInfos(infos, connectionId);
+                        return infos;
+                    }
                 }
             } else {
                 if (DEBUG) {
@@ -259,7 +261,7 @@
                         + " findAccessibilityNodeInfoByViewIdInActiveWindow", re);
             }
         }
-        return null;
+        return Collections.emptyList();
     }
 
     /**
@@ -291,8 +293,10 @@
                 if (success) {
                     List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
                             interactionId);
-                    finalizeAndCacheAccessibilityNodeInfos(infos, connectionId);
-                    return infos;
+                    if (infos != null) {
+                        finalizeAndCacheAccessibilityNodeInfos(infos, connectionId);
+                        return infos;
+                    }
                 }
             } else {
                 if (DEBUG) {
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 6c03280..ad87fcb 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -16,6 +16,7 @@
 
 package android.view.accessibility;
 
+import android.accessibilityservice.AccessibilityServiceInfo;
 import android.graphics.Rect;
 import android.os.Bundle;
 import android.os.Parcel;
@@ -78,7 +79,10 @@
     public static final int FLAG_PREFETCH_DESCENDANTS = 0x00000004;
 
     /** @hide */
-    public static final int INCLUDE_NOT_IMPORTANT_VIEWS = 0x00000008;
+    public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 0x00000008;
+
+    /** @hide */
+    public static final int FLAG_REPORT_VIEW_IDS = 0x00000010;
 
     // Actions.
 
@@ -127,16 +131,22 @@
      * at a given movement granularity. For example, move to the next character,
      * word, etc.
      * <p>
-     * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT}<br>
-     * <strong>Example:</strong>
+     * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT}<,
+     * {@link #ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN}<br>
+     * <strong>Example:</strong> Move to the previous character and do not extend selection.
      * <code><pre><p>
      *   Bundle arguments = new Bundle();
      *   arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT,
      *           AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER);
+     *   arguments.putBoolean(AccessibilityNodeInfo.ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN,
+     *           false);
      *   info.performAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY, arguments);
      * </code></pre></p>
      * </p>
      *
+     * @see #ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT
+     * @see #ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN
+     *
      * @see #setMovementGranularities(int)
      * @see #getMovementGranularities()
      *
@@ -153,17 +163,23 @@
      * at a given movement granularity. For example, move to the next character,
      * word, etc.
      * <p>
-     * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT}<br>
-     * <strong>Example:</strong>
+     * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT}<,
+     * {@link #ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN}<br>
+     * <strong>Example:</strong> Move to the next character and do not extend selection.
      * <code><pre><p>
      *   Bundle arguments = new Bundle();
      *   arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT,
      *           AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER);
+     *   arguments.putBoolean(AccessibilityNodeInfo.ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN,
+     *           false);
      *   info.performAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY,
      *           arguments);
      * </code></pre></p>
      * </p>
      *
+     * @see #ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT
+     * @see #ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN
+     *
      * @see #setMovementGranularities(int)
      * @see #getMovementGranularities()
      *
@@ -216,15 +232,53 @@
     public static final int ACTION_SCROLL_BACKWARD = 0x00002000;
 
     /**
+     * Action to copy the current selection to the clipboard.
+     */
+    public static final int ACTION_COPY = 0x00004000;
+
+    /**
+     * Action to paste the current clipboard content.
+     */
+    public static final int ACTION_PASTE = 0x00008000;
+
+    /**
+     * Action to cut the current selection and place it to the clipboard.
+     */
+    public static final int ACTION_CUT = 0x00010000;
+
+    /**
+     * Action to set the selection. Performing this action with no arguments
+     * clears the selection.
+     * <p>
+     * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_SELECTION_START_INT},
+     * {@link #ACTION_ARGUMENT_SELECTION_END_INT}<br>
+     * <strong>Example:</strong>
+     * <code><pre><p>
+     *   Bundle arguments = new Bundle();
+     *   arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT, 1);
+     *   arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT, 2);
+     *   info.performAction(AccessibilityNodeInfo.ACTION_SET_SELECTION, arguments);
+     * </code></pre></p>
+     * </p>
+     *
+     * @see #ACTION_ARGUMENT_SELECTION_START_INT
+     * @see #ACTION_ARGUMENT_SELECTION_END_INT
+     */
+    public static final int ACTION_SET_SELECTION = 0x00020000;
+
+    /**
      * Argument for which movement granularity to be used when traversing the node text.
      * <p>
      * <strong>Type:</strong> int<br>
      * <strong>Actions:</strong> {@link #ACTION_NEXT_AT_MOVEMENT_GRANULARITY},
      * {@link #ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY}
      * </p>
+     *
+     * @see #ACTION_NEXT_AT_MOVEMENT_GRANULARITY
+     * @see #ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY
      */
     public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT =
-        "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+            "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
 
     /**
      * Argument for which HTML element to get moving to the next/previous HTML element.
@@ -233,9 +287,51 @@
      * <strong>Actions:</strong> {@link #ACTION_NEXT_HTML_ELEMENT},
      *         {@link #ACTION_PREVIOUS_HTML_ELEMENT}
      * </p>
+     *
+     * @see #ACTION_NEXT_HTML_ELEMENT
+     * @see #ACTION_PREVIOUS_HTML_ELEMENT
      */
     public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING =
-        "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+            "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+
+    /**
+     * Argument for whether when moving at granularity to extend the selection
+     * or to move it otherwise.
+     * <p>
+     * <strong>Type:</strong> boolean<br>
+     * <strong>Actions:</strong> {@link #ACTION_NEXT_AT_MOVEMENT_GRANULARITY},
+     * {@link #ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY}
+     * </p>
+     *
+     * @see #ACTION_NEXT_AT_MOVEMENT_GRANULARITY
+     * @see #ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY
+     */
+    public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN =
+            "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+
+    /**
+     * Argument for specifying the selection start.
+     * <p>
+     * <strong>Type:</strong> int<br>
+     * <strong>Actions:</strong> {@link #ACTION_SET_SELECTION}
+     * </p>
+     *
+     * @see #ACTION_SET_SELECTION
+     */
+    public static final String ACTION_ARGUMENT_SELECTION_START_INT =
+            "ACTION_ARGUMENT_SELECTION_START_INT";
+
+    /**
+     * Argument for specifying the selection end.
+     * <p>
+     * <strong>Type:</strong> int<br>
+     * <strong>Actions:</strong> {@link #ACTION_SET_SELECTION}
+     * </p>
+     *
+     * @see #ACTION_SET_SELECTION
+     */
+    public static final String ACTION_ARGUMENT_SELECTION_END_INT =
+            "ACTION_ARGUMENT_SELECTION_END_INT";
 
     /**
      * The input focus.
@@ -276,29 +372,31 @@
 
     // Boolean attributes.
 
-    private static final int PROPERTY_CHECKABLE = 0x00000001;
+    private static final int BOOLEAN_PROPERTY_CHECKABLE = 0x00000001;
 
-    private static final int PROPERTY_CHECKED = 0x00000002;
+    private static final int BOOLEAN_PROPERTY_CHECKED = 0x00000002;
 
-    private static final int PROPERTY_FOCUSABLE = 0x00000004;
+    private static final int BOOLEAN_PROPERTY_FOCUSABLE = 0x00000004;
 
-    private static final int PROPERTY_FOCUSED = 0x00000008;
+    private static final int BOOLEAN_PROPERTY_FOCUSED = 0x00000008;
 
-    private static final int PROPERTY_SELECTED = 0x00000010;
+    private static final int BOOLEAN_PROPERTY_SELECTED = 0x00000010;
 
-    private static final int PROPERTY_CLICKABLE = 0x00000020;
+    private static final int BOOLEAN_PROPERTY_CLICKABLE = 0x00000020;
 
-    private static final int PROPERTY_LONG_CLICKABLE = 0x00000040;
+    private static final int BOOLEAN_PROPERTY_LONG_CLICKABLE = 0x00000040;
 
-    private static final int PROPERTY_ENABLED = 0x00000080;
+    private static final int BOOLEAN_PROPERTY_ENABLED = 0x00000080;
 
-    private static final int PROPERTY_PASSWORD = 0x00000100;
+    private static final int BOOLEAN_PROPERTY_PASSWORD = 0x00000100;
 
-    private static final int PROPERTY_SCROLLABLE = 0x00000200;
+    private static final int BOOLEAN_PROPERTY_SCROLLABLE = 0x00000200;
 
-    private static final int PROPERTY_ACCESSIBILITY_FOCUSED = 0x00000400;
+    private static final int BOOLEAN_PROPERTY_ACCESSIBILITY_FOCUSED = 0x00000400;
 
-    private static final int PROPERTY_VISIBLE_TO_USER = 0x00000800;
+    private static final int BOOLEAN_PROPERTY_VISIBLE_TO_USER = 0x00000800;
+
+    private static final int BOOLEAN_PROPERTY_EDITABLE = 0x00001000;
 
     /**
      * Bits that provide the id of a virtual descendant of a view.
@@ -375,12 +473,16 @@
     private CharSequence mClassName;
     private CharSequence mText;
     private CharSequence mContentDescription;
+    private CharSequence mViewIdResourceName;
 
     private final SparseLongArray mChildNodeIds = new SparseLongArray();
     private int mActions;
 
     private int mMovementGranularities;
 
+    private int mTextSelectionStart = UNDEFINED;
+    private int mTextSelectionEnd = UNDEFINED;
+
     private int mConnectionId = UNDEFINED;
 
     /**
@@ -729,6 +831,37 @@
     }
 
     /**
+     * Finds {@link AccessibilityNodeInfo}s by the fully qualified view id's resource
+     * name where a fully qualified id is of the from "package:id/id_resource_name".
+     * For example, if the target application's package is "foo.bar" and the id
+     * resource name is "baz", the fully qualified resource id is "foo.bar:id/baz".
+     *
+     * <p>
+     *   <strong>Note:</strong> It is a client responsibility to recycle the
+     *     received info by calling {@link AccessibilityNodeInfo#recycle()}
+     *     to avoid creating of multiple instances.
+     * </p>
+     * <p>
+     *   <strong>Note:</strong> The primary usage of this API is for UI test automation
+     *   and in order to report the fully qualified view id if an {@link AccessibilityNodeInfo}
+     *   the client has to set the {@link AccessibilityServiceInfo#FLAG_REPORT_VIEW_IDS}
+     *   flag when configuring his {@link android.accessibilityservice.AccessibilityService}.
+     * </p>
+     *
+     * @param viewId The fully qualified resource name of the view id to find.
+     * @return A list of node info.
+     */
+    public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewId(String viewId) {
+        enforceSealed();
+        if (!canPerformRequestOverConnection(mSourceNodeId)) {
+            return Collections.emptyList();
+        }
+        AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+        return client.findAccessibilityNodeInfosByViewId(mConnectionId, mWindowId, mSourceNodeId,
+                viewId);
+    }
+
+    /**
      * Gets the parent.
      * <p>
      *   <strong>Note:</strong> It is a client responsibility to recycle the
@@ -859,7 +992,7 @@
      * @return True if the node is checkable.
      */
     public boolean isCheckable() {
-        return getBooleanProperty(PROPERTY_CHECKABLE);
+        return getBooleanProperty(BOOLEAN_PROPERTY_CHECKABLE);
     }
 
     /**
@@ -875,7 +1008,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setCheckable(boolean checkable) {
-        setBooleanProperty(PROPERTY_CHECKABLE, checkable);
+        setBooleanProperty(BOOLEAN_PROPERTY_CHECKABLE, checkable);
     }
 
     /**
@@ -884,7 +1017,7 @@
      * @return True if the node is checked.
      */
     public boolean isChecked() {
-        return getBooleanProperty(PROPERTY_CHECKED);
+        return getBooleanProperty(BOOLEAN_PROPERTY_CHECKED);
     }
 
     /**
@@ -900,7 +1033,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setChecked(boolean checked) {
-        setBooleanProperty(PROPERTY_CHECKED, checked);
+        setBooleanProperty(BOOLEAN_PROPERTY_CHECKED, checked);
     }
 
     /**
@@ -909,7 +1042,7 @@
      * @return True if the node is focusable.
      */
     public boolean isFocusable() {
-        return getBooleanProperty(PROPERTY_FOCUSABLE);
+        return getBooleanProperty(BOOLEAN_PROPERTY_FOCUSABLE);
     }
 
     /**
@@ -925,7 +1058,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setFocusable(boolean focusable) {
-        setBooleanProperty(PROPERTY_FOCUSABLE, focusable);
+        setBooleanProperty(BOOLEAN_PROPERTY_FOCUSABLE, focusable);
     }
 
     /**
@@ -934,7 +1067,7 @@
      * @return True if the node is focused.
      */
     public boolean isFocused() {
-        return getBooleanProperty(PROPERTY_FOCUSED);
+        return getBooleanProperty(BOOLEAN_PROPERTY_FOCUSED);
     }
 
     /**
@@ -950,7 +1083,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setFocused(boolean focused) {
-        setBooleanProperty(PROPERTY_FOCUSED, focused);
+        setBooleanProperty(BOOLEAN_PROPERTY_FOCUSED, focused);
     }
 
     /**
@@ -959,7 +1092,7 @@
      * @return Whether the node is visible to the user.
      */
     public boolean isVisibleToUser() {
-        return getBooleanProperty(PROPERTY_VISIBLE_TO_USER);
+        return getBooleanProperty(BOOLEAN_PROPERTY_VISIBLE_TO_USER);
     }
 
     /**
@@ -975,7 +1108,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setVisibleToUser(boolean visibleToUser) {
-        setBooleanProperty(PROPERTY_VISIBLE_TO_USER, visibleToUser);
+        setBooleanProperty(BOOLEAN_PROPERTY_VISIBLE_TO_USER, visibleToUser);
     }
 
     /**
@@ -984,7 +1117,7 @@
      * @return True if the node is accessibility focused.
      */
     public boolean isAccessibilityFocused() {
-        return getBooleanProperty(PROPERTY_ACCESSIBILITY_FOCUSED);
+        return getBooleanProperty(BOOLEAN_PROPERTY_ACCESSIBILITY_FOCUSED);
     }
 
     /**
@@ -1000,7 +1133,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setAccessibilityFocused(boolean focused) {
-        setBooleanProperty(PROPERTY_ACCESSIBILITY_FOCUSED, focused);
+        setBooleanProperty(BOOLEAN_PROPERTY_ACCESSIBILITY_FOCUSED, focused);
     }
 
     /**
@@ -1009,7 +1142,7 @@
      * @return True if the node is selected.
      */
     public boolean isSelected() {
-        return getBooleanProperty(PROPERTY_SELECTED);
+        return getBooleanProperty(BOOLEAN_PROPERTY_SELECTED);
     }
 
     /**
@@ -1025,7 +1158,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setSelected(boolean selected) {
-        setBooleanProperty(PROPERTY_SELECTED, selected);
+        setBooleanProperty(BOOLEAN_PROPERTY_SELECTED, selected);
     }
 
     /**
@@ -1034,7 +1167,7 @@
      * @return True if the node is clickable.
      */
     public boolean isClickable() {
-        return getBooleanProperty(PROPERTY_CLICKABLE);
+        return getBooleanProperty(BOOLEAN_PROPERTY_CLICKABLE);
     }
 
     /**
@@ -1050,7 +1183,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setClickable(boolean clickable) {
-        setBooleanProperty(PROPERTY_CLICKABLE, clickable);
+        setBooleanProperty(BOOLEAN_PROPERTY_CLICKABLE, clickable);
     }
 
     /**
@@ -1059,7 +1192,7 @@
      * @return True if the node is long clickable.
      */
     public boolean isLongClickable() {
-        return getBooleanProperty(PROPERTY_LONG_CLICKABLE);
+        return getBooleanProperty(BOOLEAN_PROPERTY_LONG_CLICKABLE);
     }
 
     /**
@@ -1075,7 +1208,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setLongClickable(boolean longClickable) {
-        setBooleanProperty(PROPERTY_LONG_CLICKABLE, longClickable);
+        setBooleanProperty(BOOLEAN_PROPERTY_LONG_CLICKABLE, longClickable);
     }
 
     /**
@@ -1084,7 +1217,7 @@
      * @return True if the node is enabled.
      */
     public boolean isEnabled() {
-        return getBooleanProperty(PROPERTY_ENABLED);
+        return getBooleanProperty(BOOLEAN_PROPERTY_ENABLED);
     }
 
     /**
@@ -1100,7 +1233,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setEnabled(boolean enabled) {
-        setBooleanProperty(PROPERTY_ENABLED, enabled);
+        setBooleanProperty(BOOLEAN_PROPERTY_ENABLED, enabled);
     }
 
     /**
@@ -1109,7 +1242,7 @@
      * @return True if the node is a password.
      */
     public boolean isPassword() {
-        return getBooleanProperty(PROPERTY_PASSWORD);
+        return getBooleanProperty(BOOLEAN_PROPERTY_PASSWORD);
     }
 
     /**
@@ -1125,7 +1258,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setPassword(boolean password) {
-        setBooleanProperty(PROPERTY_PASSWORD, password);
+        setBooleanProperty(BOOLEAN_PROPERTY_PASSWORD, password);
     }
 
     /**
@@ -1134,7 +1267,7 @@
      * @return True if the node is scrollable, false otherwise.
      */
     public boolean isScrollable() {
-        return getBooleanProperty(PROPERTY_SCROLLABLE);
+        return getBooleanProperty(BOOLEAN_PROPERTY_SCROLLABLE);
     }
 
     /**
@@ -1151,7 +1284,32 @@
      */
     public void setScrollable(boolean scrollable) {
         enforceNotSealed();
-        setBooleanProperty(PROPERTY_SCROLLABLE, scrollable);
+        setBooleanProperty(BOOLEAN_PROPERTY_SCROLLABLE, scrollable);
+    }
+
+    /**
+     * Gets if the node is editable.
+     *
+     * @return True if the node is editable, false otherwise.
+     */
+    public boolean isEditable() {
+        return getBooleanProperty(BOOLEAN_PROPERTY_EDITABLE);
+    }
+
+    /**
+     * Sets whether this node is editable.
+     * <p>
+     *   <strong>Note:</strong> Cannot be called from an
+     *   {@link android.accessibilityservice.AccessibilityService}.
+     *   This class is made immutable before being delivered to an AccessibilityService.
+     * </p>
+     *
+     * @param editable True if the node is editable.
+     *
+     * @throws IllegalStateException If called from an AccessibilityService.
+     */
+    public void setEditable(boolean editable) {
+        setBooleanProperty(BOOLEAN_PROPERTY_EDITABLE, editable);
     }
 
     /**
@@ -1373,6 +1531,75 @@
     }
 
     /**
+     * Sets the fully qualified resource name of the source view's id.
+     *
+     * <p>
+     *   <strong>Note:</strong> Cannot be called from an
+     *   {@link android.accessibilityservice.AccessibilityService}.
+     *   This class is made immutable before being delivered to an AccessibilityService.
+     * </p>
+     *
+     * @param viewIdResName The id resource name.
+     */
+    public void setViewIdResourceName(CharSequence viewIdResName) {
+        enforceNotSealed();
+        mViewIdResourceName = viewIdResName;
+    }
+
+    /**
+     * Gets the fully qualified resource name of the source view's id.
+     *
+     * <p>
+     *   <strong>Note:</strong> The primary usage of this API is for UI test automation
+     *   and in order to report the source view id of an {@link AccessibilityNodeInfo} the
+     *   client has to set the {@link AccessibilityServiceInfo#FLAG_REPORT_VIEW_IDS}
+     *   flag when configuring his {@link android.accessibilityservice.AccessibilityService}.
+     * </p>
+
+     * @return The id resource name.
+     */
+    public CharSequence getViewIdResourceName() {
+        return mViewIdResourceName;
+    }
+
+    /**
+     * Gets the text selection start.
+     *
+     * @return The text selection start if there is selection or -1.
+     */
+    public int getTextSelectionStart() {
+        return mTextSelectionStart;
+    }
+
+    /**
+     * Gets the text selection end.
+     *
+     * @return The text selection end if there is selection or -1.
+     */
+    public int getTextSelectionEnd() {
+        return mTextSelectionEnd;
+    }
+
+    /**
+     * Sets the text selection start and end.
+     * <p>
+     *   <strong>Note:</strong> Cannot be called from an
+     *   {@link android.accessibilityservice.AccessibilityService}.
+     *   This class is made immutable before being delivered to an AccessibilityService.
+     * </p>
+     *
+     * @param start The text selection start.
+     * @param end The text selection end.
+     *
+     * @throws IllegalStateException If called from an AccessibilityService.
+     */
+    public void setTextSelection(int start, int end) {
+        enforceNotSealed();
+        mTextSelectionStart = start;
+        mTextSelectionEnd = end;
+    }
+
+    /**
      * Gets the value of a boolean property.
      *
      * @param property The property.
@@ -1614,6 +1841,10 @@
         parcel.writeCharSequence(mClassName);
         parcel.writeCharSequence(mText);
         parcel.writeCharSequence(mContentDescription);
+        parcel.writeCharSequence(mViewIdResourceName);
+
+        parcel.writeInt(mTextSelectionStart);
+        parcel.writeInt(mTextSelectionEnd);
 
         // Since instances of this class are fetched via synchronous i.e. blocking
         // calls in IPCs we always recycle as soon as the instance is marshaled.
@@ -1639,6 +1870,7 @@
         mClassName = other.mClassName;
         mText = other.mText;
         mContentDescription = other.mContentDescription;
+        mViewIdResourceName = other.mViewIdResourceName;
         mActions= other.mActions;
         mBooleanProperties = other.mBooleanProperties;
         mMovementGranularities = other.mMovementGranularities;
@@ -1646,6 +1878,8 @@
         for (int i = 0; i < otherChildIdCount; i++) {
             mChildNodeIds.put(i, other.mChildNodeIds.valueAt(i));    
         }
+        mTextSelectionStart = other.mTextSelectionStart;
+        mTextSelectionEnd = other.mTextSelectionEnd;
     }
 
     /**
@@ -1689,6 +1923,10 @@
         mClassName = parcel.readCharSequence();
         mText = parcel.readCharSequence();
         mContentDescription = parcel.readCharSequence();
+        mViewIdResourceName = parcel.readCharSequence();
+
+        mTextSelectionStart = parcel.readInt();
+        mTextSelectionEnd = parcel.readInt();
     }
 
     /**
@@ -1711,7 +1949,10 @@
         mClassName = null;
         mText = null;
         mContentDescription = null;
+        mViewIdResourceName = null;
         mActions = 0;
+        mTextSelectionStart = UNDEFINED;
+        mTextSelectionEnd = UNDEFINED;
     }
 
     /**
@@ -1750,8 +1991,16 @@
                 return "ACTION_SCROLL_FORWARD";
             case ACTION_SCROLL_BACKWARD:
                 return "ACTION_SCROLL_BACKWARD";
+            case ACTION_CUT:
+                return "ACTION_CUT";
+            case ACTION_COPY:
+                return "ACTION_COPY";
+            case ACTION_PASTE:
+                return "ACTION_PASTE";
+            case ACTION_SET_SELECTION:
+                return "ACTION_SET_SELECTION";
             default:
-                throw new IllegalArgumentException("Unknown action: " + action);
+                return"ACTION_UNKNOWN";
         }
     }
 
@@ -1855,6 +2104,7 @@
         builder.append("; className: ").append(mClassName);
         builder.append("; text: ").append(mText);
         builder.append("; contentDescription: ").append(mContentDescription);
+        builder.append("; viewIdResName: ").append(mViewIdResourceName);
 
         builder.append("; checkable: ").append(isCheckable());
         builder.append("; checked: ").append(isChecked());
diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
index c313b07..8d15472 100644
--- a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
@@ -33,9 +33,9 @@
         IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
         long interrogatingTid, in MagnificationSpec spec);
 
-    void findAccessibilityNodeInfoByViewId(long accessibilityNodeId, int viewId, int interactionId,
-        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
-        long interrogatingTid, in MagnificationSpec spec);
+    void findAccessibilityNodeInfosByViewId(long accessibilityNodeId, String viewId,
+        int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
+        int interrogatingPid, long interrogatingTid, in MagnificationSpec spec);
 
     void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text, int interactionId,
         IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
diff --git a/core/java/android/view/inputmethod/InputMethodInfo.java b/core/java/android/view/inputmethod/InputMethodInfo.java
index 08e30aa..54c2ba5 100644
--- a/core/java/android/view/inputmethod/InputMethodInfo.java
+++ b/core/java/android/view/inputmethod/InputMethodInfo.java
@@ -81,6 +81,11 @@
     private boolean mIsAuxIme;
 
     /**
+     * Cavert: mForceDefault must be false for production. This flag is only for test.
+     */
+    private final boolean mForceDefault;
+
+    /**
      * Constructor.
      *
      * @param context The Context in which we are parsing the input method.
@@ -108,6 +113,7 @@
         ServiceInfo si = service.serviceInfo;
         mId = new ComponentName(si.packageName, si.name).flattenToShortString();
         mIsAuxIme = true;
+        mForceDefault = false;
 
         PackageManager pm = context.getPackageManager();
         String settingsActivityComponent = null;
@@ -215,13 +221,39 @@
         mIsAuxIme = source.readInt() == 1;
         mService = ResolveInfo.CREATOR.createFromParcel(source);
         source.readTypedList(mSubtypes, InputMethodSubtype.CREATOR);
+        mForceDefault = false;
     }
 
     /**
-     * Temporary API for creating a built-in input method.
+     * Temporary API for creating a built-in input method for test.
      */
     public InputMethodInfo(String packageName, String className,
             CharSequence label, String settingsActivity) {
+        this(buildDummyResolveInfo(packageName, className, label), false, settingsActivity, null,
+                0, false);
+    }
+
+    /**
+     * Temporary API for creating a built-in input method for test.
+     * @hide
+     */
+    public InputMethodInfo(ResolveInfo ri, boolean isAuxIme,
+            String settingsActivity, List<InputMethodSubtype> subtypes, int isDefaultResId,
+            boolean forceDefault) {
+        final ServiceInfo si = ri.serviceInfo;
+        mService = ri;
+        mId = new ComponentName(si.packageName, si.name).flattenToShortString();
+        mSettingsActivityName = settingsActivity;
+        mIsDefaultResId = isDefaultResId;
+        mIsAuxIme = isAuxIme;
+        if (subtypes != null) {
+            mSubtypes.addAll(subtypes);
+        }
+        mForceDefault = forceDefault;
+    }
+
+    private static ResolveInfo buildDummyResolveInfo(String packageName, String className,
+            CharSequence label) {
         ResolveInfo ri = new ResolveInfo();
         ServiceInfo si = new ServiceInfo();
         ApplicationInfo ai = new ApplicationInfo();
@@ -234,11 +266,7 @@
         si.exported = true;
         si.nonLocalizedLabel = label;
         ri.serviceInfo = si;
-        mService = ri;
-        mId = new ComponentName(si.packageName, si.name).flattenToShortString();
-        mSettingsActivityName = settingsActivity;
-        mIsDefaultResId = 0;
-        mIsAuxIme = false;
+        return ri;
     }
 
     /**
@@ -340,6 +368,22 @@
         return mIsDefaultResId;
     }
 
+    /**
+     * Return whether or not this ime is a default ime or not.
+     * @hide
+     */
+    public boolean isDefault(Context context) {
+        if (mForceDefault) {
+            return true;
+        }
+        try {
+            final Resources res = context.createPackageContext(getPackageName(), 0).getResources();
+            return res.getBoolean(getIsDefaultResourceId());
+        } catch (NameNotFoundException e) {
+            return false;
+        }
+    }
+
     public void dump(Printer pw, String prefix) {
         pw.println(prefix + "mId=" + mId
                 + " mSettingsActivityName=" + mSettingsActivityName);
diff --git a/core/java/android/webkit/AccessibilityInjector.java b/core/java/android/webkit/AccessibilityInjector.java
index 008a615..8008a6b 100644
--- a/core/java/android/webkit/AccessibilityInjector.java
+++ b/core/java/android/webkit/AccessibilityInjector.java
@@ -318,12 +318,15 @@
     /**
      * Attempts to handle selection change events when accessibility is using a
      * non-JavaScript method.
+     * <p>
+     * This must not be called from the main thread.
      *
-     * @param selectionString The selection string.
+     * @param selection The selection string.
+     * @param token The selection request token.
      */
-    public void handleSelectionChangedIfNecessary(String selectionString) {
+    public void onSelectionStringChangedWebCoreThread(String selection, int token) {
         if (mAccessibilityInjectorFallback != null) {
-            mAccessibilityInjectorFallback.onSelectionStringChange(selectionString);
+            mAccessibilityInjectorFallback.onSelectionStringChangedWebCoreThread(selection, token);
         }
     }
 
diff --git a/core/java/android/webkit/AccessibilityInjectorFallback.java b/core/java/android/webkit/AccessibilityInjectorFallback.java
index 783b3db..6417527 100644
--- a/core/java/android/webkit/AccessibilityInjectorFallback.java
+++ b/core/java/android/webkit/AccessibilityInjectorFallback.java
@@ -27,8 +27,9 @@
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.webkit.WebViewCore.EventHub;
 
+import com.android.internal.os.SomeArgs;
+
 import java.util.ArrayList;
-import java.util.Stack;
 
 /**
  * This class injects accessibility into WebViews with disabled JavaScript or
@@ -48,8 +49,7 @@
  * </p>
  * The possible actions are invocations to
  * {@link #setCurrentAxis(int, boolean, String)}, or
- * {@link #traverseCurrentAxis(int, boolean, String)}
- * {@link #traverseGivenAxis(int, int, boolean, String)}
+ * {@link #traverseGivenAxis(int, int, boolean, String, boolean)}
  * {@link #performAxisTransition(int, int, boolean, String)}
  * referred via the values of:
  * {@link #ACTION_SET_CURRENT_AXIS},
@@ -74,6 +74,9 @@
     private static final int ACTION_PERFORM_AXIS_TRANSITION = 3;
     private static final int ACTION_TRAVERSE_DEFAULT_WEB_VIEW_BEHAVIOR_AXIS = 4;
 
+    /** Timeout after which asynchronous granular movement is aborted. */
+    private static final int MODIFY_SELECTION_TIMEOUT = 500;
+
     // WebView navigation axes from WebViewCore.h, plus an additional axis for
     // the default behavior.
     private static final int NAVIGATION_AXIS_CHARACTER = 0;
@@ -81,7 +84,8 @@
     private static final int NAVIGATION_AXIS_SENTENCE = 2;
     @SuppressWarnings("unused")
     private static final int NAVIGATION_AXIS_HEADING = 3;
-    private static final int NAVIGATION_AXIS_SIBLING = 5;
+    @SuppressWarnings("unused")
+    private static final int NAVIGATION_AXIS_SIBLING = 4;
     @SuppressWarnings("unused")
     private static final int NAVIGATION_AXIS_PARENT_FIRST_CHILD = 5;
     private static final int NAVIGATION_AXIS_DOCUMENT = 6;
@@ -99,8 +103,11 @@
     private final WebViewClassic mWebView;
     private final WebView mWebViewInternal;
 
-    // events scheduled for sending as soon as we receive the selected text
-    private final Stack<AccessibilityEvent> mScheduledEventStack = new Stack<AccessibilityEvent>();
+    // Event scheduled for sending as soon as we receive the selected text.
+    private AccessibilityEvent mScheduledEvent;
+
+    // Token required to send the scheduled event.
+    private int mScheduledToken = 0;
 
     // the current traversal axis
     private int mCurrentAxis = 2; // sentence
@@ -114,6 +121,15 @@
     // keep track of last direction
     private int mLastDirection;
 
+    // Lock used for asynchronous selection callback.
+    private final Object mCallbackLock = new Object();
+
+    // Whether the asynchronous selection callback was received.
+    private boolean mCallbackReceived;
+
+    // Whether the asynchronous selection callback succeeded.
+    private boolean mCallbackResult;
+
     /**
      * Creates a new injector associated with a given {@link WebViewClassic}.
      *
@@ -174,8 +190,8 @@
                     }
                     mLastDirection = direction;
                     sendEvent = (binding.getSecondArgument(i) == 1);
-                    mLastDownEventHandled = traverseCurrentAxis(direction, sendEvent,
-                            contentDescription);
+                    mLastDownEventHandled = traverseGivenAxis(
+                            direction, mCurrentAxis, sendEvent, contentDescription, false);
                     break;
                 case ACTION_TRAVERSE_GIVEN_AXIS:
                     direction = binding.getFirstArgument(i);
@@ -187,7 +203,7 @@
                     mLastDirection = direction;
                     axis =  binding.getSecondArgument(i);
                     sendEvent = (binding.getThirdArgument(i) == 1);
-                    traverseGivenAxis(direction, axis, sendEvent, contentDescription);
+                    traverseGivenAxis(direction, axis, sendEvent, contentDescription, false);
                     mLastDownEventHandled = true;
                     break;
                 case ACTION_PERFORM_AXIS_TRANSITION:
@@ -207,7 +223,7 @@
                         mLastDirection = binding.getFirstArgument(i);
                         sendEvent = (binding.getSecondArgument(i) == 1);
                         traverseGivenAxis(mLastDirection, NAVIGATION_AXIS_DEFAULT_WEB_VIEW_BEHAVIOR,
-                            sendEvent, contentDescription);
+                            sendEvent, contentDescription, false);
                         mLastDownEventHandled = false;
                     } else {
                         mLastDownEventHandled = true;
@@ -222,8 +238,7 @@
     }
 
     /**
-     * Set the current navigation axis which will be used while
-     * calling {@link #traverseCurrentAxis(int, boolean, String)}.
+     * Set the current navigation axis.
      *
      * @param axis The axis to set.
      * @param sendEvent Whether to send an accessibility event to
@@ -255,20 +270,6 @@
         }
     }
 
-    /**
-     * Traverse the document along the current navigation axis.
-     *
-     * @param direction The direction of traversal.
-     * @param sendEvent Whether to send an accessibility event to
-     *        announce the change.
-     * @param contentDescription A description of the performed action.
-     * @see #setCurrentAxis(int, boolean, String)
-     */
-    private boolean traverseCurrentAxis(int direction, boolean sendEvent,
-            String contentDescription) {
-        return traverseGivenAxis(direction, mCurrentAxis, sendEvent, contentDescription);
-    }
-    
     boolean performAccessibilityAction(int action, Bundle arguments) {
         switch (action) {
             case AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY:
@@ -276,14 +277,14 @@
                 final int direction = getDirectionForAction(action);
                 final int axis = getAxisForGranularity(arguments.getInt(
                         AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT));
-                return traverseGivenAxis(direction, axis, true, null);
+                return traverseGivenAxis(direction, axis, true, null, true);
             }
             case AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT:
             case AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT: {
                 final int direction = getDirectionForAction(action);
                 // TODO: Add support for moving by object.
                 final int axis = NAVIGATION_AXIS_SENTENCE;
-                return traverseGivenAxis(direction, axis, true, null);
+                return traverseGivenAxis(direction, axis, true, null, true);
             }
             default:
                 return false;
@@ -293,7 +294,7 @@
     /**
      * Returns the {@link WebView}-defined direction for the given
      * {@link AccessibilityNodeInfo}-defined action.
-     * 
+     *
      * @param action An accessibility action identifier.
      * @return A web view navigation direction.
      */
@@ -313,7 +314,7 @@
     /**
      * Returns the {@link WebView}-defined axis for the given
      * {@link AccessibilityNodeInfo}-defined granularity.
-     * 
+     *
      * @param granularity An accessibility granularity identifier.
      * @return A web view navigation axis.
      */
@@ -345,20 +346,20 @@
      * @param contentDescription A description of the performed action.
      */
     private boolean traverseGivenAxis(int direction, int axis, boolean sendEvent,
-            String contentDescription) {
-        WebViewCore webViewCore = mWebView.getWebViewCore();
+            String contentDescription, boolean sychronous) {
+        final WebViewCore webViewCore = mWebView.getWebViewCore();
         if (webViewCore == null) {
             return false;
         }
 
-        AccessibilityEvent event = null;
         if (sendEvent) {
-            event = getPartialyPopulatedAccessibilityEvent(
+            final AccessibilityEvent event = getPartialyPopulatedAccessibilityEvent(
                     AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-            // the text will be set upon receiving the selection string
+            // The text will be set upon receiving the selection string.
             event.setContentDescription(contentDescription);
+            mScheduledEvent = event;
+            mScheduledToken++;
         }
-        mScheduledEventStack.push(event);
 
         // if the axis is the default let WebView handle the event which will
         // result in cursor ring movement and selection of its content
@@ -366,27 +367,78 @@
             return false;
         }
 
-        webViewCore.sendMessage(EventHub.MODIFY_SELECTION, direction, axis);
-        return true;
+        final SomeArgs args = SomeArgs.obtain();
+        args.argi1 = direction;
+        args.argi2 = axis;
+        args.argi3 = mScheduledToken;
+
+        // If we don't need synchronous results, just return true.
+        if (!sychronous) {
+            webViewCore.sendMessage(EventHub.MODIFY_SELECTION, args);
+            return true;
+        }
+
+        final boolean callbackResult;
+
+        synchronized (mCallbackLock) {
+            mCallbackReceived = false;
+
+            // Asynchronously changes the selection in WebView, which responds by
+            // calling onSelectionStringChanged().
+            webViewCore.sendMessage(EventHub.MODIFY_SELECTION, args);
+
+            try {
+                mCallbackLock.wait(MODIFY_SELECTION_TIMEOUT);
+            } catch (InterruptedException e) {
+                // Do nothing.
+            }
+
+            callbackResult = mCallbackResult;
+        }
+
+        return (mCallbackReceived && callbackResult);
     }
 
-    /**
-     * Called when the <code>selectionString</code> has changed.
-     */
-    public void onSelectionStringChange(String selectionString) {
-        if (DEBUG) {
-            Log.d(LOG_TAG, "Selection string: " + selectionString);
+    /* package */ void onSelectionStringChangedWebCoreThread(
+            final String selection, final int token) {
+        synchronized (mCallbackLock) {
+            mCallbackReceived = true;
+            mCallbackResult = (selection != null);
+            mCallbackLock.notifyAll();
         }
-        mIsLastSelectionStringNull = (selectionString == null);
-        if (mScheduledEventStack.isEmpty()) {
+
+        // Managing state and sending events must take place on the UI thread.
+        mWebViewInternal.post(new Runnable() {
+            @Override
+            public void run() {
+                onSelectionStringChangedMainThread(selection, token);
+            }
+        });
+    }
+
+    private void onSelectionStringChangedMainThread(String selection, int token) {
+        if (DEBUG) {
+            Log.d(LOG_TAG, "Selection string: " + selection);
+        }
+
+        if (token != mScheduledToken) {
+            if (DEBUG) {
+                Log.d(LOG_TAG, "Selection string has incorrect token: " + token);
+            }
             return;
         }
-        AccessibilityEvent event = mScheduledEventStack.pop();
-        if ((event != null) && (selectionString != null)) {
-            event.getText().add(selectionString);
+
+        mIsLastSelectionStringNull = (selection == null);
+
+        final AccessibilityEvent event = mScheduledEvent;
+        mScheduledEvent = null;
+
+        if ((event != null) && (selection != null)) {
+            event.getText().add(selection);
             event.setFromIndex(0);
-            event.setToIndex(selectionString.length());
+            event.setToIndex(selection.length());
             sendAccessibilityEvent(event);
+            event.recycle();
         }
     }
 
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 6fb8bdf..0b7e92f 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -56,8 +56,8 @@
 import java.util.Set;
 
 import org.apache.harmony.security.provider.cert.X509CertImpl;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder;
 
 class BrowserFrame extends Handler {
 
@@ -1127,13 +1127,10 @@
         if (table.IsAllowed(hostAndPort)) {
             // previously allowed
             PrivateKey pkey = table.PrivateKey(hostAndPort);
-            if (pkey instanceof OpenSSLRSAPrivateKey) {
+            if (pkey instanceof OpenSSLKeyHolder) {
+                OpenSSLKey sslKey = ((OpenSSLKeyHolder) pkey).getOpenSSLKey();
                 nativeSslClientCert(handle,
-                                    ((OpenSSLRSAPrivateKey)pkey).getPkeyContext(),
-                                    table.CertificateChain(hostAndPort));
-            } else if (pkey instanceof OpenSSLDSAPrivateKey) {
-                nativeSslClientCert(handle,
-                                    ((OpenSSLDSAPrivateKey)pkey).getPkeyContext(),
+                                    sslKey.getPkeyContext(),
                                     table.CertificateChain(hostAndPort));
             } else {
                 nativeSslClientCert(handle,
diff --git a/core/java/android/webkit/ClientCertRequestHandler.java b/core/java/android/webkit/ClientCertRequestHandler.java
index 6570a9b8..dac1510 100644
--- a/core/java/android/webkit/ClientCertRequestHandler.java
+++ b/core/java/android/webkit/ClientCertRequestHandler.java
@@ -21,8 +21,8 @@
 import java.security.cert.CertificateEncodingException;
 import java.security.cert.X509Certificate;
 import org.apache.harmony.xnet.provider.jsse.NativeCrypto;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder;
 
 /**
  * ClientCertRequestHandler: class responsible for handling client
@@ -56,14 +56,11 @@
             byte[][] chainBytes = NativeCrypto.encodeCertificates(chain);
             mTable.Allow(mHostAndPort, privateKey, chainBytes);
 
-            if (privateKey instanceof OpenSSLRSAPrivateKey) {
-                setSslClientCertFromCtx(((OpenSSLRSAPrivateKey)privateKey).getPkeyContext(),
-                           chainBytes);
-            } else if (privateKey instanceof OpenSSLDSAPrivateKey) {
-                setSslClientCertFromCtx(((OpenSSLDSAPrivateKey)privateKey).getPkeyContext(),
-                           chainBytes);
+            if (privateKey instanceof OpenSSLKeyHolder) {
+                OpenSSLKey pkey = ((OpenSSLKeyHolder) privateKey).getOpenSSLKey();
+                setSslClientCertFromCtx(pkey.getPkeyContext(), chainBytes);
             } else {
-                setSslClientCertFromPKCS8(privateKey.getEncoded(),chainBytes);
+                setSslClientCertFromPKCS8(privateKey.getEncoded(), chainBytes);
             }
         } catch (CertificateEncodingException e) {
             post(new Runnable() {
diff --git a/core/java/android/webkit/FindActionModeCallback.java b/core/java/android/webkit/FindActionModeCallback.java
index d7a0b60..c68b450 100644
--- a/core/java/android/webkit/FindActionModeCallback.java
+++ b/core/java/android/webkit/FindActionModeCallback.java
@@ -163,7 +163,7 @@
             mActiveMatchIndex = matchIndex;
             updateMatchesString();
         } else {
-            mMatches.setVisibility(View.INVISIBLE);
+            mMatches.setVisibility(View.GONE);
             mNumberOfMatches = 0;
         }
     }
diff --git a/core/java/android/webkit/SslErrorHandler.java b/core/java/android/webkit/SslErrorHandler.java
index 3a43950..af31544 100644
--- a/core/java/android/webkit/SslErrorHandler.java
+++ b/core/java/android/webkit/SslErrorHandler.java
@@ -19,9 +19,11 @@
 import android.os.Handler;
 
 /**
- * SslErrorHandler: class responsible for handling SSL errors.
- * This class is passed as a parameter to BrowserCallback.displaySslErrorDialog
- * and is meant to receive the user's response.
+ * Represents a request for handling an SSL error. Instances of this class are
+ * created by the WebView and passed to
+ * {@link WebViewClient#onReceivedSslError}. The host application must call
+ * either {@link #proceed} or {@link #cancel} to set the WebView's response
+ * to the request.
  */
 public class SslErrorHandler extends Handler {
 
diff --git a/core/java/android/webkit/ViewStateSerializer.java b/core/java/android/webkit/ViewStateSerializer.java
index 096d4cda..1d44b96 100644
--- a/core/java/android/webkit/ViewStateSerializer.java
+++ b/core/java/android/webkit/ViewStateSerializer.java
@@ -31,7 +31,8 @@
 
     private static final int WORKING_STREAM_STORAGE = 16 * 1024;
 
-    static final int VERSION = 1;
+    // VERSION = 1 was for pictures encoded using a previous copy of libskia
+    static final int VERSION = 2;
 
     static boolean serializeViewState(OutputStream stream, DrawData draw)
             throws IOException {
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 5412400..d0bfbe8 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1957,9 +1957,8 @@
     @Override
     public void setOverScrollMode(int mode) {
         super.setOverScrollMode(mode);
-        // This method may called in the constructor chain, before the WebView provider is
-        // created. (Fortunately, this is the only method we override that can get called by
-        // any of the base class constructors).
+        // This method may be called in the constructor chain, before the WebView provider is
+        // created.
         ensureProviderCreated();
         mProvider.getViewDelegate().setOverScrollMode(mode);
     }
@@ -2119,6 +2118,9 @@
     @Override
     protected void onVisibilityChanged(View changedView, int visibility) {
         super.onVisibilityChanged(changedView, visibility);
+        // This method may be called in the constructor chain, before the WebView provider is
+        // created.
+        ensureProviderCreated();
         mProvider.getViewDelegate().onVisibilityChanged(changedView, visibility);
     }
 
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index a867d39..a4347a4 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -1024,30 +1024,26 @@
     static final int UPDATE_MATCH_COUNT                 = 126;
     static final int CENTER_FIT_RECT                    = 127;
     static final int SET_SCROLLBAR_MODES                = 129;
-    static final int SELECTION_STRING_CHANGED           = 130;
-    static final int HIT_TEST_RESULT                    = 131;
-    static final int SAVE_WEBARCHIVE_FINISHED           = 132;
-
-    static final int SET_AUTOFILLABLE                   = 133;
-    static final int AUTOFILL_COMPLETE                  = 134;
-
-    static final int SCREEN_ON                          = 136;
-    static final int UPDATE_ZOOM_DENSITY                = 139;
-    static final int EXIT_FULLSCREEN_VIDEO              = 140;
-
-    static final int COPY_TO_CLIPBOARD                  = 141;
-    static final int INIT_EDIT_FIELD                    = 142;
-    static final int REPLACE_TEXT                       = 143;
-    static final int CLEAR_CARET_HANDLE                 = 144;
-    static final int KEY_PRESS                          = 145;
-    static final int RELOCATE_AUTO_COMPLETE_POPUP       = 146;
-    static final int FOCUS_NODE_CHANGED                 = 147;
-    static final int AUTOFILL_FORM                      = 148;
-    static final int SCROLL_EDIT_TEXT                   = 149;
-    static final int EDIT_TEXT_SIZE_CHANGED             = 150;
-    static final int SHOW_CARET_HANDLE                  = 151;
-    static final int UPDATE_CONTENT_BOUNDS              = 152;
-    static final int SCROLL_HANDLE_INTO_VIEW            = 153;
+    static final int HIT_TEST_RESULT                    = 130;
+    static final int SAVE_WEBARCHIVE_FINISHED           = 131;
+    static final int SET_AUTOFILLABLE                   = 132;
+    static final int AUTOFILL_COMPLETE                  = 133;
+    static final int SCREEN_ON                          = 134;
+    static final int UPDATE_ZOOM_DENSITY                = 135;
+    static final int EXIT_FULLSCREEN_VIDEO              = 136;
+    static final int COPY_TO_CLIPBOARD                  = 137;
+    static final int INIT_EDIT_FIELD                    = 138;
+    static final int REPLACE_TEXT                       = 139;
+    static final int CLEAR_CARET_HANDLE                 = 140;
+    static final int KEY_PRESS                          = 141;
+    static final int RELOCATE_AUTO_COMPLETE_POPUP       = 142;
+    static final int FOCUS_NODE_CHANGED                 = 143;
+    static final int AUTOFILL_FORM                      = 144;
+    static final int SCROLL_EDIT_TEXT                   = 145;
+    static final int EDIT_TEXT_SIZE_CHANGED             = 146;
+    static final int SHOW_CARET_HANDLE                  = 147;
+    static final int UPDATE_CONTENT_BOUNDS              = 148;
+    static final int SCROLL_HANDLE_INTO_VIEW            = 149;
 
     private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID;
     private static final int LAST_PACKAGE_MSG_ID = HIT_TEST_RESULT;
@@ -1766,6 +1762,12 @@
         event.setMaxScrollY(Math.max(convertedContentHeight - adjustedViewHeight, 0));
     }
 
+    /* package */ void handleSelectionChangedWebCoreThread(String selection, int token) {
+        if (isAccessibilityInjectionEnabled()) {
+            getAccessibilityInjector().onSelectionStringChangedWebCoreThread(selection, token);
+        }
+    }
+
     private boolean isAccessibilityInjectionEnabled() {
         final AccessibilityManager manager = AccessibilityManager.getInstance(mContext);
         if (!manager.isEnabled()) {
@@ -7496,13 +7498,6 @@
                     mVerticalScrollBarMode = msg.arg2;
                     break;
 
-                case SELECTION_STRING_CHANGED:
-                    if (isAccessibilityInjectionEnabled()) {
-                        getAccessibilityInjector()
-                                .handleSelectionChangedIfNecessary((String) msg.obj);
-                    }
-                    break;
-
                 case FOCUS_NODE_CHANGED:
                     mIsEditingText = (msg.arg1 == mFieldPointer);
                     if (mAutoCompletePopup != null && !mIsEditingText) {
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index ccb84e6..4a09636 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -41,6 +41,8 @@
 import android.webkit.WebViewClassic.FocusNodeHref;
 import android.webkit.WebViewInputDispatcher.WebKitCallbacks;
 
+import com.android.internal.os.SomeArgs;
+
 import junit.framework.Assert;
 
 import java.io.OutputStream;
@@ -1545,12 +1547,14 @@
                         case MODIFY_SELECTION:
                             mTextSelectionChangeReason
                                     = TextSelectionData.REASON_ACCESSIBILITY_INJECTOR;
-                            String modifiedSelectionString =
-                                nativeModifySelection(mNativeClass, msg.arg1,
-                                        msg.arg2);
-                            mWebViewClassic.mPrivateHandler.obtainMessage(
-                                    WebViewClassic.SELECTION_STRING_CHANGED,
-                                    modifiedSelectionString).sendToTarget();
+                            final SomeArgs args = (SomeArgs) msg.obj;
+                            final String modifiedSelectionString = nativeModifySelection(
+                                    mNativeClass, args.argi1, args.argi2);
+                            // If accessibility is on, the main thread may be
+                            // waiting for a response. Send on webcore thread.
+                            mWebViewClassic.handleSelectionChangedWebCoreThread(
+                                    modifiedSelectionString, args.argi3);
+                            args.recycle();
                             mTextSelectionChangeReason
                                     = TextSelectionData.REASON_UNKNOWN;
                             break;
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 57bf0d3..396fd68 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -1374,9 +1374,11 @@
         if (isEnabled()) {
             if (getFirstVisiblePosition() > 0) {
                 info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
+                info.setScrollable(true);
             }
             if (getLastVisiblePosition() < getCount() - 1) {
                 info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
+                info.setScrollable(true);
             }
         }
     }
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index 3b5e75b..7674837 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -305,7 +305,7 @@
         }
         
         // Canvas will be translated, so 0,0 is where we start drawing
-        final int left = isLayoutRtl() ? available - thumbPos : thumbPos;
+        final int left = (isLayoutRtl() && mMirrorForRtl) ? available - thumbPos : thumbPos;
         thumb.setBounds(left, topBound, left + thumbWidth, bottomBound);
     }
 
@@ -426,7 +426,7 @@
         int x = (int)event.getX();
         float scale;
         float progress = 0;
-        if (isLayoutRtl()) {
+        if (isLayoutRtl() && mMirrorForRtl) {
             if (x > width - mPaddingRight) {
                 scale = 0.0f;
             } else if (x < mPaddingLeft) {
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 4eaa78a..c270e9d 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -2694,23 +2694,14 @@
             TypedArray styledAttributes = mTextView.getContext().obtainStyledAttributes(
                     com.android.internal.R.styleable.SelectionModeDrawables);
 
-            boolean allowText = mTextView.getContext().getResources().getBoolean(
-                    com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
-
             mode.setTitle(mTextView.getContext().getString(
                     com.android.internal.R.string.textSelectionCABTitle));
             mode.setSubtitle(null);
             mode.setTitleOptionalHint(true);
 
-            int selectAllIconId = 0; // No icon by default
-            if (!allowText) {
-                // Provide an icon, text will not be displayed on smaller screens.
-                selectAllIconId = styledAttributes.getResourceId(
-                        R.styleable.SelectionModeDrawables_actionModeSelectAllDrawable, 0);
-            }
-
             menu.add(0, TextView.ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll).
-                    setIcon(selectAllIconId).
+                    setIcon(styledAttributes.getResourceId(
+                            R.styleable.SelectionModeDrawables_actionModeSelectAllDrawable, 0)).
                     setAlphabeticShortcut('a').
                     setShowAsAction(
                             MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 8c710ce..1bbf4eb 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -562,13 +562,14 @@
 
     /** Return the view's optional matrix. This is applied to the
         view's drawable when it is drawn. If there is not matrix,
-        this method will return null.
-        Do not change this matrix in place. If you want a different matrix
-        applied to the drawable, be sure to call setImageMatrix().
+        this method will return an identity matrix.
+        Do not change this matrix in place but make a copy.
+        If you want a different matrix applied to the drawable,
+        be sure to call setImageMatrix().
     */
     public Matrix getImageMatrix() {
         if (mDrawMatrix == null) {
-            return Matrix.IDENTITY_MATRIX;
+            return new Matrix(Matrix.IDENTITY_MATRIX);
         }
         return mDrawMatrix;
     }
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index 74ded18..2ac5a12 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -1969,8 +1969,10 @@
                  * Ensure the user can't type in a value greater than the max
                  * allowed. We have to allow less than min as the user might
                  * want to delete some numbers and then type a new number.
+                 * And prevent multiple-"0" that exceeds the length of upper
+                 * bound number.
                  */
-                if (val > mMaxValue) {
+                if (val > mMaxValue || result.length() > String.valueOf(mMaxValue).length()) {
                     return "";
                 } else {
                     return filtered;
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index f2d2c65..d816200 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -223,6 +223,8 @@
     private boolean mAttached;
     private boolean mRefreshIsPosted;
 
+    boolean mMirrorForRtl = false;
+
     private final ArrayList<RefreshData> mRefreshData = new ArrayList<RefreshData>();
 
     private AccessibilityEventSender mAccessibilityEventSender;
@@ -302,6 +304,8 @@
         setIndeterminate(mOnlyIndeterminate || a.getBoolean(
                 R.styleable.ProgressBar_indeterminate, mIndeterminate));
 
+        mMirrorForRtl = a.getBoolean(R.styleable.ProgressBar_mirrorForRtl, mMirrorForRtl);
+
         a.recycle();
     }
 
@@ -1004,7 +1008,7 @@
                     }
                 }
             }
-            if (isLayoutRtl()) {
+            if (isLayoutRtl() && mMirrorForRtl) {
                 int tempLeft = left;
                 left = w - right;
                 right = w - tempLeft;
@@ -1026,7 +1030,7 @@
             // Translate canvas so a indeterminate circular progress bar with padding
             // rotates properly in its animation
             canvas.save();
-            if(isLayoutRtl()) {
+            if(isLayoutRtl() && mMirrorForRtl) {
                 canvas.translate(getWidth() - mPaddingRight, mPaddingTop);
                 canvas.scale(-1.0f, 1.0f);
             } else {
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index e749e63..dbeb26d 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -37,6 +37,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.WindowManager;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.RemoteViews.RemoteView;
@@ -220,10 +221,13 @@
     // Some apps came to rely on them. :(
     private boolean mAllowBrokenMeasureSpecs = false;
 
+    private int mDisplayWidth;
+
     public RelativeLayout(Context context) {
         super(context);
         mAllowBrokenMeasureSpecs = context.getApplicationInfo().targetSdkVersion <=
                 Build.VERSION_CODES.JELLY_BEAN_MR1;
+        getDisplayWidth();
     }
 
     public RelativeLayout(Context context, AttributeSet attrs) {
@@ -231,6 +235,7 @@
         initFromAttributes(context, attrs);
         mAllowBrokenMeasureSpecs = context.getApplicationInfo().targetSdkVersion <=
                 Build.VERSION_CODES.JELLY_BEAN_MR1;
+        getDisplayWidth();
     }
 
     public RelativeLayout(Context context, AttributeSet attrs, int defStyle) {
@@ -238,6 +243,7 @@
         initFromAttributes(context, attrs);
         mAllowBrokenMeasureSpecs = context.getApplicationInfo().targetSdkVersion <=
                 Build.VERSION_CODES.JELLY_BEAN_MR1;
+        getDisplayWidth();
     }
 
     private void initFromAttributes(Context context, AttributeSet attrs) {
@@ -247,6 +253,11 @@
         a.recycle();
     }
 
+    private void getDisplayWidth() {
+        WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
+        mDisplayWidth = wm.getDefaultDisplay().getWidth();
+    }
+
     @Override
     public boolean shouldDelayChildPressedState() {
         return false;
@@ -438,51 +449,28 @@
         final boolean isWrapContentWidth = widthMode != MeasureSpec.EXACTLY;
         final boolean isWrapContentHeight = heightMode != MeasureSpec.EXACTLY;
 
+        // We need to know our size for doing the correct computation of children positioning in RTL
+        // mode but there is no practical way to get it instead of running the code below.
+        // So, instead of running the code twice, we just set the width to the "display width"
+        // before the computation and then, as a last pass, we will update their real position with
+        // an offset equals to "displayWidth - width".
+        final int layoutDirection = getLayoutDirection();
+        if (isLayoutRtl() && myWidth == -1) {
+            myWidth = mDisplayWidth;
+        }
+
         View[] views = mSortedHorizontalChildren;
         int count = views.length;
 
-        // We need to know our size for doing the correct computation of positioning in RTL mode
-        if (isLayoutRtl() && (myWidth == -1 || isWrapContentWidth)) {
-            int w = getPaddingStart() + getPaddingEnd();
-            final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-            for (int i = 0; i < count; i++) {
-                View child = views[i];
-                if (child.getVisibility() != GONE) {
-                    LayoutParams params = (LayoutParams) child.getLayoutParams();
-                    // Would be similar to a call to measureChildHorizontal(child, params, -1, myHeight)
-                    // but we cannot change for now the behavior of measureChildHorizontal() for
-                    // taking care or a "-1" for "mywidth" so use here our own version of that code.
-                    int childHeightMeasureSpec;
-                    if (params.width == LayoutParams.MATCH_PARENT) {
-                        childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(myHeight, MeasureSpec.EXACTLY);
-                    } else {
-                        childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(myHeight, MeasureSpec.AT_MOST);
-                    }
-                    child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
-
-                    w += child.getMeasuredWidth();
-                    w += params.leftMargin + params.rightMargin;
-                }
-            }
-            if (myWidth == -1) {
-                // Easy case: "myWidth" was undefined before so use the width we have just computed
-                myWidth = w;
-            } else {
-                // "myWidth" was defined before, so take the min of it and the computed width if it
-                // is a non null one
-                if (w > 0) {
-                    myWidth = Math.min(myWidth, w);
-                }
-            }
-        }
-
         for (int i = 0; i < count; i++) {
             View child = views[i];
             if (child.getVisibility() != GONE) {
                 LayoutParams params = (LayoutParams) child.getLayoutParams();
+                int[] rules = params.getRules(layoutDirection);
 
-                applyHorizontalSizeRules(params, myWidth);
+                applyHorizontalSizeRules(params, myWidth, rules);
                 measureChildHorizontal(child, params, myWidth, myHeight);
+
                 if (positionChildHorizontal(child, params, myWidth, isWrapContentWidth)) {
                     offsetHorizontalAxis = true;
                 }
@@ -504,7 +492,11 @@
                 }
 
                 if (isWrapContentWidth) {
-                    width = Math.max(width, params.mRight);
+                    if (isLayoutRtl()) {
+                        width = Math.max(width, myWidth - params.mLeft);
+                    } else {
+                        width = Math.max(width, params.mRight);
+                    }
                 }
 
                 if (isWrapContentHeight) {
@@ -543,8 +535,6 @@
             }
         }
 
-        final int layoutDirection = getLayoutDirection();
-
         if (isWrapContentWidth) {
             // Width already has left padding in it since it was calculated by looking at
             // the right of each child view
@@ -634,6 +624,19 @@
             }
         }
 
+        if (isLayoutRtl()) {
+            final int offsetWidth = myWidth - width;
+            for (int i = 0; i < count; i++) {
+                View child = getChildAt(i);
+                if (child.getVisibility() != GONE) {
+                    LayoutParams params = (LayoutParams) child.getLayoutParams();
+                    params.mLeft -= offsetWidth;
+                    params.mRight -= offsetWidth;
+                }
+            }
+
+        }
+
         setMeasuredDimension(width, height);
     }
 
@@ -862,9 +865,7 @@
         return rules[ALIGN_PARENT_BOTTOM] != 0;
     }
 
-    private void applyHorizontalSizeRules(LayoutParams childParams, int myWidth) {
-        final int layoutDirection = getLayoutDirection();
-        int[] rules = childParams.getRules(layoutDirection);
+    private void applyHorizontalSizeRules(LayoutParams childParams, int myWidth, int[] rules) {
         RelativeLayout.LayoutParams anchorParams;
 
         // -1 indicated a "soft requirement" in that direction. For example:
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index f8db622..2145419 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -7165,6 +7165,7 @@
      */
     protected void onSelectionChanged(int selStart, int selEnd) {
         sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED);
+        notifyAccessibilityStateChanged();
     }
 
     /**
@@ -7976,6 +7977,10 @@
             info.setText(getTextForAccessibility());
         }
 
+        if (mBufferType == BufferType.EDITABLE) {
+            info.setEditable(true);
+        }
+
         if (TextUtils.isEmpty(getContentDescription()) && !TextUtils.isEmpty(mText)) {
             info.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
             info.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
@@ -7985,6 +7990,82 @@
                     | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PARAGRAPH
                     | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PAGE);
         }
+        if (isFocused()) {
+            if (canSelectText()) {
+                info.addAction(AccessibilityNodeInfo.ACTION_SET_SELECTION);
+            }
+            if (canCopy()) {
+                info.addAction(AccessibilityNodeInfo.ACTION_COPY);
+            }
+            if (canPaste()) {
+                info.addAction(AccessibilityNodeInfo.ACTION_PASTE);
+            }
+            if (canCut()) {
+                info.addAction(AccessibilityNodeInfo.ACTION_CUT);
+            }
+        }
+    }
+
+    @Override
+    public boolean performAccessibilityAction(int action, Bundle arguments) {
+        switch (action) {
+            case AccessibilityNodeInfo.ACTION_COPY: {
+                if (isFocused() && canCopy()) {
+                    if (onTextContextMenuItem(ID_COPY)) {
+                        notifyAccessibilityStateChanged();
+                        return true;
+                    }
+                }
+            } return false;
+            case AccessibilityNodeInfo.ACTION_PASTE: {
+                if (isFocused() && canPaste()) {
+                    if (onTextContextMenuItem(ID_PASTE)) {
+                        notifyAccessibilityStateChanged();
+                        return true;
+                    }
+                }
+            } return false;
+            case AccessibilityNodeInfo.ACTION_CUT: {
+                if (isFocused() && canCut()) {
+                    if (onTextContextMenuItem(ID_CUT)) {
+                        notifyAccessibilityStateChanged();
+                        return true;
+                    }
+                }
+            } return false;
+            case AccessibilityNodeInfo.ACTION_SET_SELECTION: {
+                if (isFocused() && canSelectText()) {
+                    CharSequence text = getIterableTextForAccessibility();
+                    if (text == null) {
+                        return false;
+                    }
+                    final int start = (arguments != null) ? arguments.getInt(
+                            AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT, -1) : -1;
+                    final int end = (arguments != null) ? arguments.getInt(
+                            AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT, -1) : -1;
+                    if ((getSelectionStart() != start || getSelectionEnd() != end)) {
+                        // No arguments clears the selection.
+                        if (start == end && end == -1) {
+                            Selection.removeSelection((Spannable) text);
+                            notifyAccessibilityStateChanged();
+                            return true;
+                        }
+                        if (start >= 0 && start <= end && end <= text.length()) {
+                            Selection.setSelection((Spannable) text, start, end);
+                            // Make sure selection mode is engaged.
+                            if (mEditor != null) {
+                                mEditor.startSelectionActionMode();
+                            }
+                            notifyAccessibilityStateChanged();
+                            return true;
+                        }
+                    }
+                }
+            } return false;
+            default: {
+                return super.performAccessibilityAction(action, arguments);
+            }
+        }
     }
 
     @Override
@@ -8554,32 +8635,51 @@
      * @hide
      */
     @Override
-    public int getAccessibilityCursorPosition() {
+    public int getAccessibilitySelectionStart() {
         if (TextUtils.isEmpty(getContentDescription())) {
-            final int selectionEnd = getSelectionEnd();
-            if (selectionEnd >= 0) {
-                return selectionEnd;
+            final int selectionStart = getSelectionStart();
+            if (selectionStart >= 0) {
+                return selectionStart;
             }
         }
-        return super.getAccessibilityCursorPosition();
+        return ACCESSIBILITY_CURSOR_POSITION_UNDEFINED;
+    }
+
+    /**
+     * @hide
+     */
+    public boolean isAccessibilitySelectionExtendable() {
+        return true;
     }
 
     /**
      * @hide
      */
     @Override
-    public void setAccessibilityCursorPosition(int index) {
-        if (getAccessibilityCursorPosition() == index) {
+    public int getAccessibilitySelectionEnd() {
+        if (TextUtils.isEmpty(getContentDescription())) {
+            final int selectionEnd = getSelectionEnd();
+            if (selectionEnd >= 0) {
+                return selectionEnd;
+            }
+        }
+        return ACCESSIBILITY_CURSOR_POSITION_UNDEFINED;
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void setAccessibilitySelection(int start, int end) {
+        if (getAccessibilitySelectionStart() == start
+                && getAccessibilitySelectionEnd() == end) {
             return;
         }
-        if (TextUtils.isEmpty(getContentDescription())) {
-            if (index >= 0 && index <= mText.length()) {
-                Selection.setSelection((Spannable) mText, index);
-            } else {
-                Selection.removeSelection((Spannable) mText);
-            }
+        CharSequence text = getIterableTextForAccessibility();
+        if (start >= 0 && start <= end && end <= text.length()) {
+            Selection.setSelection((Spannable) text, start, end);
         } else {
-            super.setAccessibilityCursorPosition(index);
+            Selection.removeSelection((Spannable) text);
         }
     }
 
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index 46478ca..f041f07 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -801,6 +801,11 @@
         return mThemedContext;
     }
     
+    @Override
+    public boolean isTitleTruncated() {
+        return mActionView != null && mActionView.isTitleTruncated();
+    }
+
     /**
      * @hide 
      */
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs b/core/java/com/android/internal/app/IAppOpsCallback.aidl
similarity index 75%
rename from tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs
rename to core/java/com/android/internal/app/IAppOpsCallback.aidl
index 1a19ffc..4e75a61 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs
+++ b/core/java/com/android/internal/app/IAppOpsCallback.aidl
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 The Android Open Source Project
+ * 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.
@@ -14,10 +14,8 @@
  * limitations under the License.
  */
 
-#pragma version(1)
-#pragma rs java_package_name(com.android.rs.image)
+package com.android.internal.app;
 
-void sendMsg() {
-    rsSendToClientBlocking(0);
+oneway interface IAppOpsCallback {
+    void opChanged(int op, String packageName);
 }
-
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
index a4eb4c5..83967f6 100644
--- a/core/java/com/android/internal/app/IAppOpsService.aidl
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 The Android Open Source Project
+ * 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.
@@ -17,12 +17,16 @@
 package com.android.internal.app;
 
 import android.app.AppOpsManager;
+import com.android.internal.app.IAppOpsCallback;
 
 interface IAppOpsService {
     List<AppOpsManager.PackageOps> getPackagesForOps(in int[] ops);
     List<AppOpsManager.PackageOps> getOpsForPackage(int uid, String packageName, in int[] ops);
+    void setMode(int code, int uid, String packageName, int mode);
     int checkOperation(int code, int uid, String packageName);
     int noteOperation(int code, int uid, String packageName);
     int startOperation(int code, int uid, String packageName);
     void finishOperation(int code, int uid, String packageName);
+    void startWatchingMode(int op, String packageName, IAppOpsCallback callback);
+    void stopWatchingMode(IAppOpsCallback callback);
 }
diff --git a/core/java/com/android/internal/content/PackageMonitor.java b/core/java/com/android/internal/content/PackageMonitor.java
index 20ecace..424c19b 100644
--- a/core/java/com/android/internal/content/PackageMonitor.java
+++ b/core/java/com/android/internal/content/PackageMonitor.java
@@ -153,8 +153,33 @@
 
     public void onPackageUpdateFinished(String packageName, int uid) {
     }
-    
-    public void onPackageChanged(String packageName, int uid, String[] components) {
+
+    /**
+     * Direct reflection of {@link Intent#ACTION_PACKAGE_CHANGED
+     * Intent.ACTION_PACKAGE_CHANGED} being received, informing you of
+     * changes to the enabled/disabled state of components in a package
+     * and/or of the overall package.
+     *
+     * @param packageName The name of the package that is changing.
+     * @param uid The user ID the package runs under.
+     * @param components Any components in the package that are changing.  If
+     * the overall package is changing, this will contain an entry of the
+     * package name itself.
+     * @return Return true to indicate you care about this change, which will
+     * result in {@link #onSomePackagesChanged()} being called later.  If you
+     * return false, no further callbacks will happen about this change.  The
+     * default implementation returns true if this is a change to the entire
+     * package.
+     */
+    public boolean onPackageChanged(String packageName, int uid, String[] components) {
+        if (components != null) {
+            for (String name : components) {
+                if (packageName.equals(name)) {
+                    return true;
+                }
+            }
+        }
+        return false;
     }
     
     public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) {
@@ -189,7 +214,10 @@
      */
     public void onPackageAppeared(String packageName, int reason) {
     }
-    
+
+    /**
+     * Called when an existing package is updated or its disabled state changes.
+     */
     public void onPackageModified(String packageName) {
     }
     
@@ -328,9 +356,10 @@
             if (pkg != null) {
                 mModifiedPackages = mTempArray;
                 mTempArray[0] = pkg;
-                onPackageChanged(pkg, uid, components);
-                // XXX Don't want this to always cause mSomePackagesChanged,
-                // since it can happen a fair amount.
+                mChangeType = PACKAGE_PERMANENT_CHANGE;
+                if (onPackageChanged(pkg, uid, components)) {
+                    mSomePackagesChanged = true;
+                }
                 onPackageModified(pkg);
             }
         } else if (Intent.ACTION_QUERY_PACKAGE_RESTART.equals(action)) {
diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
index 4d41e42..655d148 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
@@ -59,11 +59,53 @@
                 & ApplicationInfo.FLAG_SYSTEM) != 0;
     }
 
-    public static boolean isSystemImeThatHasEnglishSubtype(InputMethodInfo imi) {
+    public static boolean isSystemImeThatHasEnglishKeyboardSubtype(InputMethodInfo imi) {
         if (!isSystemIme(imi)) {
             return false;
         }
-        return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage());
+        return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage(), SUBTYPE_MODE_KEYBOARD);
+    }
+
+    private static boolean isSystemAuxilialyImeThatHashAutomaticSubtype(InputMethodInfo imi) {
+        if (!isSystemIme(imi)) {
+            return false;
+        }
+        if (!imi.isAuxiliaryIme()) {
+            return false;
+        }
+        final int subtypeCount = imi.getSubtypeCount();
+        for (int i = 0; i < subtypeCount; ++i) {
+            final InputMethodSubtype s = imi.getSubtypeAt(i);
+            if (s.overridesImplicitlyEnabledSubtype()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static ArrayList<InputMethodInfo> getDefaultEnabledImes(
+            Context context, boolean isSystemReady, ArrayList<InputMethodInfo> imis) {
+        final ArrayList<InputMethodInfo> retval = new ArrayList<InputMethodInfo>();
+        boolean auxilialyImeAdded = false;
+        for (int i = 0; i < imis.size(); ++i) {
+            final InputMethodInfo imi = imis.get(i);
+            if (isDefaultEnabledIme(isSystemReady, imi, context)) {
+                retval.add(imi);
+                if (imi.isAuxiliaryIme()) {
+                    auxilialyImeAdded = true;
+                }
+            }
+        }
+        if (auxilialyImeAdded) {
+            return retval;
+        }
+        for (int i = 0; i < imis.size(); ++i) {
+            final InputMethodInfo imi = imis.get(i);
+            if (isSystemAuxilialyImeThatHashAutomaticSubtype(imi)) {
+                retval.add(imi);
+            }
+        }
+        return retval;
     }
 
     // TODO: Rename isSystemDefaultImeThatHasCurrentLanguageSubtype
@@ -77,14 +119,11 @@
         }
         if (imi.getIsDefaultResourceId() != 0) {
             try {
-                Resources res = context.createPackageContext(
-                        imi.getPackageName(), 0).getResources();
-                if (res.getBoolean(imi.getIsDefaultResourceId())
-                        && containsSubtypeOf(imi, context.getResources().getConfiguration().
-                                locale.getLanguage())) {
+                if (imi.isDefault(context) && containsSubtypeOf(
+                        imi, context.getResources().getConfiguration().locale.getLanguage(),
+                        null /* mode */)) {
                     return true;
                 }
-            } catch (PackageManager.NameNotFoundException ex) {
             } catch (Resources.NotFoundException ex) {
             }
         }
@@ -97,15 +136,19 @@
     public static boolean isDefaultEnabledIme(
             boolean isSystemReady, InputMethodInfo imi, Context context) {
         return isValidSystemDefaultIme(isSystemReady, imi, context)
-                || isSystemImeThatHasEnglishSubtype(imi);
+                || isSystemImeThatHasEnglishKeyboardSubtype(imi);
     }
 
-    private static boolean containsSubtypeOf(InputMethodInfo imi, String language) {
+    private static boolean containsSubtypeOf(InputMethodInfo imi, String language, String mode) {
         final int N = imi.getSubtypeCount();
         for (int i = 0; i < N; ++i) {
-            if (imi.getSubtypeAt(i).getLocale().startsWith(language)) {
-                return true;
+            if (!imi.getSubtypeAt(i).getLocale().startsWith(language)) {
+                continue;
             }
+            if(!TextUtils.isEmpty(mode) && !imi.getSubtypeAt(i).getMode().equalsIgnoreCase(mode)) {
+                continue;
+            }
+            return true;
         }
         return false;
     }
@@ -141,7 +184,7 @@
             while (i > 0) {
                 i--;
                 final InputMethodInfo imi = enabledImes.get(i);
-                if (InputMethodUtils.isSystemImeThatHasEnglishSubtype(imi)
+                if (InputMethodUtils.isSystemImeThatHasEnglishKeyboardSubtype(imi)
                         && !imi.isAuxiliaryIme()) {
                     return imi;
                 }
@@ -536,7 +579,7 @@
             }
         }
 
-        private String getEnabledInputMethodsStr() {
+        public String getEnabledInputMethodsStr() {
             mEnabledInputMethodsStrCache = Settings.Secure.getStringForUser(
                     mResolver, Settings.Secure.ENABLED_INPUT_METHODS, mCurrentUserId);
             if (DEBUG) {
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index d24513a..fd7e3b0 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -76,18 +76,6 @@
     private final String peerSecurityContext;
 
     /**
-     * A long-lived reference to the original command socket used to launch
-     * this peer. If "peer wait" mode is specified, the process that requested
-     * the new VM instance intends to track the lifetime of the spawned instance
-     * via the command socket. In this case, the command socket is closed
-     * in the Zygote and placed here in the spawned instance so that it will
-     * not be collected and finalized. This field remains null at all times
-     * in the original Zygote process, and in all spawned processes where
-     * "peer-wait" mode was not requested.
-     */
-    private static LocalSocket sPeerWaitSocket = null;
-
-    /**
      * Constructs instance from connected socket.
      *
      * @param socket non-null; connected socket
@@ -298,11 +286,6 @@
      *   <li> --rlimit=r,c,m<i>tuple of values for setrlimit() call.
      *    <code>r</code> is the resource, <code>c</code> and <code>m</code>
      *    are the settings for current and max value.</i>
-     *   <li> --peer-wait indicates that the command socket should
-     * be inherited by (and set to close-on-exec in) the spawned process
-     * and used to track the lifetime of that process. The spawning process
-     * then exits. Without this flag, it is retained by the spawning process
-     * (and closed in the child) in expectation of a new spawn request.
      *   <li> --classpath=<i>colon-separated classpath</i> indicates
      * that the specified class (which must b first non-flag argument) should
      * be loaded from jar files in the specified classpath. Incompatible with
@@ -330,9 +313,6 @@
         /** from --setgroups */
         int[] gids;
 
-        /** from --peer-wait */
-        boolean peerWait;
-
         /**
          * From --enable-debugger, --enable-checkjni, --enable-assert,
          * --enable-safemode, and --enable-jni-logging.
@@ -437,8 +417,6 @@
                     debugFlags |= Zygote.DEBUG_ENABLE_JNI_LOGGING;
                 } else if (arg.equals("--enable-assert")) {
                     debugFlags |= Zygote.DEBUG_ENABLE_ASSERT;
-                } else if (arg.equals("--peer-wait")) {
-                    peerWait = true;
                 } else if (arg.equals("--runtime-init")) {
                     runtimeInit = true;
                 } else if (arg.startsWith("--seinfo=")) {
@@ -897,23 +875,8 @@
             FileDescriptor[] descriptors, FileDescriptor pipeFd, PrintStream newStderr)
             throws ZygoteInit.MethodAndArgsCaller {
 
-        /*
-         * Close the socket, unless we're in "peer wait" mode, in which
-         * case it's used to track the liveness of this process.
-         */
-
-        if (parsedArgs.peerWait) {
-            try {
-                ZygoteInit.setCloseOnExec(mSocket.getFileDescriptor(), true);
-                sPeerWaitSocket = mSocket;
-            } catch (IOException ex) {
-                Log.e(TAG, "Zygote Child: error setting peer wait "
-                        + "socket to be close-on-exec", ex);
-            }
-        } else {
-            closeSocket();
-            ZygoteInit.closeServerSocket();
-        }
+        closeSocket();
+        ZygoteInit.closeServerSocket();
 
         if (descriptors != null) {
             try {
@@ -1044,18 +1007,6 @@
             return true;
         }
 
-        /*
-         * If the peer wants to use the socket to wait on the
-         * newly spawned process, then we're all done.
-         */
-        if (parsedArgs.peerWait) {
-            try {
-                mSocket.close();
-            } catch (IOException ex) {
-                Log.e(TAG, "Zygote: error closing sockets", ex);
-            }
-            return true;
-        }
         return false;
     }
 
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 9e43749..7eddc9c 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -19,10 +19,8 @@
 import static libcore.io.OsConstants.S_IRWXG;
 import static libcore.io.OsConstants.S_IRWXO;
 
-import android.content.pm.ActivityInfo;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
 import android.net.LocalServerSocket;
 import android.os.Debug;
 import android.os.Process;
@@ -88,12 +86,6 @@
     static final int GC_LOOP_COUNT = 10;
 
     /**
-     * If true, zygote forks for each peer. If false, a select loop is used
-     * inside a single process. The latter is preferred.
-     */
-    private static final boolean ZYGOTE_FORK_MODE = false;
-
-    /**
      * The name of a resource file that contains classes to preload.
      */
     private static final String PRELOADED_CLASSES = "preloaded-classes";
@@ -549,11 +541,7 @@
 
             Log.i(TAG, "Accepting command socket connections");
 
-            if (ZYGOTE_FORK_MODE) {
-                runForkMode();
-            } else {
-                runSelectLoopMode();
-            }
+            runSelectLoop();
 
             closeServerSocket();
         } catch (MethodAndArgsCaller caller) {
@@ -566,44 +554,6 @@
     }
 
     /**
-     * Runs the zygote in accept-and-fork mode. In this mode, each peer
-     * gets its own zygote spawner process. This code is retained for
-     * reference only.
-     *
-     * @throws MethodAndArgsCaller in a child process when a main() should
-     * be executed.
-     */
-    private static void runForkMode() throws MethodAndArgsCaller {
-        while (true) {
-            ZygoteConnection peer = acceptCommandPeer();
-
-            int pid;
-
-            pid = Zygote.fork();
-
-            if (pid == 0) {
-                // The child process should handle the peer requests
-
-                // The child does not accept any more connections
-                try {
-                    sServerSocket.close();
-                } catch (IOException ex) {
-                    Log.e(TAG, "Zygote Child: error closing sockets", ex);
-                } finally {
-                    sServerSocket = null;
-                }
-
-                peer.run();
-                break;
-            } else if (pid > 0) {
-                peer.closeSocket();
-            } else {
-                throw new RuntimeException("Error invoking fork()");
-            }
-        }
-    }
-
-    /**
      * Runs the zygote process's select loop. Accepts new connections as
      * they happen, and reads commands from connections one spawn-request's
      * worth at a time.
@@ -611,9 +561,9 @@
      * @throws MethodAndArgsCaller in a child process when a main() should
      * be executed.
      */
-    private static void runSelectLoopMode() throws MethodAndArgsCaller {
-        ArrayList<FileDescriptor> fds = new ArrayList();
-        ArrayList<ZygoteConnection> peers = new ArrayList();
+    private static void runSelectLoop() throws MethodAndArgsCaller {
+        ArrayList<FileDescriptor> fds = new ArrayList<FileDescriptor>();
+        ArrayList<ZygoteConnection> peers = new ArrayList<ZygoteConnection>();
         FileDescriptor[] fdArray = new FileDescriptor[4];
 
         fds.add(sServerSocket.getFileDescriptor());
@@ -734,17 +684,6 @@
             throws IOException;
 
     /**
-     * Sets the permitted and effective capability sets of this process.
-     *
-     * @param permittedCapabilities permitted set
-     * @param effectiveCapabilities effective set
-     * @throws IOException on error
-     */
-    static native void setCapabilities(
-            long permittedCapabilities,
-            long effectiveCapabilities) throws IOException;
-
-    /**
      * Invokes select() on the provider array of file descriptors (selecting
      * for readability only). Array elements of null are ignored.
      *
diff --git a/core/java/com/android/internal/util/FastXmlSerializer.java b/core/java/com/android/internal/util/FastXmlSerializer.java
index 592a8fa..7a04080 100644
--- a/core/java/com/android/internal/util/FastXmlSerializer.java
+++ b/core/java/com/android/internal/util/FastXmlSerializer.java
@@ -50,6 +50,8 @@
 
     private static final int BUFFER_LEN = 8192;
 
+    private static String sSpace = "                                                              ";
+
     private final char[] mText = new char[BUFFER_LEN];
     private int mPos;
 
@@ -59,8 +61,12 @@
     private CharsetEncoder mCharset;
     private ByteBuffer mBytes = ByteBuffer.allocate(BUFFER_LEN);
 
+    private boolean mIndent = false;
     private boolean mInTag;
 
+    private int mNesting = 0;
+    private boolean mLineStart = true;
+
     private void append(char c) throws IOException {
         int pos = mPos;
         if (pos >= (BUFFER_LEN-1)) {
@@ -113,6 +119,14 @@
         append(str, 0, str.length());
     }
 
+    private void appendIndent(int indent) throws IOException {
+        indent *= 4;
+        if (indent > sSpace.length()) {
+            indent = sSpace.length();
+        }
+        append(sSpace, 0, indent);
+    }
+
     private void escapeAndAppendString(final String string) throws IOException {
         final int N = string.length();
         final char NE = (char)ESCAPE_TABLE.length;
@@ -161,6 +175,7 @@
 
         escapeAndAppendString(value);
         append('"');
+        mLineStart = false;
         return this;
     }
 
@@ -185,9 +200,13 @@
 
     public XmlSerializer endTag(String namespace, String name) throws IOException,
             IllegalArgumentException, IllegalStateException {
+        mNesting--;
         if (mInTag) {
             append(" />\n");
         } else {
+            if (mIndent && mLineStart) {
+                appendIndent(mNesting);
+            }
             append("</");
             if (namespace != null) {
                 append(namespace);
@@ -196,6 +215,7 @@
             append(name);
             append(">\n");
         }
+        mLineStart = true;
         mInTag = false;
         return this;
     }
@@ -278,6 +298,7 @@
     public void setFeature(String name, boolean state) throws IllegalArgumentException,
             IllegalStateException {
         if (name.equals("http://xmlpull.org/v1/doc/features.html#indent-output")) {
+            mIndent = true;
             return;
         }
         throw new UnsupportedOperationException();
@@ -325,6 +346,7 @@
             IllegalArgumentException, IllegalStateException {
         append("<?xml version='1.0' encoding='utf-8' standalone='"
                 + (standalone ? "yes" : "no") + "' ?>\n");
+        mLineStart = true;
     }
 
     public XmlSerializer startTag(String namespace, String name) throws IOException,
@@ -332,6 +354,10 @@
         if (mInTag) {
             append(">\n");
         }
+        if (mIndent) {
+            appendIndent(mNesting);
+        }
+        mNesting++;
         append('<');
         if (namespace != null) {
             append(namespace);
@@ -339,6 +365,7 @@
         }
         append(name);
         mInTag = true;
+        mLineStart = false;
         return this;
     }
 
@@ -349,6 +376,9 @@
             mInTag = false;
         }
         escapeAndAppendString(buf, start, len);
+        if (mIndent) {
+            mLineStart = buf[start+len-1] == '\n';
+        }
         return this;
     }
 
@@ -359,6 +389,9 @@
             mInTag = false;
         }
         escapeAndAppendString(text);
+        if (mIndent) {
+            mLineStart = text.length() > 0 && (text.charAt(text.length()-1) == '\n');
+        }
         return this;
     }
 
diff --git a/core/java/com/android/internal/util/IndentingPrintWriter.java b/core/java/com/android/internal/util/IndentingPrintWriter.java
index dd5918b..d01a817 100644
--- a/core/java/com/android/internal/util/IndentingPrintWriter.java
+++ b/core/java/com/android/internal/util/IndentingPrintWriter.java
@@ -21,29 +21,47 @@
 
 /**
  * Lightweight wrapper around {@link PrintWriter} that automatically indents
- * newlines based on internal state. Delays writing indent until first actual
- * write on a newline, enabling indent modification after newline.
+ * newlines based on internal state. It also automatically wraps long lines
+ * based on given line length.
+ * <p>
+ * Delays writing indent until first actual write on a newline, enabling indent
+ * modification after newline.
  */
 public class IndentingPrintWriter extends PrintWriter {
-    private final String mIndent;
+    private final String mSingleIndent;
+    private final int mWrapLength;
 
-    private StringBuilder mBuilder = new StringBuilder();
-    private char[] mCurrent;
+    /** Mutable version of current indent */
+    private StringBuilder mIndentBuilder = new StringBuilder();
+    /** Cache of current {@link #mIndentBuilder} value */
+    private char[] mCurrentIndent;
+    /** Length of current line being built, excluding any indent */
+    private int mCurrentLength;
+
+    /**
+     * Flag indicating if we're currently sitting on an empty line, and that
+     * next write should be prefixed with the current indent.
+     */
     private boolean mEmptyLine = true;
 
-    public IndentingPrintWriter(Writer writer, String indent) {
+    public IndentingPrintWriter(Writer writer, String singleIndent) {
+        this(writer, singleIndent, -1);
+    }
+
+    public IndentingPrintWriter(Writer writer, String singleIndent, int wrapLength) {
         super(writer);
-        mIndent = indent;
+        mSingleIndent = singleIndent;
+        mWrapLength = wrapLength;
     }
 
     public void increaseIndent() {
-        mBuilder.append(mIndent);
-        mCurrent = null;
+        mIndentBuilder.append(mSingleIndent);
+        mCurrentIndent = null;
     }
 
     public void decreaseIndent() {
-        mBuilder.delete(0, mIndent.length());
-        mCurrent = null;
+        mIndentBuilder.delete(0, mSingleIndent.length());
+        mCurrentIndent = null;
     }
 
     public void printPair(String key, Object value) {
@@ -52,33 +70,56 @@
 
     @Override
     public void write(char[] buf, int offset, int count) {
+        final int indentLength = mIndentBuilder.length();
         final int bufferEnd = offset + count;
         int lineStart = offset;
         int lineEnd = offset;
+
+        // March through incoming buffer looking for newlines
         while (lineEnd < bufferEnd) {
             char ch = buf[lineEnd++];
+            mCurrentLength++;
             if (ch == '\n') {
-                writeIndent();
+                maybeWriteIndent();
                 super.write(buf, lineStart, lineEnd - lineStart);
                 lineStart = lineEnd;
                 mEmptyLine = true;
+                mCurrentLength = 0;
+            }
+
+            // Wrap if we've pushed beyond line length
+            if (mWrapLength > 0 && mCurrentLength >= mWrapLength - indentLength) {
+                if (!mEmptyLine) {
+                    // Give ourselves a fresh line to work with
+                    super.write('\n');
+                    mEmptyLine = true;
+                    mCurrentLength = lineEnd - lineStart;
+                } else {
+                    // We need more than a dedicated line, slice it hard
+                    maybeWriteIndent();
+                    super.write(buf, lineStart, lineEnd - lineStart);
+                    super.write('\n');
+                    mEmptyLine = true;
+                    lineStart = lineEnd;
+                    mCurrentLength = 0;
+                }
             }
         }
 
         if (lineStart != lineEnd) {
-            writeIndent();
+            maybeWriteIndent();
             super.write(buf, lineStart, lineEnd - lineStart);
         }
     }
 
-    private void writeIndent() {
+    private void maybeWriteIndent() {
         if (mEmptyLine) {
             mEmptyLine = false;
-            if (mBuilder.length() != 0) {
-                if (mCurrent == null) {
-                    mCurrent = mBuilder.toString().toCharArray();
+            if (mIndentBuilder.length() != 0) {
+                if (mCurrentIndent == null) {
+                    mCurrentIndent = mIndentBuilder.toString().toCharArray();
                 }
-                super.write(mCurrent, 0, mCurrent.length);
+                super.write(mCurrentIndent, 0, mCurrentIndent.length);
             }
         }
     }
diff --git a/core/java/com/android/internal/util/ProcFileReader.java b/core/java/com/android/internal/util/ProcFileReader.java
index 72e1f0f..81571fe 100644
--- a/core/java/com/android/internal/util/ProcFileReader.java
+++ b/core/java/com/android/internal/util/ProcFileReader.java
@@ -19,6 +19,7 @@
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.ProtocolException;
 import java.nio.charset.Charsets;
 
 /**
@@ -82,12 +83,15 @@
     }
 
     /**
-     * Find buffer index of next token delimiter, usually space or newline. Will
-     * fill buffer as needed.
+     * Find buffer index of next token delimiter, usually space or newline.
+     * Fills buffer as needed.
+     *
+     * @return Index of next delimeter, otherwise -1 if no tokens remain on
+     *         current line.
      */
     private int nextTokenIndex() throws IOException {
         if (mLineFinished) {
-            throw new IOException("no tokens remaining on current line");
+            return -1;
         }
 
         int i = 0;
@@ -105,7 +109,7 @@
             }
         } while (fillBuf() > 0);
 
-        throw new IOException("end of stream while looking for token boundary");
+        throw new ProtocolException("End of stream while looking for token boundary");
     }
 
     /**
@@ -136,7 +140,7 @@
             }
         } while (fillBuf() > 0);
 
-        throw new IOException("end of stream while looking for line boundary");
+        throw new ProtocolException("End of stream while looking for line boundary");
     }
 
     /**
@@ -144,9 +148,11 @@
      */
     public String nextString() throws IOException {
         final int tokenIndex = nextTokenIndex();
-        final String s = new String(mBuffer, 0, tokenIndex, Charsets.US_ASCII);
-        consumeBuf(tokenIndex + 1);
-        return s;
+        if (tokenIndex == -1) {
+            throw new ProtocolException("Missing required string");
+        } else {
+            return parseAndConsumeString(tokenIndex);
+        }
     }
 
     /**
@@ -154,6 +160,33 @@
      */
     public long nextLong() throws IOException {
         final int tokenIndex = nextTokenIndex();
+        if (tokenIndex == -1) {
+            throw new ProtocolException("Missing required long");
+        } else {
+            return parseAndConsumeLong(tokenIndex);
+        }
+    }
+
+    /**
+     * Parse and return next token as base-10 encoded {@code long}, or return
+     * the given default value if no remaining tokens on current line.
+     */
+    public long nextOptionalLong(long def) throws IOException {
+        final int tokenIndex = nextTokenIndex();
+        if (tokenIndex == -1) {
+            return def;
+        } else {
+            return parseAndConsumeLong(tokenIndex);
+        }
+    }
+
+    private String parseAndConsumeString(int tokenIndex) throws IOException {
+        final String s = new String(mBuffer, 0, tokenIndex, Charsets.US_ASCII);
+        consumeBuf(tokenIndex + 1);
+        return s;
+    }
+
+    private long parseAndConsumeLong(int tokenIndex) throws IOException {
         final boolean negative = mBuffer[0] == '-';
 
         // TODO: refactor into something like IntegralToString
@@ -193,6 +226,7 @@
         return (int) value;
     }
 
+    @Override
     public void close() throws IOException {
         mStream.close();
     }
diff --git a/core/java/com/android/internal/util/StateMachine.java b/core/java/com/android/internal/util/StateMachine.java
index 3944659..6641f2c 100644
--- a/core/java/com/android/internal/util/StateMachine.java
+++ b/core/java/com/android/internal/util/StateMachine.java
@@ -27,6 +27,7 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Vector;
 
@@ -35,7 +36,7 @@
  *
  * <p>The state machine defined here is a hierarchical state machine which processes messages
  * and can have states arranged hierarchically.</p>
- * 
+ *
  * <p>A state is a <code>State</code> object and must implement
  * <code>processMessage</code> and optionally <code>enter/exit/getName</code>.
  * The enter/exit methods are equivalent to the construction and destruction
@@ -81,8 +82,8 @@
  * machine will cause <code>haltedProcessMessage</code> to be invoked.</p>
  *
  * <p>If it is desirable to completely stop the state machine call <code>quit</code> or
- * <code>abort</code>. These will call <code>exit</code> of the current state and its parents, call
- * <code>onQuiting</code> and then exit Thread/Loopers.</p>
+ * <code>quitNow</code>. These will call <code>exit</code> of the current state and its parents,
+ * call <code>onQuiting</code> and then exit Thread/Loopers.</p>
  *
  * <p>In addition to <code>processMessage</code> each <code>State</code> has
  * an <code>enter</code> method and <code>exit</exit> method which may be overridden.</p>
@@ -148,7 +149,7 @@
 
     class State1 extends State {
         &#64;Override public boolean processMessage(Message message) {
-            Log.d(TAG, "Hello World");
+            log("Hello World");
             return HANDLED;
         }
     }
@@ -232,8 +233,6 @@
  * <p>The implementation is below and also in StateMachineTest:</p>
 <code>
 class Hsm1 extends StateMachine {
-    private static final String TAG = "hsm1";
-
     public static final int CMD_1 = 1;
     public static final int CMD_2 = 2;
     public static final int CMD_3 = 3;
@@ -241,16 +240,16 @@
     public static final int CMD_5 = 5;
 
     public static Hsm1 makeHsm1() {
-        Log.d(TAG, "makeHsm1 E");
+        log("makeHsm1 E");
         Hsm1 sm = new Hsm1("hsm1");
         sm.start();
-        Log.d(TAG, "makeHsm1 X");
+        log("makeHsm1 X");
         return sm;
     }
 
     Hsm1(String name) {
         super(name);
-        Log.d(TAG, "ctor E");
+        log("ctor E");
 
         // Add states, use indentation to show hierarchy
         addState(mP1);
@@ -260,16 +259,16 @@
 
         // Set the initial state
         setInitialState(mS1);
-        Log.d(TAG, "ctor X");
+        log("ctor X");
     }
 
     class P1 extends State {
         &#64;Override public void enter() {
-            Log.d(TAG, "mP1.enter");
+            log("mP1.enter");
         }
         &#64;Override public boolean processMessage(Message message) {
             boolean retVal;
-            Log.d(TAG, "mP1.processMessage what=" + message.what);
+            log("mP1.processMessage what=" + message.what);
             switch(message.what) {
             case CMD_2:
                 // CMD_2 will arrive in mS2 before CMD_3
@@ -286,16 +285,16 @@
             return retVal;
         }
         &#64;Override public void exit() {
-            Log.d(TAG, "mP1.exit");
+            log("mP1.exit");
         }
     }
 
     class S1 extends State {
         &#64;Override public void enter() {
-            Log.d(TAG, "mS1.enter");
+            log("mS1.enter");
         }
         &#64;Override public boolean processMessage(Message message) {
-            Log.d(TAG, "S1.processMessage what=" + message.what);
+            log("S1.processMessage what=" + message.what);
             if (message.what == CMD_1) {
                 // Transition to ourself to show that enter/exit is called
                 transitionTo(mS1);
@@ -306,17 +305,17 @@
             }
         }
         &#64;Override public void exit() {
-            Log.d(TAG, "mS1.exit");
+            log("mS1.exit");
         }
     }
 
     class S2 extends State {
         &#64;Override public void enter() {
-            Log.d(TAG, "mS2.enter");
+            log("mS2.enter");
         }
         &#64;Override public boolean processMessage(Message message) {
             boolean retVal;
-            Log.d(TAG, "mS2.processMessage what=" + message.what);
+            log("mS2.processMessage what=" + message.what);
             switch(message.what) {
             case(CMD_2):
                 sendMessage(obtainMessage(CMD_4));
@@ -334,17 +333,17 @@
             return retVal;
         }
         &#64;Override public void exit() {
-            Log.d(TAG, "mS2.exit");
+            log("mS2.exit");
         }
     }
 
     class P2 extends State {
         &#64;Override public void enter() {
-            Log.d(TAG, "mP2.enter");
+            log("mP2.enter");
             sendMessage(obtainMessage(CMD_5));
         }
         &#64;Override public boolean processMessage(Message message) {
-            Log.d(TAG, "P2.processMessage what=" + message.what);
+            log("P2.processMessage what=" + message.what);
             switch(message.what) {
             case(CMD_3):
                 break;
@@ -357,13 +356,13 @@
             return HANDLED;
         }
         &#64;Override public void exit() {
-            Log.d(TAG, "mP2.exit");
+            log("mP2.exit");
         }
     }
 
     &#64;Override
     void onHalting() {
-        Log.d(TAG, "halting");
+        log("halting");
         synchronized (this) {
             this.notifyAll();
         }
@@ -386,7 +385,7 @@
           // wait for the messages to be handled
           hsm.wait();
      } catch (InterruptedException e) {
-          Log.e(TAG, "exception while waiting " + e.getMessage());
+          loge("exception while waiting " + e.getMessage());
      }
 }
 </code>
@@ -418,8 +417,7 @@
 </code>
  */
 public class StateMachine {
-
-    private static final String TAG = "StateMachine";
+    // Name of the state machine and used as logging tag
     private String mName;
 
     /** Message.what value when quitting */
@@ -447,12 +445,13 @@
      * {@hide}
      */
     public static class LogRec {
+        private StateMachine mSm;
         private long mTime;
         private int mWhat;
         private String mInfo;
-        private State mState;
-        private State mOrgState;
-        private State mTransitionToState;
+        private IState mState;
+        private IState mOrgState;
+        private IState mDstState;
 
         /**
          * Constructor
@@ -464,26 +463,26 @@
          * @param transToState is the state that was transitioned to after the message was
          * processed.
          */
-        LogRec(Message msg, String info, State state, State orgState, State transToState) {
-            update(msg, info, state, orgState, transToState);
+        LogRec(StateMachine sm, Message msg, String info, IState state, IState orgState,
+                IState transToState) {
+            update(sm, msg, info, state, orgState, transToState);
         }
 
         /**
          * Update the information in the record.
          * @param state that handled the message
-         * @param orgState is the first state the received the message but
-         * did not processes the message.
-         * @param transToState is the state that was transitioned to after the message was
-         * processed.
+         * @param orgState is the first state the received the message
+         * @param dstState is the state that was the transition target when logging
          */
-        public void update(Message msg, String info, State state, State orgState,
-                State transToState) {
+        public void update(StateMachine sm, Message msg, String info, IState state, IState orgState,
+                IState dstState) {
+            mSm = sm;
             mTime = System.currentTimeMillis();
             mWhat = (msg != null) ? msg.what : 0;
             mInfo = info;
             mState = state;
             mOrgState = orgState;
-            mTransitionToState = transToState;
+            mDstState = dstState;
         }
 
         /**
@@ -510,21 +509,27 @@
         /**
          * @return the state that handled this message
          */
-        public State getState() {
+        public IState getState() {
             return mState;
         }
 
         /**
+         * @return the state destination state if a transition is occurring or null if none.
+         */
+        public IState getDestState() {
+            return mDstState;
+        }
+
+
+        /**
          * @return the original state that received the message.
          */
-        public State getOriginalState() {
+        public IState getOriginalState() {
             return mOrgState;
         }
 
-        /**
-         * @return as string
-         */
-        public String toString(StateMachine sm) {
+        @Override
+        public String toString() {
             StringBuilder sb = new StringBuilder();
             sb.append("time=");
             Calendar c = Calendar.getInstance();
@@ -535,9 +540,9 @@
             sb.append(" org=");
             sb.append(mOrgState == null ? "<null>" : mOrgState.getName());
             sb.append(" dest=");
-            sb.append(mTransitionToState == null ? "<null>" : mTransitionToState.getName());
+            sb.append(mDstState == null ? "<null>" : mDstState.getName());
             sb.append(" what=");
-            String what = sm.getWhatToString(mWhat);
+            String what = mSm != null ? mSm.getWhatToString(mWhat) : "";
             if (TextUtils.isEmpty(what)) {
                 sb.append(mWhat);
                 sb.append("(0x");
@@ -650,18 +655,19 @@
          * processed.
          *
          */
-        synchronized void add(Message msg, String messageInfo, State state, State orgState,
-                State transToState) {
+        synchronized void add(StateMachine sm, Message msg, String messageInfo, IState state,
+                IState orgState,
+                IState transToState) {
             mCount += 1;
             if (mLogRecVector.size() < mMaxSize) {
-                mLogRecVector.add(new LogRec(msg, messageInfo, state, orgState, transToState));
+                mLogRecVector.add(new LogRec(sm, msg, messageInfo, state, orgState, transToState));
             } else {
                 LogRec pmi = mLogRecVector.get(mOldestIndex);
                 mOldestIndex += 1;
                 if (mOldestIndex >= mMaxSize) {
                     mOldestIndex = 0;
                 }
-                pmi.update(msg, messageInfo, state, orgState, transToState);
+                pmi.update(sm, msg, messageInfo, state, orgState, transToState);
             }
         }
     }
@@ -772,7 +778,7 @@
          */
         @Override
         public final void handleMessage(Message msg) {
-            if (mDbg) Log.d(TAG, "handleMessage: E msg.what=" + msg.what);
+            if (mDbg) mSm.log("handleMessage: E msg.what=" + msg.what);
 
             /** Save the current message */
             mMsg = msg;
@@ -791,55 +797,79 @@
                 throw new RuntimeException("StateMachine.handleMessage: " +
                             "The start method not called, received msg: " + msg);
             }
-            performTransitions(msgProcessedState);
+            performTransitions(msgProcessedState, msg);
 
-            if (mDbg) Log.d(TAG, "handleMessage: X");
+            // We need to check if mSm == null here as we could be quitting.
+            if (mDbg && mSm != null) mSm.log("handleMessage: X");
         }
 
         /**
          * Do any transitions
          * @param msgProcessedState is the state that processed the message
          */
-        private void performTransitions(State msgProcessedState) {
+        private void performTransitions(State msgProcessedState, Message msg) {
             /**
              * If transitionTo has been called, exit and then enter
              * the appropriate states. We loop on this to allow
              * enter and exit methods to use transitionTo.
              */
-            State destState = null;
             State orgState = mStateStack[mStateStackTopIndex].state;
 
-            /** Record whether message needs to be logged before transitions */
-            boolean recordLogMsg = mSm.recordLogRec(mMsg);
+            /**
+             * Record whether message needs to be logged before we transition and
+             * and we won't log special messages SM_INIT_CMD or SM_QUIT_CMD which
+             * always set msg.obj to the handler.
+             */
+            boolean recordLogMsg = mSm.recordLogRec(mMsg) && (msg.obj == mSmHandlerObj);
 
-            while (mDestState != null) {
-                if (mDbg) Log.d(TAG, "handleMessage: new destination call exit");
+            if (mLogRecords.logOnlyTransitions()) {
+                /** Record only if there is a transition */
+                if (mDestState != null) {
+                    mLogRecords.add(mSm, mMsg, mSm.getLogRecString(mMsg), msgProcessedState,
+                            orgState, mDestState);
+                }
+            } else if (recordLogMsg) {
+                /** Record message */
+               mLogRecords.add(mSm, mMsg, mSm.getLogRecString(mMsg), msgProcessedState,
+                        orgState, mDestState);
+            }
 
+            State destState = mDestState;
+            if (destState != null) {
                 /**
-                 * Save mDestState locally and set to null
-                 * to know if enter/exit use transitionTo.
+                 * Process the transitions including transitions in the enter/exit methods
                  */
-                destState = mDestState;
+                while (true) {
+                    if (mDbg) mSm.log("handleMessage: new destination call exit/enter");
+
+                    /**
+                     * Determine the states to exit and enter and return the
+                     * common ancestor state of the enter/exit states. Then
+                     * invoke the exit methods then the enter methods.
+                     */
+                    StateInfo commonStateInfo = setupTempStateStackWithStatesToEnter(destState);
+                    invokeExitMethods(commonStateInfo);
+                    int stateStackEnteringIndex = moveTempStateStackToStateStack();
+                    invokeEnterMethods(stateStackEnteringIndex);
+
+
+                    /**
+                     * Since we have transitioned to a new state we need to have
+                     * any deferred messages moved to the front of the message queue
+                     * so they will be processed before any other messages in the
+                     * message queue.
+                     */
+                    moveDeferredMessageAtFrontOfQueue();
+
+                    if (destState != mDestState) {
+                        // A new mDestState so continue looping
+                        destState = mDestState;
+                    } else {
+                        // No change in mDestState so we're done
+                        break;
+                    }
+                }
                 mDestState = null;
-
-                /**
-                 * Determine the states to exit and enter and return the
-                 * common ancestor state of the enter/exit states. Then
-                 * invoke the exit methods then the enter methods.
-                 */
-                StateInfo commonStateInfo = setupTempStateStackWithStatesToEnter(destState);
-                invokeExitMethods(commonStateInfo);
-                int stateStackEnteringIndex = moveTempStateStackToStateStack();
-                invokeEnterMethods(stateStackEnteringIndex);
-
-
-                /**
-                 * Since we have transitioned to a new state we need to have
-                 * any deferred messages moved to the front of the message queue
-                 * so they will be processed before any other messages in the
-                 * message queue.
-                 */
-                moveDeferredMessageAtFrontOfQueue();
             }
 
             /**
@@ -862,21 +892,6 @@
                     mSm.onHalting();
                 }
             }
-
-            // Log only if state machine has not quit
-            if (mSm != null) {
-                if (mLogRecords.logOnlyTransitions()) {
-                    /** Record only if there is a transition */
-                    if (destState != null) {
-                        mLogRecords.add(mMsg, mSm.getLogRecString(mMsg), msgProcessedState,
-                                orgState, destState);
-                    }
-                } else if (recordLogMsg) {
-                    /** Record message */
-                    mLogRecords.add(mMsg, mSm.getLogRecString(mMsg), msgProcessedState,
-                            orgState, destState);
-                }
-            }
         }
 
         /**
@@ -905,7 +920,7 @@
          * Complete the construction of the state machine.
          */
         private final void completeConstruction() {
-            if (mDbg) Log.d(TAG, "completeConstruction: E");
+            if (mDbg) mSm.log("completeConstruction: E");
 
             /**
              * Determine the maximum depth of the state hierarchy
@@ -921,7 +936,7 @@
                     maxDepth = depth;
                 }
             }
-            if (mDbg) Log.d(TAG, "completeConstruction: maxDepth=" + maxDepth);
+            if (mDbg) mSm.log("completeConstruction: maxDepth=" + maxDepth);
 
             mStateStack = new StateInfo[maxDepth];
             mTempStateStack = new StateInfo[maxDepth];
@@ -930,7 +945,7 @@
             /** Sending SM_INIT_CMD message to invoke enter methods asynchronously */
             sendMessageAtFrontOfQueue(obtainMessage(SM_INIT_CMD, mSmHandlerObj));
 
-            if (mDbg) Log.d(TAG, "completeConstruction: X");
+            if (mDbg) mSm.log("completeConstruction: X");
         }
 
         /**
@@ -942,7 +957,7 @@
         private final State processMsg(Message msg) {
             StateInfo curStateInfo = mStateStack[mStateStackTopIndex];
             if (mDbg) {
-                Log.d(TAG, "processMsg: " + curStateInfo.state.getName());
+                mSm.log("processMsg: " + curStateInfo.state.getName());
             }
 
             if (isQuit(msg)) {
@@ -961,7 +976,7 @@
                         break;
                     }
                     if (mDbg) {
-                        Log.d(TAG, "processMsg: " + curStateInfo.state.getName());
+                        mSm.log("processMsg: " + curStateInfo.state.getName());
                     }
                 }
            }
@@ -976,7 +991,7 @@
             while ((mStateStackTopIndex >= 0) &&
                     (mStateStack[mStateStackTopIndex] != commonStateInfo)) {
                 State curState = mStateStack[mStateStackTopIndex].state;
-                if (mDbg) Log.d(TAG, "invokeExitMethods: " + curState.getName());
+                if (mDbg) mSm.log("invokeExitMethods: " + curState.getName());
                 curState.exit();
                 mStateStack[mStateStackTopIndex].active = false;
                 mStateStackTopIndex -= 1;
@@ -988,7 +1003,7 @@
          */
         private final void invokeEnterMethods(int stateStackEnteringIndex) {
             for (int i = stateStackEnteringIndex; i <= mStateStackTopIndex; i++) {
-                if (mDbg) Log.d(TAG, "invokeEnterMethods: " + mStateStack[i].state.getName());
+                if (mDbg) mSm.log("invokeEnterMethods: " + mStateStack[i].state.getName());
                 mStateStack[i].state.enter();
                 mStateStack[i].active = true;
             }
@@ -1006,7 +1021,7 @@
              */
             for (int i = mDeferredMessages.size() - 1; i >= 0; i-- ) {
                 Message curMsg = mDeferredMessages.get(i);
-                if (mDbg) Log.d(TAG, "moveDeferredMessageAtFrontOfQueue; what=" + curMsg.what);
+                if (mDbg) mSm.log("moveDeferredMessageAtFrontOfQueue; what=" + curMsg.what);
                 sendMessageAtFrontOfQueue(curMsg);
             }
             mDeferredMessages.clear();
@@ -1024,7 +1039,7 @@
             int i = mTempStateStackCount - 1;
             int j = startingIndex;
             while (i >= 0) {
-                if (mDbg) Log.d(TAG, "moveTempStackToStateStack: i=" + i + ",j=" + j);
+                if (mDbg) mSm.log("moveTempStackToStateStack: i=" + i + ",j=" + j);
                 mStateStack[j] = mTempStateStack[i];
                 j += 1;
                 i -= 1;
@@ -1032,7 +1047,7 @@
 
             mStateStackTopIndex = j - 1;
             if (mDbg) {
-                Log.d(TAG, "moveTempStackToStateStack: X mStateStackTop="
+                mSm.log("moveTempStackToStateStack: X mStateStackTop="
                       + mStateStackTopIndex + ",startingIndex=" + startingIndex
                       + ",Top=" + mStateStack[mStateStackTopIndex].state.getName());
             }
@@ -1065,7 +1080,7 @@
             } while ((curStateInfo != null) && !curStateInfo.active);
 
             if (mDbg) {
-                Log.d(TAG, "setupTempStateStackWithStatesToEnter: X mTempStateStackCount="
+                mSm.log("setupTempStateStackWithStatesToEnter: X mTempStateStackCount="
                       + mTempStateStackCount + ",curStateInfo: " + curStateInfo);
             }
             return curStateInfo;
@@ -1076,7 +1091,7 @@
          */
         private final void setupInitialStateStack() {
             if (mDbg) {
-                Log.d(TAG, "setupInitialStateStack: E mInitialState="
+                mSm.log("setupInitialStateStack: E mInitialState="
                     + mInitialState.getName());
             }
 
@@ -1117,7 +1132,7 @@
          */
         private final StateInfo addState(State state, State parent) {
             if (mDbg) {
-                Log.d(TAG, "addStateInternal: E state=" + state.getName()
+                mSm.log("addStateInternal: E state=" + state.getName()
                         + ",parent=" + ((parent == null) ? "" : parent.getName()));
             }
             StateInfo parentStateInfo = null;
@@ -1142,7 +1157,7 @@
             stateInfo.state = state;
             stateInfo.parentStateInfo = parentStateInfo;
             stateInfo.active = false;
-            if (mDbg) Log.d(TAG, "addStateInternal: X stateInfo: " + stateInfo);
+            if (mDbg) mSm.log("addStateInternal: X stateInfo: " + stateInfo);
             return stateInfo;
         }
 
@@ -1162,19 +1177,19 @@
 
         /** @see StateMachine#setInitialState(State) */
         private final void setInitialState(State initialState) {
-            if (mDbg) Log.d(TAG, "setInitialState: initialState=" + initialState.getName());
+            if (mDbg) mSm.log("setInitialState: initialState=" + initialState.getName());
             mInitialState = initialState;
         }
 
         /** @see StateMachine#transitionTo(IState) */
         private final void transitionTo(IState destState) {
             mDestState = (State) destState;
-            if (mDbg) Log.d(TAG, "transitionTo: destState=" + mDestState.getName());
+            if (mDbg) mSm.log("transitionTo: destState=" + mDestState.getName());
         }
 
         /** @see StateMachine#deferMessage(Message) */
         private final void deferMessage(Message msg) {
-            if (mDbg) Log.d(TAG, "deferMessage: msg=" + msg.what);
+            if (mDbg) mSm.log("deferMessage: msg=" + msg.what);
 
             /* Copy the "msg" to "newMsg" as "msg" will be recycled */
             Message newMsg = obtainMessage();
@@ -1185,17 +1200,17 @@
 
         /** @see StateMachine#quit() */
         private final void quit() {
-            if (mDbg) Log.d(TAG, "quit:");
+            if (mDbg) mSm.log("quit:");
             sendMessage(obtainMessage(SM_QUIT_CMD, mSmHandlerObj));
         }
 
         /** @see StateMachine#quitNow() */
         private final void quitNow() {
-            if (mDbg) Log.d(TAG, "abort:");
+            if (mDbg) mSm.log("quitNow:");
             sendMessageAtFrontOfQueue(obtainMessage(SM_QUIT_CMD, mSmHandlerObj));
         }
 
-        /** Validate that the message was sent by quit or abort. */
+        /** Validate that the message was sent by quit or quitNow. */
         private final boolean isQuit(Message msg) {
             return (msg.what == SM_QUIT_CMD) && (msg.obj == mSmHandlerObj);
         }
@@ -1258,20 +1273,6 @@
     }
 
     /**
-     * @return current message
-     */
-    protected final Message getCurrentMessage() {
-        return mSmHandler.getCurrentMessage();
-    }
-
-    /**
-     * @return current state
-     */
-    protected final IState getCurrentState() {
-        return mSmHandler.getCurrentState();
-    }
-
-    /**
      * Add a new state to the state machine, parent will be null
      * @param state to add
      */
@@ -1290,6 +1291,26 @@
     }
 
     /**
+     * @return current message
+     */
+    protected final Message getCurrentMessage() {
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return null;
+        return smh.getCurrentMessage();
+    }
+
+    /**
+     * @return current state
+     */
+    protected final IState getCurrentState() {
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return null;
+        return smh.getCurrentState();
+    }
+
+    /**
      * transition to destination state. Upon returning
      * from processMessage the current state's exit will
      * be executed and upon the next message arriving
@@ -1337,7 +1358,7 @@
      * @param msg that couldn't be handled.
      */
     protected void unhandledMessage(Message msg) {
-        if (mSmHandler.mDbg) Log.e(TAG, mName + " - unhandledMessage: msg.what=" + msg.what);
+        if (mSmHandler.mDbg) loge(" - unhandledMessage: msg.what=" + msg.what);
     }
 
     /**
@@ -1393,21 +1414,44 @@
      * @return number of log records
      */
     public final int getLogRecSize() {
-        return mSmHandler.mLogRecords.size();
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return 0;
+        return smh.mLogRecords.size();
     }
 
     /**
      * @return the total number of records processed
      */
     public final int getLogRecCount() {
-        return mSmHandler.mLogRecords.count();
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return 0;
+        return smh.mLogRecords.count();
     }
 
     /**
-     * @return a log record
+     * @return a log record, or null if index is out of range
      */
     public final LogRec getLogRec(int index) {
-        return mSmHandler.mLogRecords.get(index);
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return null;
+        return smh.mLogRecords.get(index);
+    }
+
+    /**
+     * @return a copy of LogRecs as a collection
+     */
+    public final Collection<LogRec> copyLogRecs() {
+        Vector<LogRec> vlr = new Vector<LogRec>();
+        SmHandler smh = mSmHandler;
+        if (smh != null) {
+            for (LogRec lr : smh.mLogRecords.mLogRecVector) {
+                vlr.add(lr);
+            }
+        }
+        return vlr;
     }
 
     /**
@@ -1416,17 +1460,11 @@
      * @param string
      */
     protected void addLogRec(String string) {
-        mSmHandler.mLogRecords.add(null, string, null, null, null);
-    }
-
-    /**
-     * Add the string and state to LogRecords
-     *
-     * @param string
-     * @param state current state
-     */
-    protected void addLogRec(String string, State state) {
-        mSmHandler.mLogRecords.add(null, string, state, null, null);
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
+        smh.mLogRecords.add(this, smh.getCurrentMessage(), string, smh.getCurrentState(),
+                smh.mStateStack[smh.mStateStackTopIndex].state, smh.mDestState);
     }
 
     /**
@@ -1455,168 +1493,217 @@
     }
 
     /**
-     * @return Handler
+     * @return Handler, maybe null if state machine has quit.
      */
     public final Handler getHandler() {
         return mSmHandler;
     }
 
     /**
-     * Get a message and set Message.target = this.
+     * Get a message and set Message.target state machine handler.
      *
-     * @return message or null if SM has quit
+     * Note: The handler can be null if the state machine has quit,
+     * which means target will be null and may cause a AndroidRuntimeException
+     * in MessageQueue#enqueMessage if sent directly or if sent using
+     * StateMachine#sendMessage the message will just be ignored.
+     *
+     * @return  A Message object from the global pool
      */
     public final Message obtainMessage()
     {
-        if (mSmHandler == null) return null;
-
         return Message.obtain(mSmHandler);
     }
 
     /**
-     * Get a message and set Message.target = this and what
+     * Get a message and set Message.target state machine handler, what.
+     *
+     * Note: The handler can be null if the state machine has quit,
+     * which means target will be null and may cause a AndroidRuntimeException
+     * in MessageQueue#enqueMessage if sent directly or if sent using
+     * StateMachine#sendMessage the message will just be ignored.
      *
      * @param what is the assigned to Message.what.
-     * @return message or null if SM has quit
+     * @return  A Message object from the global pool
      */
     public final Message obtainMessage(int what) {
-        if (mSmHandler == null) return null;
-
         return Message.obtain(mSmHandler, what);
     }
 
     /**
-     * Get a message and set Message.target = this,
+     * Get a message and set Message.target state machine handler,
      * what and obj.
      *
+     * Note: The handler can be null if the state machine has quit,
+     * which means target will be null and may cause a AndroidRuntimeException
+     * in MessageQueue#enqueMessage if sent directly or if sent using
+     * StateMachine#sendMessage the message will just be ignored.
+     *
      * @param what is the assigned to Message.what.
      * @param obj is assigned to Message.obj.
-     * @return message or null if SM has quit
+     * @return  A Message object from the global pool
      */
     public final Message obtainMessage(int what, Object obj)
     {
-        if (mSmHandler == null) return null;
-
         return Message.obtain(mSmHandler, what, obj);
     }
 
     /**
-     * Get a message and set Message.target = this,
+     * Get a message and set Message.target state machine handler,
      * what, arg1 and arg2
      *
+     * Note: The handler can be null if the state machine has quit,
+     * which means target will be null and may cause a AndroidRuntimeException
+     * in MessageQueue#enqueMessage if sent directly or if sent using
+     * StateMachine#sendMessage the message will just be ignored.
+     *
      * @param what  is assigned to Message.what
      * @param arg1  is assigned to Message.arg1
      * @param arg2  is assigned to Message.arg2
-     * @return  A Message object from the global pool or null if
-     *          SM has quit
+     * @return  A Message object from the global pool
      */
     public final Message obtainMessage(int what, int arg1, int arg2)
     {
-        if (mSmHandler == null) return null;
-
         return Message.obtain(mSmHandler, what, arg1, arg2);
     }
 
     /**
-     * Get a message and set Message.target = this,
+     * Get a message and set Message.target state machine handler,
      * what, arg1, arg2 and obj
      *
+     * Note: The handler can be null if the state machine has quit,
+     * which means target will be null and may cause a AndroidRuntimeException
+     * in MessageQueue#enqueMessage if sent directly or if sent using
+     * StateMachine#sendMessage the message will just be ignored.
+     *
      * @param what  is assigned to Message.what
      * @param arg1  is assigned to Message.arg1
      * @param arg2  is assigned to Message.arg2
      * @param obj is assigned to Message.obj
-     * @return  A Message object from the global pool or null if
-     *          SM has quit
+     * @return  A Message object from the global pool
      */
     public final Message obtainMessage(int what, int arg1, int arg2, Object obj)
     {
-        if (mSmHandler == null) return null;
-
         return Message.obtain(mSmHandler, what, arg1, arg2, obj);
     }
 
     /**
      * Enqueue a message to this state machine.
+     *
+     * Message is ignored if state machine has quit.
      */
     public final void sendMessage(int what) {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.sendMessage(obtainMessage(what));
+        smh.sendMessage(obtainMessage(what));
     }
 
     /**
      * Enqueue a message to this state machine.
+     *
+     * Message is ignored if state machine has quit.
      */
     public final void sendMessage(int what, Object obj) {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.sendMessage(obtainMessage(what,obj));
+        smh.sendMessage(obtainMessage(what,obj));
     }
 
     /**
      * Enqueue a message to this state machine.
+     *
+     * Message is ignored if state machine has quit.
      */
     public final void sendMessage(Message msg) {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.sendMessage(msg);
+        smh.sendMessage(msg);
     }
 
     /**
      * Enqueue a message to this state machine after a delay.
+     *
+     * Message is ignored if state machine has quit.
      */
     public final void sendMessageDelayed(int what, long delayMillis) {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.sendMessageDelayed(obtainMessage(what), delayMillis);
+        smh.sendMessageDelayed(obtainMessage(what), delayMillis);
     }
 
     /**
      * Enqueue a message to this state machine after a delay.
+     *
+     * Message is ignored if state machine has quit.
      */
     public final void sendMessageDelayed(int what, Object obj, long delayMillis) {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.sendMessageDelayed(obtainMessage(what, obj), delayMillis);
+        smh.sendMessageDelayed(obtainMessage(what, obj), delayMillis);
     }
 
     /**
      * Enqueue a message to this state machine after a delay.
+     *
+     * Message is ignored if state machine has quit.
      */
     public final void sendMessageDelayed(Message msg, long delayMillis) {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.sendMessageDelayed(msg, delayMillis);
+        smh.sendMessageDelayed(msg, delayMillis);
     }
 
     /**
      * Enqueue a message to the front of the queue for this state machine.
      * Protected, may only be called by instances of StateMachine.
+     *
+     * Message is ignored if state machine has quit.
      */
     protected final void sendMessageAtFrontOfQueue(int what, Object obj) {
-        mSmHandler.sendMessageAtFrontOfQueue(obtainMessage(what, obj));
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
+
+        smh.sendMessageAtFrontOfQueue(obtainMessage(what, obj));
     }
 
     /**
      * Enqueue a message to the front of the queue for this state machine.
      * Protected, may only be called by instances of StateMachine.
+     *
+     * Message is ignored if state machine has quit.
      */
     protected final void sendMessageAtFrontOfQueue(int what) {
-        mSmHandler.sendMessageAtFrontOfQueue(obtainMessage(what));
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
+
+        smh.sendMessageAtFrontOfQueue(obtainMessage(what));
     }
 
     /**
      * Enqueue a message to the front of the queue for this state machine.
      * Protected, may only be called by instances of StateMachine.
+     *
+     * Message is ignored if state machine has quit.
      */
     protected final void sendMessageAtFrontOfQueue(Message msg) {
-        mSmHandler.sendMessageAtFrontOfQueue(msg);
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
+
+        smh.sendMessageAtFrontOfQueue(msg);
     }
 
     /**
@@ -1624,7 +1711,23 @@
      * Protected, may only be called by instances of StateMachine.
      */
     protected final void removeMessages(int what) {
-        mSmHandler.removeMessages(what);
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
+
+        smh.removeMessages(what);
+    }
+
+    /**
+     * Validate that the message was sent by
+     * {@link StateMachine#quit} or {@link StateMachine#quitNow}.
+     * */
+    protected final boolean isQuit(Message msg) {
+        // mSmHandler can be null if the state machine has quit.
+        SmHandler smh = mSmHandler;
+        if (smh == null) return msg.what == SM_QUIT_CMD;
+
+        return smh.isQuit(msg);
     }
 
     /**
@@ -1632,9 +1735,10 @@
      */
     protected final void quit() {
         // mSmHandler can be null if the state machine is already stopped.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.quit();
+        smh.quit();
     }
 
     /**
@@ -1642,9 +1746,10 @@
      */
     protected final void quitNow() {
         // mSmHandler can be null if the state machine is already stopped.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.quitNow();
+        smh.quitNow();
     }
 
     /**
@@ -1652,9 +1757,10 @@
      */
     public boolean isDbg() {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return false;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return false;
 
-        return mSmHandler.isDbg();
+        return smh.isDbg();
     }
 
     /**
@@ -1664,9 +1770,10 @@
      */
     public void setDbg(boolean dbg) {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
-        mSmHandler.setDbg(dbg);
+        smh.setDbg(dbg);
     }
 
     /**
@@ -1674,10 +1781,11 @@
      */
     public void start() {
         // mSmHandler can be null if the state machine has quit.
-        if (mSmHandler == null) return;
+        SmHandler smh = mSmHandler;
+        if (smh == null) return;
 
         /** Send the complete construction message */
-        mSmHandler.completeConstruction();
+        smh.completeConstruction();
     }
 
     /**
@@ -1691,9 +1799,33 @@
         pw.println(getName() + ":");
         pw.println(" total records=" + getLogRecCount());
         for (int i=0; i < getLogRecSize(); i++) {
-            pw.printf(" rec[%d]: %s\n", i, getLogRec(i).toString(this));
+            pw.printf(" rec[%d]: %s\n", i, getLogRec(i).toString());
             pw.flush();
         }
         pw.println("curState=" + getCurrentState().getName());
     }
+
+    protected void log(String s) {
+        Log.d(mName, s);
+    }
+
+    protected void logv(String s) {
+        Log.v(mName, s);
+    }
+
+    protected void logi(String s) {
+        Log.i(mName, s);
+    }
+
+    protected void logd(String s) {
+        Log.d(mName, s);
+    }
+
+    protected void logw(String s) {
+        Log.w(mName, s);
+    }
+
+    protected void loge(String s) {
+        Log.e(mName, s);
+    }
 }
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 8ccc612..6bb7ac7 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -40,6 +40,7 @@
 import android.graphics.drawable.Drawable;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.text.Layout;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -49,7 +50,6 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.MotionEvent;
-import android.view.TouchDelegate;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewParent;
@@ -83,7 +83,8 @@
             ActionBar.DISPLAY_USE_LOGO |
             ActionBar.DISPLAY_HOME_AS_UP |
             ActionBar.DISPLAY_SHOW_CUSTOM |
-            ActionBar.DISPLAY_SHOW_TITLE;
+            ActionBar.DISPLAY_SHOW_TITLE |
+            ActionBar.DISPLAY_TITLE_MULTIPLE_LINES;
 
     private static final int DEFAULT_CUSTOM_GRAVITY = Gravity.START | Gravity.CENTER_VERTICAL;
     
@@ -100,6 +101,7 @@
     private TextView mTitleView;
     private TextView mSubtitleView;
     private View mTitleUpView;
+    private ViewGroup mUpGoerFive;
 
     private Spinner mSpinner;
     private LinearLayout mListNavLayout;
@@ -120,6 +122,7 @@
     private boolean mIncludeTabs;
     private boolean mIsCollapsable;
     private boolean mIsCollapsed;
+    private boolean mWasHomeEnabled; // Was it enabled before action view expansion?
 
     private MenuBuilder mOptionsMenu;
     
@@ -137,10 +140,6 @@
 
     Window.Callback mWindowCallback;
 
-    private final Rect mTempRect = new Rect();
-    private int mMaxHomeSlop;
-    private static final int MAX_HOME_SLOP = 32; // dp
-
     private final AdapterView.OnItemSelectedListener mNavItemSelectedListener =
             new AdapterView.OnItemSelectedListener() {
         public void onItemSelected(AdapterView parent, View view, int position, long id) {
@@ -219,14 +218,25 @@
                 com.android.internal.R.styleable.ActionBar_homeLayout,
                 com.android.internal.R.layout.action_bar_home);
 
-        mHomeLayout = (HomeView) inflater.inflate(homeResId, this, false);
+        mUpGoerFive = (ViewGroup) inflater.inflate(
+                com.android.internal.R.layout.action_bar_up_container, this, false);
+        mHomeLayout = (HomeView) inflater.inflate(homeResId, mUpGoerFive, false);
 
-        mExpandedHomeLayout = (HomeView) inflater.inflate(homeResId, this, false);
+        mExpandedHomeLayout = (HomeView) inflater.inflate(homeResId, mUpGoerFive, false);
         mExpandedHomeLayout.setUp(true);
         mExpandedHomeLayout.setOnClickListener(mExpandedActionViewUpListener);
         mExpandedHomeLayout.setContentDescription(getResources().getText(
                 R.string.action_bar_up_description));
         
+        // This needs to highlight/be focusable on its own.
+        // TODO: Clean up the handoff between expanded/normal.
+        final Drawable upBackground = mUpGoerFive.getBackground();
+        if (upBackground != null) {
+            mExpandedHomeLayout.setBackground(upBackground.getConstantState().newDrawable());
+        }
+        mExpandedHomeLayout.setEnabled(true);
+        mExpandedHomeLayout.setFocusable(true);
+
         mTitleStyleRes = a.getResourceId(R.styleable.ActionBar_titleTextStyle, 0);
         mSubtitleStyleRes = a.getResourceId(R.styleable.ActionBar_subtitleTextStyle, 0);
         mProgressStyle = a.getResourceId(R.styleable.ActionBar_progressBarStyle, 0);
@@ -250,16 +260,14 @@
         a.recycle();
         
         mLogoNavItem = new ActionMenuItem(context, 0, android.R.id.home, 0, 0, mTitle);
-        mHomeLayout.setOnClickListener(mUpClickListener);
-        mHomeLayout.setClickable(true);
-        mHomeLayout.setFocusable(true);
+
+        mUpGoerFive.setOnClickListener(mUpClickListener);
+        mUpGoerFive.setClickable(true);
+        mUpGoerFive.setFocusable(true);
 
         if (getImportantForAccessibility() == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
             setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         }
-
-        mMaxHomeSlop =
-                (int) (MAX_HOME_SLOP * context.getResources().getDisplayMetrics().density + 0.5f);
     }
 
     @Override
@@ -269,8 +277,8 @@
         mTitleView = null;
         mSubtitleView = null;
         mTitleUpView = null;
-        if (mTitleLayout != null && mTitleLayout.getParent() == this) {
-            removeView(mTitleLayout);
+        if (mTitleLayout != null && mTitleLayout.getParent() == mUpGoerFive) {
+            mUpGoerFive.removeView(mTitleLayout);
         }
         mTitleLayout = null;
         if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0) {
@@ -551,19 +559,34 @@
     }
 
     public void setHomeButtonEnabled(boolean enable) {
-        mHomeLayout.setEnabled(enable);
-        mHomeLayout.setFocusable(enable);
+        setHomeButtonEnabled(enable, true);
+    }
+
+    private void setHomeButtonEnabled(boolean enable, boolean recordState) {
+        if (recordState) {
+            mWasHomeEnabled = enable;
+        }
+
+        if (mExpandedActionView != null) {
+            // There's an action view currently showing and we want to keep the state
+            // configured for the action view at the moment. If we needed to record the
+            // new state for later we will have done so above.
+            return;
+        }
+
+        mUpGoerFive.setEnabled(enable);
+        mUpGoerFive.setFocusable(enable);
         // Make sure the home button has an accurate content description for accessibility.
         if (!enable) {
-            mHomeLayout.setContentDescription(null);
-            mHomeLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
+            mUpGoerFive.setContentDescription(null);
+            mUpGoerFive.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
         } else {
-            mHomeLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+            mUpGoerFive.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_AUTO);
             if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
-                mHomeLayout.setContentDescription(mContext.getResources().getText(
+                mUpGoerFive.setContentDescription(mContext.getResources().getText(
                         R.string.action_bar_up_description));
             } else {
-                mHomeLayout.setContentDescription(mContext.getResources().getText(
+                mUpGoerFive.setContentDescription(mContext.getResources().getText(
                         R.string.action_bar_home_description));
             }
         }
@@ -600,7 +623,7 @@
                 if ((options & ActionBar.DISPLAY_SHOW_TITLE) != 0) {
                     initTitle();
                 } else {
-                    removeView(mTitleLayout);
+                    mUpGoerFive.removeView(mTitleLayout);
                 }
             }
 
@@ -608,8 +631,6 @@
                     (ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_HOME)) != 0) {
                 final boolean homeAsUp = (mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0;
                 mTitleUpView.setVisibility(!showHome ? (homeAsUp ? VISIBLE : INVISIBLE) : GONE);
-                mTitleLayout.setEnabled(!showHome && homeAsUp);
-                mTitleLayout.setClickable(!showHome && homeAsUp);
             }
 
             if ((flagsChanged & ActionBar.DISPLAY_SHOW_CUSTOM) != 0 && mCustomNavView != null) {
@@ -620,6 +641,17 @@
                 }
             }
             
+            if (mTitleLayout != null &&
+                    (flagsChanged & ActionBar.DISPLAY_TITLE_MULTIPLE_LINES) != 0) {
+                if ((options & ActionBar.DISPLAY_TITLE_MULTIPLE_LINES) != 0) {
+                    mTitleView.setSingleLine(false);
+                    mTitleView.setMaxLines(2);
+                } else {
+                    mTitleView.setMaxLines(1);
+                    mTitleView.setSingleLine(true);
+                }
+            }
+
             requestLayout();
         } else {
             invalidate();
@@ -754,7 +786,8 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
 
-        addView(mHomeLayout);
+        mUpGoerFive.addView(mHomeLayout, 0);
+        addView(mUpGoerFive);
 
         if (mCustomNavView != null && (mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) {
             final ViewParent parent = mCustomNavView.getParent();
@@ -776,8 +809,6 @@
             mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_subtitle);
             mTitleUpView = (View) mTitleLayout.findViewById(R.id.up);
 
-            mTitleLayout.setOnClickListener(mUpClickListener);
-
             if (mTitleStyleRes != 0) {
                 mTitleView.setTextAppearance(mContext, mTitleStyleRes);
             }
@@ -797,11 +828,9 @@
             final boolean showHome = (mDisplayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0;
             final boolean showTitleUp = !showHome;
             mTitleUpView.setVisibility(showTitleUp ? (homeAsUp ? VISIBLE : INVISIBLE) : GONE);
-            mTitleLayout.setEnabled(homeAsUp && showTitleUp);
-            mTitleLayout.setClickable(homeAsUp && showTitleUp);
         }
 
-        addView(mTitleLayout);
+        mUpGoerFive.addView(mTitleLayout);
         if (mExpandedActionView != null ||
                 (TextUtils.isEmpty(mTitle) && TextUtils.isEmpty(mSubtitle))) {
             // Don't show while in expanded mode or with empty text
@@ -821,6 +850,28 @@
         return mIsCollapsed;
     }
 
+    /**
+     * @return True if any characters in the title were truncated
+     */
+    public boolean isTitleTruncated() {
+        if (mTitleView == null) {
+            return false;
+        }
+
+        final Layout titleLayout = mTitleView.getLayout();
+        if (titleLayout == null) {
+            return false;
+        }
+
+        final int lineCount = titleLayout.getLineCount();
+        for (int i = 0; i < lineCount; i++) {
+            if (titleLayout.getEllipsisCount(i) > 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         final int childCount = getChildCount();
@@ -829,7 +880,16 @@
             for (int i = 0; i < childCount; i++) {
                 final View child = getChildAt(i);
                 if (child.getVisibility() != GONE &&
-                        !(child == mMenuView && mMenuView.getChildCount() == 0)) {
+                        !(child == mMenuView && mMenuView.getChildCount() == 0) &&
+                        child != mUpGoerFive) {
+                    visibleChildren++;
+                }
+            }
+
+            final int upChildCount = mUpGoerFive.getChildCount();
+            for (int i = 0; i < upChildCount; i++) {
+                final View child = mUpGoerFive.getChildAt(i);
+                if (child.getVisibility() != GONE) {
                     visibleChildren++;
                 }
             }
@@ -873,7 +933,8 @@
 
         HomeView homeLayout = mExpandedActionView != null ? mExpandedHomeLayout : mHomeLayout;
 
-        if (homeLayout.getVisibility() != GONE) {
+        int homeWidth = 0;
+        if (homeLayout.getVisibility() != GONE && homeLayout.getParent() == mUpGoerFive) {
             final ViewGroup.LayoutParams lp = homeLayout.getLayoutParams();
             int homeWidthSpec;
             if (lp.width < 0) {
@@ -881,10 +942,18 @@
             } else {
                 homeWidthSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
             }
+
+            /*
+             * This is a little weird.
+             * We're only measuring the *home* affordance within the Up container here
+             * on purpose, because we want to give the available space to all other views before
+             * the title text. We'll remeasure the whole up container again later.
+             */
             homeLayout.measure(homeWidthSpec, exactHeightSpec);
-            final int homeWidth = homeLayout.getMeasuredWidth() + homeLayout.getStartOffset();
-            availableWidth = Math.max(0, availableWidth - homeWidth);
-            leftOfCenter = Math.max(0, availableWidth - homeWidth);
+            homeWidth = homeLayout.getMeasuredWidth();
+            final int homeOffsetWidth = homeWidth + homeLayout.getStartOffset();
+            availableWidth = Math.max(0, availableWidth - homeOffsetWidth);
+            leftOfCenter = Math.max(0, availableWidth - homeOffsetWidth);
         }
         
         if (mMenuView != null && mMenuView.getParent() == this) {
@@ -986,9 +1055,13 @@
             availableWidth -= horizontalMargin + customView.getMeasuredWidth();
         }
 
-        if (mExpandedActionView == null && showTitle) {
-            availableWidth = measureChildView(mTitleLayout, availableWidth,
-                    MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.EXACTLY), 0);
+        /*
+         * Measure the whole up container now, allowing for the full home+title sections.
+         * (This will re-measure the home view.)
+         */
+        availableWidth = measureChildView(mUpGoerFive, availableWidth + homeWidth,
+                MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.EXACTLY), 0);
+        if (mTitleLayout != null) {
             leftOfCenter = Math.max(0, leftOfCenter - mTitleLayout.getMeasuredWidth());
         }
 
@@ -1035,25 +1108,17 @@
         final int y = getPaddingTop();
 
         HomeView homeLayout = mExpandedActionView != null ? mExpandedHomeLayout : mHomeLayout;
-        boolean needsTouchDelegate = false;
-        int homeSlop = mMaxHomeSlop;
-        int homeRight = 0;
-        if (homeLayout.getVisibility() != GONE) {
-            final int startOffset = homeLayout.getStartOffset();
-            x += positionChild(homeLayout,
-                            next(x, startOffset, isLayoutRtl), y, contentHeight, isLayoutRtl);
-            x = next(x, startOffset, isLayoutRtl);
-            needsTouchDelegate = homeLayout == mHomeLayout;
-            homeRight = x;
-        }
+        final int startOffset = homeLayout.getVisibility() != GONE &&
+                homeLayout.getParent() == mUpGoerFive ? homeLayout.getStartOffset() : 0;
+
+        // Position the up container based on where the edge of the home layout should go.
+        x += positionChild(mUpGoerFive,
+                next(x, startOffset, isLayoutRtl), y, contentHeight, isLayoutRtl);
+        x = next(x, startOffset, isLayoutRtl);
 
         if (mExpandedActionView == null) {
             final boolean showTitle = mTitleLayout != null && mTitleLayout.getVisibility() != GONE &&
                     (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0;
-            if (showTitle) {
-                x += positionChild(mTitleLayout, x, y, contentHeight, isLayoutRtl);
-                homeSlop = mTitleLayout.getWidth();
-            }
 
             switch (mNavigationMode) {
                 case ActionBar.NAVIGATION_MODE_STANDARD:
@@ -1063,7 +1128,6 @@
                         if (showTitle) {
                             x = next(x, mItemPadding, isLayoutRtl);
                         }
-                        homeSlop = Math.min(homeSlop, Math.max(x - homeRight, 0));
                         x += positionChild(mListNavLayout, x, y, contentHeight, isLayoutRtl);
                         x = next(x, mItemPadding, isLayoutRtl);
                     }
@@ -1071,7 +1135,6 @@
                 case ActionBar.NAVIGATION_MODE_TABS:
                     if (mTabScrollView != null) {
                         if (showTitle) x = next(x, mItemPadding, isLayoutRtl);
-                        homeSlop = Math.min(homeSlop, Math.max(x - homeRight, 0));
                         x += positionChild(mTabScrollView, x, y, contentHeight, isLayoutRtl);
                         x = next(x, mItemPadding, isLayoutRtl);
                     }
@@ -1176,7 +1239,6 @@
             final int customWidth = customView.getMeasuredWidth();
             customView.layout(xpos, ypos, xpos + customWidth,
                     ypos + customView.getMeasuredHeight());
-            homeSlop = Math.min(homeSlop, Math.max(xpos - homeRight, 0));
             x = next(x, customWidth, isLayoutRtl);
         }
 
@@ -1186,14 +1248,6 @@
             mProgressView.layout(mProgressBarPadding, -halfProgressHeight,
                     mProgressBarPadding + mProgressView.getMeasuredWidth(), halfProgressHeight);
         }
-
-        if (needsTouchDelegate) {
-            mTempRect.set(homeLayout.getLeft(), homeLayout.getTop(),
-                    homeLayout.getRight() + homeSlop, homeLayout.getBottom());
-            setTouchDelegate(new TouchDelegate(mTempRect, homeLayout));
-        } else {
-            setTouchDelegate(null);
-        }
     }
 
     @Override
@@ -1493,14 +1547,15 @@
             if (mExpandedActionView.getParent() != ActionBarView.this) {
                 addView(mExpandedActionView);
             }
-            if (mExpandedHomeLayout.getParent() != ActionBarView.this) {
-                addView(mExpandedHomeLayout);
+            if (mExpandedHomeLayout.getParent() != mUpGoerFive) {
+                mUpGoerFive.addView(mExpandedHomeLayout);
             }
             mHomeLayout.setVisibility(GONE);
             if (mTitleLayout != null) mTitleLayout.setVisibility(GONE);
             if (mTabScrollView != null) mTabScrollView.setVisibility(GONE);
             if (mSpinner != null) mSpinner.setVisibility(GONE);
             if (mCustomNavView != null) mCustomNavView.setVisibility(GONE);
+            setHomeButtonEnabled(false, false);
             requestLayout();
             item.setActionViewExpanded(true);
 
@@ -1520,7 +1575,7 @@
             }
 
             removeView(mExpandedActionView);
-            removeView(mExpandedHomeLayout);
+            mUpGoerFive.removeView(mExpandedHomeLayout);
             mExpandedActionView = null;
             if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0) {
                 mHomeLayout.setVisibility(VISIBLE);
@@ -1543,6 +1598,7 @@
             }
             mExpandedHomeLayout.setIcon(null);
             mCurrentExpandedItem = null;
+            setHomeButtonEnabled(mWasHomeEnabled); // Set by expandItemActionView above
             requestLayout();
             item.setActionViewExpanded(false);
 
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index d705024..44e8757 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -160,7 +160,8 @@
 	external/skia/include/effects \
 	external/skia/include/images \
 	external/skia/include/ports \
-	external/skia/src/ports \
+	external/skia/src/core \
+	external/skia/src/images \
 	external/skia/include/utils \
 	external/sqlite/dist \
 	external/sqlite/android \
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 1fb8c91..daabce3 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -231,7 +231,7 @@
     }
 
     SkAutoTDelete<SkImageDecoder> add(decoder);
-    SkAutoTDelete<SkBitmap> adb(bitmap, !useExistingBitmap);
+    SkAutoTDelete<SkBitmap> adb(!useExistingBitmap ? bitmap : NULL);
 
     decoder->setPeeker(&peeker);
     if (!isPurgeable) {
@@ -384,7 +384,7 @@
         return nullObjectReturn("Got null SkPixelRef");
     }
 
-    if (!isMutable) {
+    if (!isMutable && !useExistingBitmap) {
         // promise we will never change our pixels (great for sharing and pictures)
         pr->setImmutable();
     }
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index 5d6f738..7208c57 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -93,14 +93,6 @@
         return canvas->getDevice()->accessBitmap(false).height();
     }
 
-    static void setBitmap(JNIEnv* env, jobject, SkCanvas* canvas, SkBitmap* bitmap) {
-        if (bitmap) {
-            canvas->setBitmapDevice(*bitmap);
-        } else {
-            canvas->setDevice(NULL);
-        }
-    }
- 
     static int saveAll(JNIEnv* env, jobject jcanvas) {
         NPE_CHECK_RETURN_ZERO(env, jcanvas);
         return GraphicsJNI::getNativeCanvas(env, jcanvas)->save();
@@ -278,25 +270,25 @@
         canvas->setDrawFilter(filter);
     }
     
-    static jboolean quickReject__RectFI(JNIEnv* env, jobject, SkCanvas* canvas,
-                                        jobject rect, int edgetype) {
+    static jboolean quickReject__RectF(JNIEnv* env, jobject, SkCanvas* canvas,
+                                        jobject rect) {
         SkRect rect_;
         GraphicsJNI::jrectf_to_rect(env, rect, &rect_);
-        return canvas->quickReject(rect_, (SkCanvas::EdgeType)edgetype);
+        return canvas->quickReject(rect_);
     }
- 
-    static jboolean quickReject__PathI(JNIEnv* env, jobject, SkCanvas* canvas,
-                                       SkPath* path, int edgetype) {
-        return canvas->quickReject(*path, (SkCanvas::EdgeType)edgetype);
+
+    static jboolean quickReject__Path(JNIEnv* env, jobject, SkCanvas* canvas,
+                                       SkPath* path) {
+        return canvas->quickReject(*path);
     }
- 
-    static jboolean quickReject__FFFFI(JNIEnv* env, jobject, SkCanvas* canvas,
+
+    static jboolean quickReject__FFFF(JNIEnv* env, jobject, SkCanvas* canvas,
                                        jfloat left, jfloat top, jfloat right,
-                                       jfloat bottom, int edgetype) {
+                                       jfloat bottom) {
         SkRect r;
         r.set(SkFloatToScalar(left), SkFloatToScalar(top),
               SkFloatToScalar(right), SkFloatToScalar(bottom));
-        return canvas->quickReject(r, (SkCanvas::EdgeType)edgetype);
+        return canvas->quickReject(r);
     }
  
     static void drawRGB(JNIEnv* env, jobject, SkCanvas* canvas,
@@ -938,12 +930,19 @@
                               jobject bounds) {
         SkRect   r;
         SkIRect ir;
-        bool     result = canvas->getClipBounds(&r, SkCanvas::kBW_EdgeType);
+        bool     result = canvas->getClipBounds(&r);
 
         if (!result) {
             r.setEmpty();
+        } else {
+            // ensure the clip is not larger than the canvas
+            SkRect canvasRect;
+            SkISize deviceSize = canvas->getDeviceSize();
+            canvasRect.iset(0, 0, deviceSize.fWidth, deviceSize.fHeight);
+            r.intersect(canvasRect);
         }
         r.round(&ir);
+
         (void)GraphicsJNI::irect_to_jrect(ir, env, bounds);
         return result;
     }
@@ -960,7 +959,6 @@
     {"isOpaque","()Z", (void*) SkCanvasGlue::isOpaque},
     {"getWidth","()I", (void*) SkCanvasGlue::getWidth},
     {"getHeight","()I", (void*) SkCanvasGlue::getHeight},
-    {"native_setBitmap","(II)V", (void*) SkCanvasGlue::setBitmap},
     {"save","()I", (void*) SkCanvasGlue::saveAll},
     {"save","(I)I", (void*) SkCanvasGlue::save},
     {"native_saveLayer","(ILandroid/graphics/RectF;II)I",
@@ -992,10 +990,10 @@
     {"native_getClipBounds","(ILandroid/graphics/Rect;)Z",
         (void*) SkCanvasGlue::getClipBounds},
     {"native_getCTM", "(II)V", (void*)SkCanvasGlue::getCTM},
-    {"native_quickReject","(ILandroid/graphics/RectF;I)Z",
-        (void*) SkCanvasGlue::quickReject__RectFI},
-    {"native_quickReject","(III)Z", (void*) SkCanvasGlue::quickReject__PathI},
-    {"native_quickReject","(IFFFFI)Z", (void*)SkCanvasGlue::quickReject__FFFFI},
+    {"native_quickReject","(ILandroid/graphics/RectF;)Z",
+        (void*) SkCanvasGlue::quickReject__RectF},
+    {"native_quickReject","(II)Z", (void*) SkCanvasGlue::quickReject__Path},
+    {"native_quickReject","(IFFFF)Z", (void*)SkCanvasGlue::quickReject__FFFF},
     {"native_drawRGB","(IIII)V", (void*) SkCanvasGlue::drawRGB},
     {"native_drawARGB","(IIIII)V", (void*) SkCanvasGlue::drawARGB},
     {"native_drawColor","(II)V", (void*) SkCanvasGlue::drawColor__I},
diff --git a/core/jni/android/graphics/NinePatchImpl.cpp b/core/jni/android/graphics/NinePatchImpl.cpp
index ff0eb45..01e7e3e 100644
--- a/core/jni/android/graphics/NinePatchImpl.cpp
+++ b/core/jni/android/graphics/NinePatchImpl.cpp
@@ -105,7 +105,7 @@
 void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds,
                        const SkBitmap& bitmap, const android::Res_png_9patch& chunk,
                        const SkPaint* paint, SkRegion** outRegion) {
-    if (canvas && canvas->quickReject(bounds, SkCanvas::kBW_EdgeType)) {
+    if (canvas && canvas->quickReject(bounds)) {
         return;
     }
 
diff --git a/core/jni/android/graphics/Region.cpp b/core/jni/android/graphics/Region.cpp
index 866d223..ded2186 100644
--- a/core/jni/android/graphics/Region.cpp
+++ b/core/jni/android/graphics/Region.cpp
@@ -177,7 +177,7 @@
 
     SkRegion* region = new SkRegion;
     size_t size = p->readInt32();
-    region->unflatten(p->readInplace(size));
+    region->readFromMemory(p->readInplace(size));
 
     return region;
 }
@@ -190,9 +190,9 @@
 
     android::Parcel* p = android::parcelForJavaObject(env, parcel);
 
-    size_t size = region->flatten(NULL);
+    size_t size = region->writeToMemory(NULL);
     p->writeInt32(size);
-    region->flatten(p->writeInplace(size));
+    region->writeToMemory(p->writeInplace(size));
 
     return true;
 }
@@ -255,7 +255,7 @@
     // these are static methods
     { "nativeConstructor",      "()I",                              (void*)Region_constructor       },
     { "nativeDestructor",       "(I)V",                             (void*)Region_destructor        },
-    { "nativeSetRegion",        "(II)Z",                            (void*)Region_setRegion         },
+    { "nativeSetRegion",        "(II)V",                            (void*)Region_setRegion         },
     { "nativeSetRect",          "(IIIII)Z",                         (void*)Region_setRect           },
     { "nativeSetPath",          "(III)Z",                           (void*)Region_setPath           },
     { "nativeGetBounds",        "(ILandroid/graphics/Rect;)Z",      (void*)Region_getBounds         },
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 6d3c878..7544645 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -345,7 +345,7 @@
 }
 
 void TextLayoutShaper::init() {
-    mDefaultTypeface = SkFontHost::CreateTypeface(NULL, NULL, NULL, 0, SkTypeface::kNormal);
+    mDefaultTypeface = SkFontHost::CreateTypeface(NULL, NULL, SkTypeface::kNormal);
 }
 
 void TextLayoutShaper::unrefTypefaces() {
diff --git a/core/jni/android/graphics/Typeface.cpp b/core/jni/android/graphics/Typeface.cpp
index 7f4c37b..e056b61 100644
--- a/core/jni/android/graphics/Typeface.cpp
+++ b/core/jni/android/graphics/Typeface.cpp
@@ -147,25 +147,6 @@
     return SkTypeface::CreateFromFile(str.c_str());
 }
 
-#define MIN_GAMMA   (0.1f)
-#define MAX_GAMMA   (10.0f)
-static float pinGamma(float gamma) {
-    if (gamma < MIN_GAMMA) {
-        gamma = MIN_GAMMA;
-    } else if (gamma > MAX_GAMMA) {
-        gamma = MAX_GAMMA;
-    }
-    return gamma;
-}
-
-extern void skia_set_text_gamma(float, float);
-
-static void Typeface_setGammaForText(JNIEnv* env, jobject, jfloat blackGamma,
-                                     jfloat whiteGamma) {
-    // Comment this out for release builds. This is only used during development
-    skia_set_text_gamma(pinGamma(blackGamma), pinGamma(whiteGamma));
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 
 static JNINativeMethod gTypefaceMethods[] = {
@@ -177,7 +158,6 @@
                                            (void*)Typeface_createFromAsset },
     { "nativeCreateFromFile",     "(Ljava/lang/String;)I",
                                            (void*)Typeface_createFromFile },
-    { "setGammaForText", "(FF)V", (void*)Typeface_setGammaForText },
 };
 
 int register_android_graphics_Typeface(JNIEnv* env)
diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp
index c9cf2fa..f70f0d1 100644
--- a/core/jni/android_database_SQLiteConnection.cpp
+++ b/core/jni/android_database_SQLiteConnection.cpp
@@ -706,7 +706,7 @@
             }
 
             CopyRowResult cpr = copyRow(env, window, statement, numColumns, startPos, addedRows);
-            if (cpr == CPR_FULL && addedRows && startPos + addedRows < requiredPos) {
+            if (cpr == CPR_FULL && addedRows && startPos + addedRows <= requiredPos) {
                 // We filled the window before we got to the one row that we really wanted.
                 // Clear the window and start filling it again from here.
                 // TODO: Would be nicer if we could progressively replace earlier rows.
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index 3c1b9c8..e8a6569 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -16,7 +16,8 @@
 
 #define LOG_TAG "SensorManager"
 
-#include "utils/Log.h"
+#include <utils/Log.h>
+#include <utils/Looper.h>
 
 #include <gui/Sensor.h>
 #include <gui/SensorManager.h>
@@ -24,7 +25,13 @@
 
 #include "jni.h"
 #include "JNIHelp.h"
+#include "android_os_MessageQueue.h"
+#include <android_runtime/AndroidRuntime.h>
 
+static struct {
+    jclass clazz;
+    jmethodID dispatchSensorEvent;
+} gSensorEventQueueClassInfo;
 
 namespace android {
 
@@ -41,20 +48,29 @@
     jfieldID    minDelay;
 } gSensorOffsets;
 
+
 /*
  * The method below are not thread-safe and not intended to be
  */
 
-
-static jint
-sensors_module_init(JNIEnv *env, jclass clazz)
+static void
+nativeClassInit (JNIEnv *_env, jclass _this)
 {
-    SensorManager::getInstance();
-    return 0;
+    jclass sensorClass = _env->FindClass("android/hardware/Sensor");
+    SensorOffsets& sensorOffsets = gSensorOffsets;
+    sensorOffsets.name        = _env->GetFieldID(sensorClass, "mName",      "Ljava/lang/String;");
+    sensorOffsets.vendor      = _env->GetFieldID(sensorClass, "mVendor",    "Ljava/lang/String;");
+    sensorOffsets.version     = _env->GetFieldID(sensorClass, "mVersion",   "I");
+    sensorOffsets.handle      = _env->GetFieldID(sensorClass, "mHandle",    "I");
+    sensorOffsets.type        = _env->GetFieldID(sensorClass, "mType",      "I");
+    sensorOffsets.range       = _env->GetFieldID(sensorClass, "mMaxRange",  "F");
+    sensorOffsets.resolution  = _env->GetFieldID(sensorClass, "mResolution","F");
+    sensorOffsets.power       = _env->GetFieldID(sensorClass, "mPower",     "F");
+    sensorOffsets.minDelay    = _env->GetFieldID(sensorClass, "mMinDelay",  "I");
 }
 
 static jint
-sensors_module_get_next_sensor(JNIEnv *env, jobject clazz, jobject sensor, jint next)
+nativeGetNextSensor(JNIEnv *env, jclass clazz, jobject sensor, jint next)
 {
     SensorManager& mgr(SensorManager::getInstance());
 
@@ -82,106 +98,161 @@
 }
 
 //----------------------------------------------------------------------------
-static jint
-sensors_create_queue(JNIEnv *env, jclass clazz)
-{
+
+class Receiver : public LooperCallback {
+    sp<SensorEventQueue> mSensorQueue;
+    sp<MessageQueue> mMessageQueue;
+    jobject mReceiverObject;
+    jfloatArray mScratch;
+public:
+    Receiver(const sp<SensorEventQueue>& sensorQueue,
+            const sp<MessageQueue>& messageQueue,
+            jobject receiverObject, jfloatArray scratch) {
+        JNIEnv* env = AndroidRuntime::getJNIEnv();
+        mSensorQueue = sensorQueue;
+        mMessageQueue = messageQueue;
+        mReceiverObject = env->NewGlobalRef(receiverObject);
+        mScratch = (jfloatArray)env->NewGlobalRef(scratch);
+    }
+    ~Receiver() {
+        JNIEnv* env = AndroidRuntime::getJNIEnv();
+        env->DeleteGlobalRef(mReceiverObject);
+        env->DeleteGlobalRef(mScratch);
+    }
+    sp<SensorEventQueue> getSensorEventQueue() const {
+        return mSensorQueue;
+    }
+
+    void destroy() {
+        mMessageQueue->getLooper()->removeFd( mSensorQueue->getFd() );
+    }
+
+private:
+    virtual void onFirstRef() {
+        LooperCallback::onFirstRef();
+        mMessageQueue->getLooper()->addFd(mSensorQueue->getFd(), 0,
+                ALOOPER_EVENT_INPUT, this, mSensorQueue.get());
+    }
+
+    virtual int handleEvent(int fd, int events, void* data) {
+        JNIEnv* env = AndroidRuntime::getJNIEnv();
+        sp<SensorEventQueue> q = reinterpret_cast<SensorEventQueue *>(data);
+        ssize_t n;
+        ASensorEvent buffer[16];
+        while ((n = q->read(buffer, 16)) > 0) {
+            for (int i=0 ; i<n ; i++) {
+
+                env->SetFloatArrayRegion(mScratch, 0, 16, buffer[i].data);
+
+                env->CallVoidMethod(mReceiverObject,
+                        gSensorEventQueueClassInfo.dispatchSensorEvent,
+                        buffer[i].sensor,
+                        mScratch,
+                        buffer[i].vector.status,
+                        buffer[i].timestamp);
+
+                if (env->ExceptionCheck()) {
+                    ALOGE("Exception dispatching input event.");
+                    return 1;
+                }
+            }
+        }
+        if (n<0 && n != -EAGAIN) {
+            // FIXME: error receiving events, what to do in this case?
+        }
+
+        return 1;
+    }
+};
+
+static jint nativeInitSensorEventQueue(JNIEnv *env, jclass clazz, jobject eventQ, jobject msgQ, jfloatArray scratch) {
     SensorManager& mgr(SensorManager::getInstance());
     sp<SensorEventQueue> queue(mgr.createEventQueue());
-    queue->incStrong(clazz);
-    return reinterpret_cast<int>(queue.get());
-}
 
-static void
-sensors_destroy_queue(JNIEnv *env, jclass clazz, jint nativeQueue)
-{
-    sp<SensorEventQueue> queue(reinterpret_cast<SensorEventQueue *>(nativeQueue));
-    if (queue != 0) {
-        queue->decStrong(clazz);
-    }
-}
-
-static jboolean
-sensors_enable_sensor(JNIEnv *env, jclass clazz,
-        jint nativeQueue, jstring name, jint sensor, jint delay)
-{
-    sp<SensorEventQueue> queue(reinterpret_cast<SensorEventQueue *>(nativeQueue));
-    if (queue == 0) return JNI_FALSE;
-    status_t res;
-    if (delay >= 0) {
-        res = queue->enableSensor(sensor, delay);
-    } else {
-        res = queue->disableSensor(sensor);
-    }
-    return res == NO_ERROR ? true : false;
-}
-
-static jint
-sensors_data_poll(JNIEnv *env, jclass clazz, jint nativeQueue,
-        jfloatArray values, jintArray status, jlongArray timestamp)
-{
-    sp<SensorEventQueue> queue(reinterpret_cast<SensorEventQueue *>(nativeQueue));
-    if (queue == 0) return -1;
-
-    status_t res;
-    ASensorEvent event;
-
-    res = queue->read(&event, 1);
-    if (res == 0) {
-        res = queue->waitForEvent();
-        if (res != NO_ERROR)
-            return -1;
-        // here we're guaranteed to have an event
-        res = queue->read(&event, 1);
-        ALOGE_IF(res==0, "sensors_data_poll: nothing to read after waitForEvent()");
-    }
-    if (res <= 0) {
-        return -1;
+    sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, msgQ);
+    if (messageQueue == NULL) {
+        jniThrowRuntimeException(env, "MessageQueue is not initialized.");
+        return 0;
     }
 
-    jint accuracy = event.vector.status;
-    env->SetFloatArrayRegion(values, 0, 3, event.vector.v);
-    env->SetIntArrayRegion(status, 0, 1, &accuracy);
-    env->SetLongArrayRegion(timestamp, 0, 1, &event.timestamp);
-
-    return event.sensor;
+    sp<Receiver> receiver = new Receiver(queue, messageQueue, eventQ, scratch);
+    receiver->incStrong(clazz);
+    return jint(receiver.get());
 }
 
-static void
-nativeClassInit (JNIEnv *_env, jclass _this)
-{
-    jclass sensorClass = _env->FindClass("android/hardware/Sensor");
-    SensorOffsets& sensorOffsets = gSensorOffsets;
-    sensorOffsets.name        = _env->GetFieldID(sensorClass, "mName",      "Ljava/lang/String;");
-    sensorOffsets.vendor      = _env->GetFieldID(sensorClass, "mVendor",    "Ljava/lang/String;");
-    sensorOffsets.version     = _env->GetFieldID(sensorClass, "mVersion",   "I");
-    sensorOffsets.handle      = _env->GetFieldID(sensorClass, "mHandle",    "I");
-    sensorOffsets.type        = _env->GetFieldID(sensorClass, "mType",      "I");
-    sensorOffsets.range       = _env->GetFieldID(sensorClass, "mMaxRange",  "F");
-    sensorOffsets.resolution  = _env->GetFieldID(sensorClass, "mResolution","F");
-    sensorOffsets.power       = _env->GetFieldID(sensorClass, "mPower",     "F");
-    sensorOffsets.minDelay    = _env->GetFieldID(sensorClass, "mMinDelay",  "I");
+static jint nativeEnableSensor(JNIEnv *env, jclass clazz, jint eventQ, jint handle, jint us) {
+    sp<Receiver> receiver(reinterpret_cast<Receiver *>(eventQ));
+    return receiver->getSensorEventQueue()->enableSensor(handle, us);
 }
 
-static JNINativeMethod gMethods[] = {
-    {"nativeClassInit", "()V",              (void*)nativeClassInit },
-    {"sensors_module_init","()I",           (void*)sensors_module_init },
-    {"sensors_module_get_next_sensor","(Landroid/hardware/Sensor;I)I",
-                                            (void*)sensors_module_get_next_sensor },
+static jint nativeDisableSensor(JNIEnv *env, jclass clazz, jint eventQ, jint handle) {
+    sp<Receiver> receiver(reinterpret_cast<Receiver *>(eventQ));
+    return receiver->getSensorEventQueue()->disableSensor(handle);
+}
 
-    {"sensors_create_queue",  "()I",        (void*)sensors_create_queue },
-    {"sensors_destroy_queue", "(I)V",       (void*)sensors_destroy_queue },
-    {"sensors_enable_sensor", "(ILjava/lang/String;II)Z",
-                                            (void*)sensors_enable_sensor },
+static void nativeDestroySensorEventQueue(JNIEnv *env, jclass clazz, jint eventQ, jint handle) {
+    sp<Receiver> receiver(reinterpret_cast<Receiver *>(eventQ));
+    receiver->destroy();
+    receiver->decStrong(clazz);
+}
 
-    {"sensors_data_poll",  "(I[F[I[J)I",     (void*)sensors_data_poll },
+
+//----------------------------------------------------------------------------
+
+static JNINativeMethod gSystemSensorManagerMethods[] = {
+    {"nativeClassInit",
+            "()V",
+            (void*)nativeClassInit },
+
+    {"nativeGetNextSensor",
+            "(Landroid/hardware/Sensor;I)I",
+            (void*)nativeGetNextSensor },
+};
+
+static JNINativeMethod gSensorEventQueueMethods[] = {
+    {"nativeInitSensorEventQueue",
+            "(Landroid/hardware/SystemSensorManager$SensorEventQueue;Landroid/os/MessageQueue;[F)I",
+            (void*)nativeInitSensorEventQueue },
+
+    {"nativeEnableSensor",
+            "(III)I",
+            (void*)nativeEnableSensor },
+
+    {"nativeDisableSensor",
+            "(II)I",
+            (void*)nativeDisableSensor },
+
+    {"nativeDestroySensorEventQueue",
+            "(I)V",
+            (void*)nativeDestroySensorEventQueue },
 };
 
 }; // namespace android
 
 using namespace android;
 
+#define FIND_CLASS(var, className) \
+        var = env->FindClass(className); \
+        LOG_FATAL_IF(! var, "Unable to find class " className); \
+        var = jclass(env->NewGlobalRef(var));
+
+#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
+        var = env->GetMethodID(clazz, methodName, methodDescriptor); \
+        LOG_FATAL_IF(! var, "Unable to find method " methodName);
+
 int register_android_hardware_SensorManager(JNIEnv *env)
 {
-    return jniRegisterNativeMethods(env, "android/hardware/SystemSensorManager",
-            gMethods, NELEM(gMethods));
+    jniRegisterNativeMethods(env, "android/hardware/SystemSensorManager",
+            gSystemSensorManagerMethods, NELEM(gSystemSensorManagerMethods));
+
+    jniRegisterNativeMethods(env, "android/hardware/SystemSensorManager$SensorEventQueue",
+            gSensorEventQueueMethods, NELEM(gSensorEventQueueMethods));
+
+    FIND_CLASS(gSensorEventQueueClassInfo.clazz, "android/hardware/SystemSensorManager$SensorEventQueue");
+
+    GET_METHOD_ID(gSensorEventQueueClassInfo.dispatchSensorEvent,
+            gSensorEventQueueClassInfo.clazz,
+            "dispatchSensorEvent", "(I[FIJ)V");
+
+    return 0;
 }
diff --git a/core/jni/android_net_TrafficStats.cpp b/core/jni/android_net_TrafficStats.cpp
index 325fe26..aa8a58b 100644
--- a/core/jni/android_net_TrafficStats.cpp
+++ b/core/jni/android_net_TrafficStats.cpp
@@ -31,8 +31,7 @@
 
 namespace android {
 
-static const uint64_t VALUE_UNKNOWN = -1;
-static const char* IFACE_STAT_ALL = "/proc/net/xt_qtaguid/iface_stat_all";
+static const char* QTAGUID_IFACE_STATS = "/proc/net/xt_qtaguid/iface_stat_fmt";
 
 enum Tx_Rx {
     TX,
@@ -46,20 +45,45 @@
 };
 
 // NOTE: keep these in sync with TrafficStats.java
-enum IfaceStatType {
+static const uint64_t UNKNOWN = -1;
+
+enum StatsType {
     RX_BYTES = 0,
     RX_PACKETS = 1,
     TX_BYTES = 2,
-    TX_PACKETS = 3
+    TX_PACKETS = 3,
+    TCP_RX_PACKETS = 4,
+    TCP_TX_PACKETS = 5
 };
 
-struct IfaceStat {
+struct Stats {
     uint64_t rxBytes;
     uint64_t rxPackets;
     uint64_t txBytes;
     uint64_t txPackets;
+    uint64_t tcpRxPackets;
+    uint64_t tcpTxPackets;
 };
 
+static uint64_t getStatsType(struct Stats* stats, StatsType type) {
+    switch (type) {
+        case RX_BYTES:
+            return stats->rxBytes;
+        case RX_PACKETS:
+            return stats->rxPackets;
+        case TX_BYTES:
+            return stats->txBytes;
+        case TX_PACKETS:
+            return stats->txPackets;
+        case TCP_RX_PACKETS:
+            return stats->tcpRxPackets;
+        case TCP_TX_PACKETS:
+            return stats->tcpTxPackets;
+        default:
+            return UNKNOWN;
+    }
+}
+
 // Returns an ASCII decimal number read from the specified file, -1 on error.
 static jlong readNumber(char const* filename) {
     char buf[80];
@@ -81,79 +105,72 @@
     return atoll(buf);
 }
 
-static int parseIfaceStat(const char* iface, struct IfaceStat* stat) {
-    FILE *fp = fopen(IFACE_STAT_ALL, "r");
-    if (!fp) {
-        return errno;
+static int parseIfaceStats(const char* iface, struct Stats* stats) {
+    FILE *fp = fopen(QTAGUID_IFACE_STATS, "r");
+    if (fp == NULL) {
+        return -1;
     }
 
     char buffer[256];
     char cur_iface[32];
-    int active;
-    uint64_t rxBytes, rxPackets, txBytes, txPackets, devRxBytes, devRxPackets, devTxBytes,
-            devTxPackets;
+    bool foundTcp = false;
+    uint64_t rxBytes, rxPackets, txBytes, txPackets, tcpRxPackets, tcpTxPackets;
 
-    while (fgets(buffer, 256, fp) != NULL) {
-        if (sscanf(buffer, "%31s %d %llu %llu %llu %llu %llu %llu %llu %llu", cur_iface, &active,
-                   &rxBytes, &rxPackets, &txBytes, &txPackets, &devRxBytes, &devRxPackets,
-                   &devTxBytes, &devTxPackets) != 10) {
-            continue;
-        }
-
-        if (!iface || !strcmp(iface, cur_iface)) {
-            stat->rxBytes += rxBytes;
-            stat->rxPackets += rxPackets;
-            stat->txBytes += txBytes;
-            stat->txPackets += txPackets;
-
-            if (active) {
-                stat->rxBytes += devRxBytes;
-                stat->rxPackets += devRxPackets;
-                stat->txBytes += devTxBytes;
-                stat->txPackets += devTxPackets;
+    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
+        int matched = sscanf(buffer, "%31s %llu %llu %llu %llu "
+                "%*llu %llu %*llu %*llu %*llu %*llu "
+                "%*llu %llu %*llu %*llu %*llu %*llu", cur_iface, &rxBytes,
+                &rxPackets, &txBytes, &txPackets, &tcpRxPackets, &tcpTxPackets);
+        if (matched >= 5) {
+            if (matched == 7) {
+                foundTcp = true;
+            }
+            if (!iface || !strcmp(iface, cur_iface)) {
+                stats->rxBytes += rxBytes;
+                stats->rxPackets += rxPackets;
+                stats->txBytes += txBytes;
+                stats->txPackets += txPackets;
+                if (matched == 7) {
+                    stats->tcpRxPackets += tcpRxPackets;
+                    stats->tcpTxPackets += tcpTxPackets;
+                }
             }
         }
     }
 
-    fclose(fp);
+    if (!foundTcp) {
+        stats->tcpRxPackets = UNKNOWN;
+        stats->tcpTxPackets = UNKNOWN;
+    }
+
+    if (fclose(fp) != 0) {
+        return -1;
+    }
     return 0;
 }
 
-static uint64_t getIfaceStatType(const char* iface, IfaceStatType type) {
-    struct IfaceStat stat;
-    memset(&stat, 0, sizeof(IfaceStat));
-
-    if (parseIfaceStat(iface, &stat)) {
-        return VALUE_UNKNOWN;
-    }
-
-    switch (type) {
-        case RX_BYTES:
-            return stat.rxBytes;
-        case RX_PACKETS:
-            return stat.rxPackets;
-        case TX_BYTES:
-            return stat.txBytes;
-        case TX_PACKETS:
-            return stat.txPackets;
-        default:
-            return VALUE_UNKNOWN;
-    }
-}
-
 static jlong getTotalStat(JNIEnv* env, jclass clazz, jint type) {
-    return getIfaceStatType(NULL, (IfaceStatType) type);
+    struct Stats stats;
+    memset(&stats, 0, sizeof(Stats));
+    if (parseIfaceStats(NULL, &stats) == 0) {
+        return getStatsType(&stats, (StatsType) type);
+    } else {
+        return UNKNOWN;
+    }
 }
 
 static jlong getIfaceStat(JNIEnv* env, jclass clazz, jstring iface, jint type) {
-    struct IfaceStat stat;
-    const char* ifaceChars = env->GetStringUTFChars(iface, NULL);
-    if (ifaceChars) {
-        uint64_t stat = getIfaceStatType(ifaceChars, (IfaceStatType) type);
-        env->ReleaseStringUTFChars(iface, ifaceChars);
-        return stat;
+    ScopedUtfChars iface8(env, iface);
+    if (iface8.c_str() == NULL) {
+        return UNKNOWN;
+    }
+
+    struct Stats stats;
+    memset(&stats, 0, sizeof(Stats));
+    if (parseIfaceStats(NULL, &stats) == 0) {
+        return getStatsType(&stats, (StatsType) type);
     } else {
-        return VALUE_UNKNOWN;
+        return UNKNOWN;
     }
 }
 
diff --git a/core/jni/android_os_MessageQueue.cpp b/core/jni/android_os_MessageQueue.cpp
index a4dcac6..7540645 100644
--- a/core/jni/android_os_MessageQueue.cpp
+++ b/core/jni/android_os_MessageQueue.cpp
@@ -109,55 +109,34 @@
 
 // ----------------------------------------------------------------------------
 
-static NativeMessageQueue* android_os_MessageQueue_getNativeMessageQueue(JNIEnv* env,
-        jobject messageQueueObj) {
+sp<MessageQueue> android_os_MessageQueue_getMessageQueue(JNIEnv* env, jobject messageQueueObj) {
     jint intPtr = env->GetIntField(messageQueueObj, gMessageQueueClassInfo.mPtr);
     return reinterpret_cast<NativeMessageQueue*>(intPtr);
 }
 
-static void android_os_MessageQueue_setNativeMessageQueue(JNIEnv* env, jobject messageQueueObj,
-        NativeMessageQueue* nativeMessageQueue) {
-    env->SetIntField(messageQueueObj, gMessageQueueClassInfo.mPtr,
-             reinterpret_cast<jint>(nativeMessageQueue));
-}
-
-sp<MessageQueue> android_os_MessageQueue_getMessageQueue(JNIEnv* env, jobject messageQueueObj) {
-    NativeMessageQueue* nativeMessageQueue =
-            android_os_MessageQueue_getNativeMessageQueue(env, messageQueueObj);
-    return nativeMessageQueue;
-}
-
-static void android_os_MessageQueue_nativeInit(JNIEnv* env, jobject obj) {
+static jint android_os_MessageQueue_nativeInit(JNIEnv* env, jclass clazz) {
     NativeMessageQueue* nativeMessageQueue = new NativeMessageQueue();
     if (!nativeMessageQueue) {
         jniThrowRuntimeException(env, "Unable to allocate native queue");
-        return;
+        return 0;
     }
 
     nativeMessageQueue->incStrong(env);
-    android_os_MessageQueue_setNativeMessageQueue(env, obj, nativeMessageQueue);
+    return reinterpret_cast<jint>(nativeMessageQueue);
 }
 
-static void android_os_MessageQueue_nativeDestroy(JNIEnv* env, jobject obj) {
-    NativeMessageQueue* nativeMessageQueue =
-            android_os_MessageQueue_getNativeMessageQueue(env, obj);
-    if (nativeMessageQueue) {
-        android_os_MessageQueue_setNativeMessageQueue(env, obj, NULL);
-        nativeMessageQueue->decStrong(env);
-    }
+static void android_os_MessageQueue_nativeDestroy(JNIEnv* env, jclass clazz, jint ptr) {
+    NativeMessageQueue* nativeMessageQueue = reinterpret_cast<NativeMessageQueue*>(ptr);
+    nativeMessageQueue->decStrong(env);
 }
 
-static void throwQueueNotInitialized(JNIEnv* env) {
-    jniThrowException(env, "java/lang/IllegalStateException", "Message queue not initialized");
-}
-
-static void android_os_MessageQueue_nativePollOnce(JNIEnv* env, jobject obj,
+static void android_os_MessageQueue_nativePollOnce(JNIEnv* env, jclass clazz,
         jint ptr, jint timeoutMillis) {
     NativeMessageQueue* nativeMessageQueue = reinterpret_cast<NativeMessageQueue*>(ptr);
     nativeMessageQueue->pollOnce(env, timeoutMillis);
 }
 
-static void android_os_MessageQueue_nativeWake(JNIEnv* env, jobject obj, jint ptr) {
+static void android_os_MessageQueue_nativeWake(JNIEnv* env, jclass clazz, jint ptr) {
     NativeMessageQueue* nativeMessageQueue = reinterpret_cast<NativeMessageQueue*>(ptr);
     return nativeMessageQueue->wake();
 }
@@ -166,8 +145,8 @@
 
 static JNINativeMethod gMessageQueueMethods[] = {
     /* name, signature, funcPtr */
-    { "nativeInit", "()V", (void*)android_os_MessageQueue_nativeInit },
-    { "nativeDestroy", "()V", (void*)android_os_MessageQueue_nativeDestroy },
+    { "nativeInit", "()I", (void*)android_os_MessageQueue_nativeInit },
+    { "nativeDestroy", "(I)V", (void*)android_os_MessageQueue_nativeDestroy },
     { "nativePollOnce", "(II)V", (void*)android_os_MessageQueue_nativePollOnce },
     { "nativeWake", "(I)V", (void*)android_os_MessageQueue_nativeWake }
 };
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index de14826..895a0dc 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -156,6 +156,17 @@
     return Stencil::getStencilSize();
 }
 
+static void android_view_GLES20Canvas_setName(JNIEnv* env,
+        jobject clazz, OpenGLRenderer* renderer, jstring name) {
+    if (name != NULL) {
+        const char* textArray = env->GetStringUTFChars(name, NULL);
+        renderer->setName(textArray);
+        env->ReleaseStringUTFChars(name, textArray);
+    } else {
+        renderer->setName(NULL);
+    }
+}
+
 // ----------------------------------------------------------------------------
 // Functor
 // ----------------------------------------------------------------------------
@@ -258,8 +269,7 @@
 // ----------------------------------------------------------------------------
 
 static bool android_view_GLES20Canvas_quickReject(JNIEnv* env, jobject clazz,
-        OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom,
-        SkCanvas::EdgeType edge) {
+        OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom) {
     return renderer->quickReject(left, top, right, bottom);
 }
 
@@ -479,7 +489,7 @@
             rects.push(r.fTop);
             rects.push(r.fRight);
             rects.push(r.fBottom);
-            count++;
+            count += 4;
             it.next();
         }
         renderer->drawRects(rects.array(), count, paint);
@@ -949,6 +959,8 @@
     { "nPrepare",           "(IZ)I",           (void*) android_view_GLES20Canvas_prepare },
     { "nPrepareDirty",      "(IIIIIZ)I",       (void*) android_view_GLES20Canvas_prepareDirty },
     { "nFinish",            "(I)V",            (void*) android_view_GLES20Canvas_finish },
+    { "nSetName",           "(ILjava/lang/String;)V",
+            (void*) android_view_GLES20Canvas_setName },
 
     { "nGetStencilSize",    "()I",             (void*) android_view_GLES20Canvas_getStencilSize },
 
@@ -968,7 +980,7 @@
     { "nSaveLayerAlpha",    "(IFFFFII)I",      (void*) android_view_GLES20Canvas_saveLayerAlpha },
     { "nSaveLayerAlpha",    "(III)I",          (void*) android_view_GLES20Canvas_saveLayerAlphaClip },
 
-    { "nQuickReject",       "(IFFFFI)Z",       (void*) android_view_GLES20Canvas_quickReject },
+    { "nQuickReject",       "(IFFFF)Z",        (void*) android_view_GLES20Canvas_quickReject },
     { "nClipRect",          "(IFFFFI)Z",       (void*) android_view_GLES20Canvas_clipRectF },
     { "nClipRect",          "(IIIIII)Z",       (void*) android_view_GLES20Canvas_clipRect },
     { "nClipPath",          "(III)Z",          (void*) android_view_GLES20Canvas_clipPath },
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index 1f15370..ed92e43 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -66,7 +66,6 @@
     jfieldID mNativeSurfaceControl;
     jfieldID mGenerationId;
     jfieldID mCanvas;
-    jfieldID mCanvasSaveCount;
     jmethodID ctor;
 } gSurfaceClassInfo;
 
@@ -78,11 +77,16 @@
 } gRectClassInfo;
 
 static struct {
+    jfieldID mFinalizer;
     jfieldID mNativeCanvas;
     jfieldID mSurfaceFormat;
 } gCanvasClassInfo;
 
 static struct {
+    jfieldID mNativeCanvas;
+} gCanvasFinalizerClassInfo;
+
+static struct {
     jfieldID width;
     jfieldID height;
     jfieldID refreshRate;
@@ -135,6 +139,7 @@
         return mScreenshot.getFormat();
     }
 
+    SK_DECLARE_UNFLATTENABLE_OBJECT()
 protected:
     // overrides from SkPixelRef
     virtual void* onLockPixels(SkColorTable** ct) {
@@ -373,6 +378,15 @@
     }
 }
 
+static inline void swapCanvasPtr(JNIEnv* env, jobject canvasObj, SkCanvas* newCanvas) {
+  jobject canvasFinalizerObj = env->GetObjectField(canvasObj, gCanvasClassInfo.mFinalizer);
+  SkCanvas* previousCanvas = reinterpret_cast<SkCanvas*>(
+          env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas));
+  env->SetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas, (int)newCanvas);
+  env->SetIntField(canvasFinalizerObj, gCanvasFinalizerClassInfo.mNativeCanvas, (int)newCanvas);
+  SkSafeUnref(previousCanvas);
+}
+
 static jobject nativeLockCanvas(JNIEnv* env, jobject surfaceObj, jobject dirtyRectObj) {
     sp<Surface> surface(getSurface(env, surfaceObj));
     if (!Surface::isValid(surface)) {
@@ -409,8 +423,6 @@
     jobject canvasObj = env->GetObjectField(surfaceObj, gSurfaceClassInfo.mCanvas);
     env->SetIntField(canvasObj, gCanvasClassInfo.mSurfaceFormat, info.format);
 
-    SkCanvas* nativeCanvas = reinterpret_cast<SkCanvas*>(
-            env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas));
     SkBitmap bitmap;
     ssize_t bpr = info.s * bytesPerPixel(info.format);
     bitmap.setConfig(convertPixelFormat(info.format), info.w, info.h, bpr);
@@ -423,7 +435,9 @@
         // be safe with an empty bitmap.
         bitmap.setPixels(NULL);
     }
-    nativeCanvas->setBitmapDevice(bitmap);
+
+    SkCanvas* nativeCanvas = SkNEW_ARGS(SkCanvas, (bitmap));
+    swapCanvasPtr(env, canvasObj, nativeCanvas);
 
     SkRegion clipReg;
     if (dirtyRegion.isRect()) { // very common case
@@ -440,9 +454,6 @@
 
     nativeCanvas->clipRegion(clipReg);
 
-    int saveCount = nativeCanvas->save();
-    env->SetIntField(surfaceObj, gSurfaceClassInfo.mCanvasSaveCount, saveCount);
-
     if (dirtyRectObj) {
         const Rect& bounds(dirtyRegion.getBounds());
         env->SetIntField(dirtyRectObj, gRectClassInfo.left, bounds.left);
@@ -467,12 +478,8 @@
     }
 
     // detach the canvas from the surface
-    SkCanvas* nativeCanvas = reinterpret_cast<SkCanvas*>(
-            env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas));
-    int saveCount = env->GetIntField(surfaceObj, gSurfaceClassInfo.mCanvasSaveCount);
-    nativeCanvas->restoreToCount(saveCount);
-    nativeCanvas->setBitmapDevice(SkBitmap());
-    env->SetIntField(surfaceObj, gSurfaceClassInfo.mCanvasSaveCount, 0);
+    SkCanvas* nativeCanvas = SkNEW(SkCanvas);
+    swapCanvasPtr(env, canvasObj, nativeCanvas);
 
     // unlock surface
     status_t err = surface->unlockAndPost();
@@ -888,14 +895,16 @@
             env->GetFieldID(gSurfaceClassInfo.clazz, "mGenerationId", "I");
     gSurfaceClassInfo.mCanvas =
             env->GetFieldID(gSurfaceClassInfo.clazz, "mCanvas", "Landroid/graphics/Canvas;");
-    gSurfaceClassInfo.mCanvasSaveCount =
-            env->GetFieldID(gSurfaceClassInfo.clazz, "mCanvasSaveCount", "I");
     gSurfaceClassInfo.ctor = env->GetMethodID(gSurfaceClassInfo.clazz, "<init>", "()V");
 
     clazz = env->FindClass("android/graphics/Canvas");
+    gCanvasClassInfo.mFinalizer = env->GetFieldID(clazz, "mFinalizer", "Landroid/graphics/Canvas$CanvasFinalizer;");
     gCanvasClassInfo.mNativeCanvas = env->GetFieldID(clazz, "mNativeCanvas", "I");
     gCanvasClassInfo.mSurfaceFormat = env->GetFieldID(clazz, "mSurfaceFormat", "I");
 
+    clazz = env->FindClass("android/graphics/Canvas$CanvasFinalizer");
+    gCanvasFinalizerClassInfo.mNativeCanvas = env->GetFieldID(clazz, "mNativeCanvas", "I");
+
     clazz = env->FindClass("android/graphics/Rect");
     gRectClassInfo.left = env->GetFieldID(clazz, "left", "I");
     gRectClassInfo.top = env->GetFieldID(clazz, "top", "I");
diff --git a/core/jni/android_view_TextureView.cpp b/core/jni/android_view_TextureView.cpp
index 87b312f..64cbda3 100644
--- a/core/jni/android_view_TextureView.cpp
+++ b/core/jni/android_view_TextureView.cpp
@@ -43,11 +43,16 @@
 } gRectClassInfo;
 
 static struct {
-    jfieldID nativeCanvas;
-    jfieldID surfaceFormat;
+    jfieldID mFinalizer;
+    jfieldID mNativeCanvas;
+    jfieldID mSurfaceFormat;
 } gCanvasClassInfo;
 
 static struct {
+    jfieldID mNativeCanvas;
+} gCanvasFinalizerClassInfo;
+
+static struct {
     jfieldID nativeWindow;
 } gTextureViewClassInfo;
 
@@ -120,6 +125,15 @@
     }
 }
 
+static inline void swapCanvasPtr(JNIEnv* env, jobject canvasObj, SkCanvas* newCanvas) {
+  jobject canvasFinalizerObj = env->GetObjectField(canvasObj, gCanvasClassInfo.mFinalizer);
+  SkCanvas* previousCanvas = reinterpret_cast<SkCanvas*>(
+          env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas));
+  env->SetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas, (int)newCanvas);
+  env->SetIntField(canvasFinalizerObj, gCanvasFinalizerClassInfo.mNativeCanvas, (int)newCanvas);
+  SkSafeUnref(previousCanvas);
+}
+
 static void android_view_TextureView_lockCanvas(JNIEnv* env, jobject,
         jint nativeWindow, jobject canvas, jobject dirtyRect) {
 
@@ -157,9 +171,10 @@
         bitmap.setPixels(NULL);
     }
 
-    SET_INT(canvas, gCanvasClassInfo.surfaceFormat, buffer.format);
-    SkCanvas* nativeCanvas = (SkCanvas*) GET_INT(canvas, gCanvasClassInfo.nativeCanvas);
-    nativeCanvas->setBitmapDevice(bitmap);
+    SET_INT(canvas, gCanvasClassInfo.mSurfaceFormat, buffer.format);
+
+    SkCanvas* nativeCanvas = SkNEW_ARGS(SkCanvas, (bitmap));
+    swapCanvasPtr(env, canvas, nativeCanvas);
 
     SkRect clipRect;
     clipRect.set(rect.left, rect.top, rect.right, rect.bottom);
@@ -174,8 +189,8 @@
 static void android_view_TextureView_unlockCanvasAndPost(JNIEnv* env, jobject,
         jint nativeWindow, jobject canvas) {
 
-    SkCanvas* nativeCanvas = (SkCanvas*) GET_INT(canvas, gCanvasClassInfo.nativeCanvas);
-    nativeCanvas->setBitmapDevice(SkBitmap());
+    SkCanvas* nativeCanvas = SkNEW(SkCanvas);
+    swapCanvasPtr(env, canvas, nativeCanvas);
 
     if (nativeWindow) {
         sp<ANativeWindow> window((ANativeWindow*) nativeWindow);
@@ -226,8 +241,12 @@
     GET_FIELD_ID(gRectClassInfo.bottom, clazz, "bottom", "I");
 
     FIND_CLASS(clazz, "android/graphics/Canvas");
-    GET_FIELD_ID(gCanvasClassInfo.nativeCanvas, clazz, "mNativeCanvas", "I");
-    GET_FIELD_ID(gCanvasClassInfo.surfaceFormat, clazz, "mSurfaceFormat", "I");
+    GET_FIELD_ID(gCanvasClassInfo.mFinalizer, clazz, "mFinalizer", "Landroid/graphics/Canvas$CanvasFinalizer;");
+    GET_FIELD_ID(gCanvasClassInfo.mNativeCanvas, clazz, "mNativeCanvas", "I");
+    GET_FIELD_ID(gCanvasClassInfo.mSurfaceFormat, clazz, "mSurfaceFormat", "I");
+
+    FIND_CLASS(clazz, "android/graphics/Canvas$CanvasFinalizer");
+    GET_FIELD_ID(gCanvasFinalizerClassInfo.mNativeCanvas, clazz, "mNativeCanvas", "I");
 
     FIND_CLASS(clazz, "android/view/TextureView");
     GET_FIELD_ID(gTextureViewClassInfo.nativeWindow, clazz, "mNativeWindow", "I");
diff --git a/core/jni/com_android_internal_os_ZygoteInit.cpp b/core/jni/com_android_internal_os_ZygoteInit.cpp
index 7e5dede..bc8c4a7 100644
--- a/core/jni/com_android_internal_os_ZygoteInit.cpp
+++ b/core/jni/com_android_internal_os_ZygoteInit.cpp
@@ -163,32 +163,6 @@
     }
 }
 
-static void com_android_internal_os_ZygoteInit_setCapabilities (JNIEnv *env,
-    jobject clazz, jlong permitted, jlong effective)
-{
-    struct __user_cap_header_struct capheader;
-    struct __user_cap_data_struct capdata;
-    int err;
-
-    memset (&capheader, 0, sizeof(capheader));
-    memset (&capdata, 0, sizeof(capdata));
-
-    capheader.version = _LINUX_CAPABILITY_VERSION;
-    capheader.pid = 0;
-
-    // As of this writing, capdata is __u32, but that's expected
-    // to change...
-    capdata.effective = effective;
-    capdata.permitted = permitted;
-
-    err = capset (&capheader, &capdata);
-
-    if (err < 0) {
-        jniThrowIOException(env, errno);
-        return;
-    }
-}
-
 static jlong com_android_internal_os_ZygoteInit_capgetPermitted (JNIEnv *env,
     jobject clazz, jint pid)
 {
@@ -304,8 +278,6 @@
             (void *) com_android_internal_os_ZygoteInit_reopenStdio},
     { "setCloseOnExec", "(Ljava/io/FileDescriptor;Z)V",
         (void *)  com_android_internal_os_ZygoteInit_setCloseOnExec},
-    { "setCapabilities", "(JJ)V",
-        (void *) com_android_internal_os_ZygoteInit_setCapabilities },
     { "capgetPermitted", "(I)J",
         (void *) com_android_internal_os_ZygoteInit_capgetPermitted },
     { "selectReadable", "([Ljava/io/FileDescriptor;)I",
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index a69870b..5783bf6 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -196,7 +196,7 @@
         android:permissionGroupFlags="personalInfo"
         android:priority="360"/>
 
-  <!-- Allows an application to send SMS messages. -->
+    <!-- Allows an application to send SMS messages. -->
     <permission android:name="android.permission.SEND_SMS"
         android:permissionGroup="android.permission-group.MESSAGES"
         android:protectionLevel="dangerous"
@@ -204,14 +204,13 @@
         android:label="@string/permlab_sendSms"
         android:description="@string/permdesc_sendSms" />
 
-    <!-- Allows an application to send SMS messages via the Messaging app with no user
-         input or confirmation.
-         @hide -->
-    <permission android:name="android.permission.SEND_SMS_NO_CONFIRMATION"
+    <!-- Allows an application (Phone) to send a request to other applications
+         to handle the respond-via-message action during incoming calls. -->
+    <permission android:name="android.permission.SEND_RESPOND_VIA_MESSAGE"
         android:permissionGroup="android.permission-group.MESSAGES"
         android:protectionLevel="signature|system"
-        android:label="@string/permlab_sendSmsNoConfirmation"
-        android:description="@string/permdesc_sendSmsNoConfirmation" />
+        android:label="@string/permlab_sendRespondViaMessageRequest"
+        android:description="@string/permdesc_sendRespondViaMessageRequest" />
 
     <!-- Allows an application to monitor incoming SMS messages, to record
          or perform processing on them. -->
@@ -532,6 +531,31 @@
         android:label="@string/permlab_addVoicemail"
         android:description="@string/permdesc_addVoicemail" />
 
+    <!-- =============================================== -->
+    <!-- Permissions for enabling accessibility features -->
+    <!-- =============================================== -->
+
+    <!-- Used for permissions that allow requesting certain accessibility features. -->
+    <permission-group android:name="android.permission-group.ACCESSIBILITY_FEATURES"
+        android:label="@string/permgrouplab_accessibilityFeatures"
+        android:icon="@drawable/perm_group_accessibility_features"
+        android:description="@string/permgroupdesc_accessibilityFeatures"
+        android:priority="380" />
+
+    <!-- Allows an accessibility service to request touch exploration mode. -->
+    <permission android:name="android.permission.CAN_REQUEST_TOUCH_EXPLORATION_MODE"
+        android:permissionGroup="android.permission-group.ACCESSIBILITY_FEATURES"
+        android:label="@string/permlab_canRequestTouchExplorationMode"
+        android:description="@string/permdesc_canRequestTouchExplorationMode"
+        android:protectionLevel="dangerous" />
+
+    <!-- Allows an accessibility service to request enhanced web accessibility. -->
+    <permission android:name="android.permission.CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY"
+        android:permissionGroup="android.permission-group.ACCESSIBILITY_FEATURES"
+        android:label="@string/permlab_canRequestEnahncedWebAccessibility"
+        android:description="@string/permdesc_canRequestEnahncedWebAccessibility"
+        android:protectionLevel="dangerous" />
+
     <!-- ======================================= -->
     <!-- Permissions for accessing location info -->
     <!-- ======================================= -->
@@ -690,6 +714,12 @@
         android:permissionGroup="android.permission-group.NETWORK"
         android:protectionLevel="signature|system" />
 
+    <!-- Allows access to the loop radio (Android@Home mesh network) device.
+	@hide -->
+    <permission android:name="android.permission.LOOP_RADIO"
+	android:permissionGroup="android.permission-group.NETWORK"
+	android:protectionLevel="signature|system" />
+    
     <!-- ================================== -->
     <!-- Permissions for accessing accounts -->
     <!-- ================================== -->
@@ -1702,6 +1732,13 @@
         android:description="@string/permdesc_stopAppSwitches"
         android:protectionLevel="signature|system" />
 
+    <!-- Allows an application to retrieve private information about
+         the current top activity, such as any assist context it can provide. -->
+    <permission android:name="android.permission.GET_TOP_ACTIVITY_INFO"
+        android:label="@string/permlab_getTopActivityInfo"
+        android:description="@string/permdesc_getTopActivityInfo"
+        android:protectionLevel="signature" />
+
     <!-- Allows an application to retrieve the current state of keys and
          switches.  This is only for use by the system.
          @deprecated The API that used this permission has been removed. -->
@@ -1717,7 +1754,7 @@
         android:description="@string/permdesc_bindInputMethod"
         android:protectionLevel="signature" />
 
-        <!-- Must be required by an {@link android.accessibilityservice.AccessibilityService},
+    <!-- Must be required by an {@link android.accessibilityservice.AccessibilityService},
          to ensure that only the system can bind to it. -->
     <permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"
         android:label="@string/permlab_bindAccessibilityService"
@@ -2252,6 +2289,12 @@
             </intent-filter>
         </receiver>
 
+        <receiver android:name="com.android.server.updates.TZInfoInstallReceiver" >
+            <intent-filter>
+                <action android:name="android.intent.action.UPDATE_TZINFO" />
+            </intent-filter>
+        </receiver>
+
         <receiver android:name="com.android.server.MasterClearReceiver"
             android:permission="android.permission.MASTER_CLEAR"
             android:priority="100" >
diff --git a/core/res/res/drawable-hdpi/perm_group_accessibility_features.png b/core/res/res/drawable-hdpi/perm_group_accessibility_features.png
new file mode 100755
index 0000000..849c19c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/perm_group_accessibility_features.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/perm_group_accessibility_features.png b/core/res/res/drawable-mdpi/perm_group_accessibility_features.png
new file mode 100755
index 0000000..ba86d3d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/perm_group_accessibility_features.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/perm_group_accessibility_features.png b/core/res/res/drawable-xhdpi/perm_group_accessibility_features.png
new file mode 100644
index 0000000..2fec7a3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/perm_group_accessibility_features.png
Binary files differ
diff --git a/core/res/res/layout-xlarge/screen_action_bar.xml b/core/res/res/layout-xlarge/screen_action_bar.xml
index 751d322..0b6122d 100644
--- a/core/res/res/layout-xlarge/screen_action_bar.xml
+++ b/core/res/res/layout-xlarge/screen_action_bar.xml
@@ -20,7 +20,8 @@
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
-    android:fitsSystemWindows="true">
+    android:fitsSystemWindows="true"
+    android:splitMotionEvents="false">
     <com.android.internal.widget.ActionBarContainer android:id="@+id/action_bar_container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
diff --git a/core/res/res/layout-xlarge/screen_action_bar_overlay.xml b/core/res/res/layout-xlarge/screen_action_bar_overlay.xml
index f2a1ea1..a95635e 100644
--- a/core/res/res/layout-xlarge/screen_action_bar_overlay.xml
+++ b/core/res/res/layout-xlarge/screen_action_bar_overlay.xml
@@ -23,7 +23,8 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/action_bar_overlay_layout"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:splitMotionEvents="false">
     <FrameLayout android:id="@android:id/content"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
diff --git a/core/res/res/layout/action_bar_home.xml b/core/res/res/layout/action_bar_home.xml
index fe58215..5341f3d 100644
--- a/core/res/res/layout/action_bar_home.xml
+++ b/core/res/res/layout/action_bar_home.xml
@@ -17,9 +17,7 @@
 <view xmlns:android="http://schemas.android.com/apk/res/android"
       class="com.android.internal.widget.ActionBarView$HomeView"
       android:layout_width="wrap_content"
-      android:layout_height="match_parent"
-      android:background="?android:attr/actionBarItemBackground"
-      android:animateLayoutChanges="true">
+      android:layout_height="match_parent">
     <ImageView android:id="@android:id/up"
                android:src="?android:attr/homeAsUpIndicator"
                android:layout_gravity="center_vertical|start"
diff --git a/core/res/res/layout/action_bar_title_item.xml b/core/res/res/layout/action_bar_title_item.xml
index df773eb..ccc5b07 100644
--- a/core/res/res/layout/action_bar_title_item.xml
+++ b/core/res/res/layout/action_bar_title_item.xml
@@ -16,10 +16,9 @@
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
+              android:layout_height="match_parent"
               android:orientation="horizontal"
               android:paddingEnd="8dip"
-              android:background="?android:attr/actionBarItemBackground"
               android:enabled="false">
 
     <ImageView android:id="@android:id/up"
diff --git a/core/res/res/layout/action_bar_up_container.xml b/core/res/res/layout/action_bar_up_container.xml
new file mode 100644
index 0000000..c6fad64
--- /dev/null
+++ b/core/res/res/layout/action_bar_up_container.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+      android:layout_width="wrap_content"
+      android:layout_height="match_parent"
+      android:background="?android:attr/actionBarItemBackground"
+      android:gravity="center_vertical"
+      android:enabled="false">
+</LinearLayout>
diff --git a/core/res/res/layout/screen_action_bar.xml b/core/res/res/layout/screen_action_bar.xml
index b0f1bc5..f0b2313 100644
--- a/core/res/res/layout/screen_action_bar.xml
+++ b/core/res/res/layout/screen_action_bar.xml
@@ -22,7 +22,8 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
-    android:fitsSystemWindows="true">
+    android:fitsSystemWindows="true"
+    android:splitMotionEvents="false">
     <com.android.internal.widget.ActionBarContainer android:id="@+id/action_bar_container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
diff --git a/core/res/res/layout/screen_action_bar_overlay.xml b/core/res/res/layout/screen_action_bar_overlay.xml
index 20a7db1..c8181d1 100644
--- a/core/res/res/layout/screen_action_bar_overlay.xml
+++ b/core/res/res/layout/screen_action_bar_overlay.xml
@@ -23,7 +23,8 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/action_bar_overlay_layout"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:splitMotionEvents="false">
     <FrameLayout android:id="@android:id/content"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
diff --git a/core/res/res/layout/search_view.xml b/core/res/res/layout/search_view.xml
index a281fcc..29c0576 100644
--- a/core/res/res/layout/search_view.xml
+++ b/core/res/res/layout/search_view.xml
@@ -45,6 +45,7 @@
         android:layout_height="match_parent"
         android:layout_gravity="center_vertical"
         android:src="?android:attr/searchViewSearchIcon"
+        android:focusable="true"
         android:contentDescription="@string/searchview_description_search"
     />
 
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index ad64eb6..d162f69 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Stoor"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Gebruik die USB-berging."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Lees die SD-kaart."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Toeganklikheidseienskappe"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Kenmerke wat bystandtegnologie kan versoek."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"deaktiveer of verander statusbalk"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Laat die program toe om die statusbalk te deaktiveer en stelselikone by te voeg of te verwyder."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"statusbalk"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Plaas die aktiwiteitbestuurder in \'n afsluitingstatus. Doen nie \'n volledige afsluiting nie."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"verhoed program-oorskakelings"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Verhoed dat die gebruiker na \'n ander program oorskakel."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"kry huidige program-inligting"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Laat die houer toe om private inligting oor die huidige program op die voorgrond van die skerm te herwin."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"monitor en beheer alle programlaaiery"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Laat die program toe om te monitor en te beheer hoe die stelsel aktiwiteite laai. Kwaadwillige programme kan dalk die stelsel heeltemal in gevaar stel. Hierdie toestemming is net nodig vir ontwikkeling, en nooit vir normale gebruik nie."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"stuur uitsending met pakket verwyder"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Laat \'n program toe om die huidige lae-vlak batteryverbruikdata te lees. Kan die program toelaat om gedetailleerde inligting te vind oor watter programme jy gebruik."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"verander batterystatistieke"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Laat die program toe om versamelde battery-statistieke te verander. Nie vir gebruik deur normale programme nie."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"haal programwerking-statistieke op"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Laat die program toe om versamelde programwerking-statistieke te herwin. Nie vir gebruik deur normale programme nie."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"verander programwerking-statistieke"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Laat die program toe om versamelde programwerking-statistieke te verander. Nie vir gebruik deur normale programme nie."</string>
     <string name="permlab_backup" msgid="470013022865453920">"beheerstelsel-rugsteun en -teruglaai"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Dit laat die houer toe om aan die topvlak-koppelvlak van \'n invoermetode te bind. Dit moet nooit vir normale programme nodig wees nie."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"verbind aan \'n toeganklikheidsdiens"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Dit laat die houer toe om aan die top-koppelvlak van \'n toeganklikheidsdiens te verbind. Behoort nooit vir gewone programme nodig te wees nie."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"versoek verken-met-aanraking"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Laat die houer toe om \'n interaksiemodus te versoek waarin geraakte items hardop uitgespreek word en die UI via handgebare verken kan word."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"versoek verbeterde webtoeganklikheid"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"bind aan \'n teksdiens"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Dit laat die houer toe om aan die topvlak-koppelvlak van \'n teksdiens (bv SpellCheckerService) te bind. Dit moet nooit vir normale programme nodig wees nie."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"bind aan \'n VPN-diens"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 9fa0a06..623832b 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"ማከማቻ"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"የUSB ማከማቻ ድረስ።"</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD ካርድ ድረስ"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"የተደራሽነት ባህሪያት"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"አጋዥ ቴክኖሎጂ ሊጠይቃቸው የሚችላቸው ባህሪያት።"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"የሁኔቴ አሞሌ አቦዝን ወይም ቀይር"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"የስርዓት አዶዎችን ወደ ሁኔታ አሞሌ ላለማስቻል ወይም ለማከል እና ለማስወገድ ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"ኹናቴ አሞሌ"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"የእንቅስቃሴውን አደራጅ ወደ ዝጋ ሁነታ አስቀምጥ።ሙሉ ለሙሉ ዝጋ አያከናውንም።"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"የትግበራ መቀያየርን ተከላከል"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"ተጠቃሚው ከሌላ መተግበሪያ ከመቀየር ይከላከላል።"</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"የአሁኑ የመተግበሪያ መረጃ ያግኙ"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"ያዢው በማያ ገጹ ፊት ላይ ስላለው የአሁኑ መተግበሪያ የግል መረጃ እንዲያመጣ ያስችለዋል።"</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"ሁሉንም መተግበሪያ ማስነሻ አሳይ እና ተቆጣጠር"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"እንቅስቃሴዎችን ስርዓቱ እንዴት እንደሚያስጀምር ለመከታተል እና ለመቆጣጠር ለመተግበሪያው ይፈቅዳሉ፡፡ ተንኮል አዘል መተግበሪያዎች የስርዓቱን ክብረ ገመና ሙሉለሙሉ ሊያጋልጡ ይችላሉ፡፡ ይህ ፍቃድ የሚያስፈልገው ለግንባታ ብቻ ነው፤ ለመደበኛ አጠቃቀም ፈጽሞ አይደለም፡፡"</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"አካታች የተወገደለት ስርጭት ላክ"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"አንድ መተግበሪያ የአሁኑን የዝቅተኛ-ደረጃ ባትሪ አጠቃቀም ውሂብን እንዲያነብ ያስችላል። መተግበሪያው ስለሚጠቀሟቸው መተግበሪያዎች ዝርዝር መረጃ እንዲያገኝ ሊያስችለው ይችላል።"</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"የባትሪ ስታስቲክስን ይቀይራል"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"የተሰበሰቡ የባትሪ  ስታስቲክሶችን እንዲቀይር ለመተግበሪያው ያስችለዋል። ለመደበኛ መተግበሪያዎች ጥቅም አይደለም።"</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"የመተግበሪያ ክወናዎች ስታቲስቲክስን ሰርስረህ አውጣ"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"መተግበሪያው የተሰበሰቡ የክወና ስታስቲክሶችን ሰርስሮ እንዲያወጣ ይፈቅድለታል። ለመደበኛ መተግበሪያዎች ጥቅም ያልሆነ።"</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"የመተግበሪያ ክወናዎች ስታቲስቲክስን ይቀይሩ"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"መተግበሪያው የተሰበሰቡ የክወና ስታስቲክሶችን እንዲቀይር ይፈቅድሎታል። ለመደበኛ መተግበሪያዎች ጥቅም ያልሆነ።"</string>
     <string name="permlab_backup" msgid="470013022865453920">"የስርዓት መጠባበቂያን ተቆጣጠር እናእነበረበት መልስ"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"ያዡ ግቤት ስልቱን ወደ ከፍተኛ-ደረጃ በይነገጽ ለመጠረዝ ይፈቅዳሉ። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"ከአንድ የተደራሽነት አገልግሎት ጋር እሰር"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"ያዢው ወደ የአንድ ተደራሽነት አገልግሎት ከፍተኛ-ደረጃ በይነገጽ እንዲያስር ይፈቅድለታል። ለመደበኛ መተግበሪያዎች መቼም ቢሆን ሊያስፈልግ አይገባም።"</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"በንክኪ ማሰስን ይጠይቁ"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"ያዢው የተነኩ ንጥሎች ጮክ ተብለው የሚነገሩበት እና በይነገጹ በምልክቶች በኩል ሊታሰስ በሚችሉበት የበይነግንኙነት ሁኒታ እንዲጠይቅ ያስችለዋል።"</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"የተሻሻለ የድር ተደራሽነት ይጠይቁ"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"ለፅሁፍ አገልግሎት አሰረ"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"ያዡ ግቤት ለከፍተኛ-ደረጃ የፅሁፍ አገልግሎት ገፅታ ለመጠረዝ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"ለVPN አገልግሎት ተገዛ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index d919829..dc97ead 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"التخزين"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"الدخول إلى وحدة تخزين USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"الدخول إلى بطاقة SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"ميزات إمكانية الوصول"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"الميزات التي يمكن للتقنية المساعدة طلبها"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"تعطيل شريط الحالة أو تعديله"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"للسماح للتطبيق بتعطيل شريط الحالة أو إضافة رموز نظام وإزالتها."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"شريط الحالة"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"لوضع مدير الأنشطة في حالة إيقاف التشغيل. لا يتم تنفيذ إيقاف تشغيل كامل."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"منع التبديل بين التطبيقات"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"لمنع المستخدم من التبديل إلى تطبيق آخر."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"الحصول على معلومات عن التطبيق الحالي"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"للسماح للمالك باسترداد معلومات خاصة عن التطبيق الحالي في مقدمة الشاشة."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"مراقبة بدء تشغيل جميع التطبيقات والتحكم فيها"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"للسماح للتطبيق بمراقبة كيفية بدء النظام للأنشطة والتحكم فيها. قد تُعرِّض التطبيقات الضارة النظام للضرر بشكل كامل. لن تكون هناك حاجة لهذا الإذن سوى للتطوير فقط، وليس للاستخدام العادي على الإطلاق."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"إرسال بث الحزمة الذي تمت إزالته"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"للسماح لتطبيق بقراءة البيانات الحالية التي تستهلك مستوى منخفضًا من البطارية. قد يتيح التطبيق معرفة معلومات تفصيلية عن التطبيقات التي تستخدمها."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"تعديل إحصاءات البطارية"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"للسماح للتطبيق بتعديل إحصاءات البطارية المجمّعة. ليس للاستخدام بواسطة التطبيقات العادية."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"استرداد إحصاءات عمليات التطبيق"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"للسماح للتطبيق باسترداد إحصاءات عمليات التطبيق المجمّعة. ليس للاستخدام بواسطة التطبيقات العادية."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"تعديل إحصاءات تشغيل التطبيق"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"للسماح للتطبيق بتعديل إحصاءات تشغيل التطبيق المجمّعة. ليس للاستخدام بواسطة التطبيقات العادية."</string>
     <string name="permlab_backup" msgid="470013022865453920">"التحكم في النسخة الاحتياطية للنظام واستعادتها"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لأسلوب الإدخال. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"الالتزام بخدمة إمكانية الدخول"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة إمكانية الدخول. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"طلب الاستكشاف باللمس"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"للسماح للمالك بطلب وضع التفاعل الذي يتم فيه النطق بالعناصر الملموسة بصوت عالٍ واستكشاف واجهة المستخدم بالإيماءات."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"طلب إمكانية وصول محسنة"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"الالتزام بخدمة إدخال النصوص"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة إدخال النصوص (على سبيل المثال، SpellCheckerService). لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"الالتزام بخدمة VPN"</string>
@@ -779,7 +790,7 @@
     <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"زر الإيقاف المؤقت"</string>
     <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"زر التشغيل"</string>
     <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"زر الإيقاف"</string>
-    <string name="emergency_calls_only" msgid="6733978304386365407">"مكالمات الطوارئ فقط"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"مكالمات طوارئ فقط"</string>
     <string name="lockscreen_network_locked_message" msgid="143389224986028501">"الشبكة مؤمّنة"</string>
     <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"بطاقة SIM مؤمّنة بكود PUK."</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"راجع دليل المستخدم أو اتصل بخدمة العملاء."</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 0b37f93..6e14c0e 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Сховішча"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Атрымаць доступ да USB-назапашвальнiка."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ да SD-карты."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Спецыяльныя магчымасці"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Функцыі, якія могуць запытаць дадатковыя тэхналогii."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"адключаць ці змяняць радок стану"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Дазваляе прыкладанням адключаць радок стану або дадаваць і выдаляць сістэмныя значкі."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"радок стану"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Спыняе дзейнасць менеджэра. Не выконвае поўнае адключэнне."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"прадухіляць пераключэнне прыкладанняў"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Не дазваляе карыстальніку пераходзіць да іншага прыкладання."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"атрымаць бягучую інфармацыю прыкладання"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Дазваляе ўладальніку атрымлiваць асабістую інфармацыю аб бягучым прыкладаннi на пярэднім плане экрана."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"адсочваць і кантраляваць запуск усіх прыкладанняў"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Дазваляе прыкладанню сачыць і кантраляваць, як сістэма запускае працэсы. Шкоднасныя прыкладанні могуць цалкам парушыць працу сістэмы. Гэты дазвол патрэбны толькі для распрацоўкі, ніколі для звычайнага выкарыстання."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"трансляваць паведамленні аб выдаленні пакетаў"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Прыкладанне можа счытваць бягучыя звесткi пры нiзкi зарад акумулятара. Прыкладанне можа знайсцi падрабязную iнфармацы. пра прыкладаннi, якiя вы выкарыстоўваеце."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"змяняць статыстыку батарэі"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Дазваляе прыкладанням змяняць сабраную статыстыку батарэi. Не патрабуецца для звычайных прыкладанняў."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"атрымлiваць статыстыку выкарыстання прыкладання"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Дазваляе прыкладанню атрымлiваць сабраную статыстыку выкарыстання прыкладання. Не для выкарыстання звычайнымі прыкладаннямі."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"змяняць статыстыку выкарыстання прыкладання"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Дазваляе прыкладанню змяняць сабраную статыстыку выкарыстання прыкладання. Не для выкарыстання звычайнымі прыкладаннямі."</string>
     <string name="permlab_backup" msgid="470013022865453920">"кантраляваць рэзервовае капіяванне і аднаўленне сістэмы"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню метада ўводу. Не патрабуецца для звычайных прыкладанняў."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"прывязацца да службы доступу"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню службы доступу. Не патрабуецца для звычайных прыкладанняў."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"запытаць даследаванне навобмацак"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Дазваляе ўладальнiку запытваць працу ў рэжыме ўзаемадзеяння, у якiм элементы, да якiх дакранулiся, прагаворваюцца ўслых, а карыстальнiцкi iнтэрфейс можна даследаваць рукамi."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"прасіць пашырэння даступнасці вэб-даступнасцi"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"звязаць з тэкставай службай"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню тэкставай паслугі (напрыклад, SpellCheckerService). Ніколі не патрабуецца для звычайных прыкладанняў."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"звязвацца з VPN сэрвісам"</string>
@@ -1452,7 +1463,7 @@
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google."\n\n" Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google."\n\n" Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
-    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Выдаліць"</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Выдалiць"</string>
     <string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Павялiчыць гук больш за рэкамендаваны ўзровень?"\n"Доўгае слуханне музыкi на вялiкай гучнасцi можа пашкодзiць ваш слых."</string>
     <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Утрымлiвайце два пальцы, каб уключыць доступ."</string>
     <string name="accessibility_enabled" msgid="1381972048564547685">"Даступнасць уключана."</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 9bb46c1..8af17de 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Съхранение"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Достъп до USB хранилището."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Достъп до SD картата."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Функции за достъпност"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Функции, които подпомагащата технология може да заяви."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"деактивиране или промяна на лентата на състоянието"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Разрешава на приложението да деактивира лентата на състоянието или да добавя и премахва системни икони."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"лента на състоянието"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Изключва диспечера на дейностите. Не извършва пълно изключване."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"предотвратяване на превключването между приложения"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Не позволява на потребителя да превключва към друго приложение."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"извличане на информация за текущото приложение"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Разрешава на собственика да извлича частна информация за текущото приложение на преден план на екрана."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"наблюдение и контрол на стартирането на всички приложения"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Разрешава на приложението да наблюдава и контролира как системата стартира дейности. Злонамерените приложения могат изцяло да компрометират системата. Това разрешение е нужно само за програмиране, никога за нормална употреба."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"изпращане на излъчване при премахнат пакет"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Разрешава на приложението да чете текущите данни за работа при ниско ниво на батерията. Може да му разреши да намери подробна информация за ползваните от вас приложения."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"промяна на статистическите данни за батерията"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Разрешава на приложението да променя събраните статистически данни за батерията. Не е предназначено за нормални приложения."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"извличане на статистическите данни за операциите на приложението"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Разрешава на приложението да извлича събраните статистически данни за операциите си. Не е предназначено за нормални приложения."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"промяна на статистическите данни за операциите на приложението"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Разрешава на приложението да променя събраните статистически данни за операциите си. Не е предназначено за нормални приложения."</string>
     <string name="permlab_backup" msgid="470013022865453920">"контролиране на създаването и възстановяването на резервни копия на системата"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на метод на въвеждане. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"обвързване с услуга за достъпност"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на услуга за достъпност. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"заявяване на изследване чрез докосване"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Разрешава на собственика да заяви режим на взаимодействие, при който докоснатите елементи се изговарят на глас и потребителският интерфейс може да бъде изследван чрез жестове."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"заявяване на подобрена достъпност в мрежата"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"обвързване с текстова услуга"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на текстова услуга (напр. SpellCheckerService). Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"обвързване с услуга за VPN"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index eeda2cc..1a4f58c 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Emmagatzematge"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accedeix a l\'emmag. USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accedeix a la targeta SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funcions d\'accessibilitat"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funcions que pot sol·licitar la tecnologia d\'assistència."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"desactivar o modificar la barra d\'estat"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Permet que l\'aplicació desactivi la barra d\'estat o afegeixi i elimini icones del sistema."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"barra d\'estat"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Posa el gestor d\'activitats en estat d\'apagada. No fa una apagada completa."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir els canvis d\'aplicació"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Impedeix que l\'usuari canviï a una altra aplicació."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"obtenció d\'informació de l\'aplicació actual"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Permet que el titular recuperi informació privada sobre l\'aplicació actual al primer pla de la pantalla."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"supervisa i controla tots els inicis d\'aplicacions"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Permet que l\'aplicació supervisi i controli com el sistema inicia activitats. Les aplicacions malicioses poden comprometre totalment el sistema. Aquest permís només és necessari per al desenvolupament, mai per a l\'ús normal."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"enviar difusió d\'eliminació de paquet"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Permet que l\'aplicació llegeixi l\'ús de dades actual quan hi ha poca bateria. Pot permetre que l\'aplicació recopili informació detallada sobre les aplicacions que fas servir."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modifica les estadístiques de la bateria"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Permet que l\'aplicació modifiqui les estadístiques d\'ús de la bateria recopilades. No ho poden fer servir les aplicacions normals."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"recuperació d\'estadístiques d\'ús de l\'aplicació"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Permet que l\'aplicació recuperi les estadístiques d\'ús de l\'aplicació recopilades. No indicat per a les aplicacions normals."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modifica les estadístiques d\'ús de l\'aplicació"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Permet que l\'aplicació modifiqui les estadístiques d\'ús de l\'aplicació recopilades. No indicat per a les aplicacions normals."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlar la còpia de seguretat i restauració del sistema"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permet que el titular vinculi a la interfície de nivell superior d\'un mètode d\'entrada. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"vincular amb un servei d\'accessibilitat"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permet vincular amb la interfície de nivell superior d\'un servei d\'accessibilitat. Les aplicacions normals no haurien de necessitar-ho."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"sol·licitud d\'exploració tàctil"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Permet que el titular sol·liciti un mode d\'interacció en què els elements que es toquin es llegeixin en veu alta i la interfície d\'usuari es pugui explorar mitjançant gestos."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"sol·licitud d\'accessibilitat web millorada"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"vincula a un servei de text"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Permet al titular vincular amb la interfície de nivell superior d\'un servei de text (per exemple, SpellCheckerService). Les aplicacions normals mai no ho haurien de necessitar."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"vincula a un servei de VPN"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index f39e602..504b207 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Úložiště"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Přístup do úložiště USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Přístup ke kartě SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funkce usnadnění"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funkce, o které může asistenční technologie požádat."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"zakázání či změny stavového řádku"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Umožňuje aplikaci zakázat stavový řádek nebo přidat či odebrat systémové ikony."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"stavový řádek"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Uvede správce činností do vypnutého stavu. Nedojde však k úplnému vypnutí."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zabránění přepínání aplikací"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Zabrání uživateli přepnout na jinou aplikaci."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"získat informace o aktuální aplikaci"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Umožňuje držiteli získat soukromé informace o aktuální aplikaci na popředí obrazovky."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"sledování a řízení spouštění všech aplikací"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Umožňuje aplikaci sledovat a řídit spouštění činností systémem. Škodlivé aplikace mohou systém zcela ovládnout. Toto oprávnění je požadováno pouze pro účely vývoje, nikdy pro běžné použití."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"odeslání vysílání o odstranění balíčku"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Umožňuje aplikaci číst aktuální podrobné údaje o využití baterie. Aplikace to může využít k získání podrobných informací o tom, které aplikace používáte."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"změna statistických údajů o baterii"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Umožňuje aplikaci upravit shromážděné statistiky o baterii. Toto oprávnění není určeno pro běžné aplikace."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"načtení statistik operací aplikace"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Umožňuje aplikaci načíst shromážděné statistiky operací aplikace. Toto oprávnění není určeno pro běžné aplikace."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"upravit statistiky operací aplikace"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Umožňuje aplikaci upravit shromážděné statistiky operací aplikace. Toto oprávnění není určeno pro běžné aplikace."</string>
     <string name="permlab_backup" msgid="470013022865453920">"ovládání zálohování a obnovy systému"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Umožňuje držiteli vázat se na nejvyšší úroveň rozhraní pro zadávání dat. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"navázat se na službu usnadnění přístupu"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní služby usnadnění přístupu. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"požádat o prozkoumání dotykem"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Umožňuje držiteli požádat o interaktivní režim, ve kterém jsou po dotyku vysloveny názvy položek a uživatelské rozhraní lze poznávat pomocí gest."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"požádat o usnadnění přístupu k webu"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"navázat se na textovou službu"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Umožňuje držiteli připojit se k nejvyšší úrovni rozhraní textové služby (např. SpellCheckerService). Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"navázat se na službu VPN"</string>
@@ -408,19 +419,19 @@
     <string name="permlab_writeContacts" msgid="5107492086416793544">"úprava kontaktů"</string>
     <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Umožňuje aplikaci upravit údaje o kontaktech uložených v tabletu včetně toho, jak často voláte, posíláte e-maily nebo komunikujete jinými způsoby s konkrétními kontakty. Toto oprávnění aplikacím umožňuje mazat údaje o kontaktech."</string>
     <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Umožňuje aplikaci upravit údaje o kontaktech uložených v telefonu včetně toho, jak často voláte, posíláte e-maily nebo komunikujete jinými způsoby s konkrétními kontakty. Toto oprávnění aplikacím umožňuje mazat údaje o kontaktech."</string>
-    <string name="permlab_readCallLog" msgid="3478133184624102739">"číst seznam hovorů"</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"čtení seznamu hovorů"</string>
     <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Umožňuje aplikaci číst seznam hovorů v tabletu, včetně dat o příchozích a odchozích hovorech. Toto oprávnění umožňuje aplikaci ukládat údaje ze seznamu hovorů. Škodlivé aplikace mohou tyto údaje bez vašeho vědomí sdílet."</string>
     <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"Umožňuje aplikaci číst seznam hovorů v telefonu, včetně dat o příchozích a odchozích hovorech. Toto oprávnění umožňuje aplikaci ukládat údaje ze seznamu hovorů. Škodlivé aplikace mohou tyto údaje bez vašeho vědomí sdílet."</string>
-    <string name="permlab_writeCallLog" msgid="8552045664743499354">"zapisovat seznam hovorů"</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"zápis do seznamu hovorů"</string>
     <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Umožňuje aplikaci upravovat seznam hovorů vašeho tabletu, včetně dat o příchozích a odchozích hovorech. Škodlivé aplikace to mohou zneužít k vymazání nebo změnám seznamu hovorů."</string>
     <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Umožňuje aplikaci upravovat seznam hovorů vašeho telefonu, včetně dat o příchozích a odchozích hovorech. Škodlivé aplikace to mohou zneužít k vymazání nebo změnám seznamu hovorů."</string>
     <string name="permlab_readProfile" msgid="4701889852612716678">"čtení vaší vlastní vizitky"</string>
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Umožňuje aplikaci číst údaje v osobním profilu uložené v zařízení, například jméno nebo kontaktní údaje. Znamená to, že vás aplikace může identifikovat a odeslat údaje z profilu dalším aplikacím."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"úprava vaší vlastní vizitky"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Umožňuje aplikaci změnit nebo přidat údaje osobního profilu uložené v zařízení, například jméno nebo kontaktní údaje. Znamená to, že vás aplikace může identifikovat a odeslat údaje z profilu dalším aplikacím."</string>
-    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"číst váš sociální stream"</string>
+    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"čtení vašeho sociálního streamu"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Umožňuje aplikaci získat přístup k sociálním aktualizacím od vašich přátel a synchronizaci těchto aktualizací. Při sdílení informací buďte opatrní – toto oprávnění umožňuje aplikaci číst komunikaci mezi vámi a vašimi přáteli v sociálních sítích bez ohledu na její důvěrnost. Poznámka: Toto oprávnění nemusí platit pro všechny sociální sítě."</string>
-    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"zapisovat do vašeho sociálního streamu"</string>
+    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"zápis do sociálního streamu"</string>
     <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Umožňuje aplikaci zobrazit sociální aktualizace od vašich přátel. Při sdílení informací buďte opatrní – aplikace s tímto oprávněním může vytvářet zprávy, které zdánlivě pochází od vašich přátel. Poznámka: Toto oprávnění nemusí platit pro všechny sociální sítě."</string>
     <string name="permlab_readCalendar" msgid="5972727560257612398">"čtení událostí kalendáře a důvěrné informace"</string>
     <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Umožňuje aplikaci číst všechny události kalendáře uložené v tabletu, včetně událostí přátel nebo spolupracovníků. Aplikace s tímto oprávněním může sdílet nebo ukládat údaje v kalendáři bez ohledu na důvěrnost nebo citlivost těchto údajů."</string>
@@ -503,8 +514,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Umožňuje aplikaci ovládat telefonní funkce zařízení. Aplikace s tímto oprávněním smí bez upozornění přepínat sítě, zapínat a vypínat bezdrátový modul telefonu a podobně."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"čtení stavu a identity telefonu"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Umožňuje aplikaci získat přístup k telefonním funkcím zařízení. Toto oprávnění umožňuje aplikaci zjistit telefonní číslo telefonu, identifikační čísla zařízení, zda zrovna probíhá hovor, a vzdálené číslo, ke kterému je hovor připojen."</string>
-    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zabránění přechodu tabletu do režimu spánku"</string>
-    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"zabránění přechodu telefonu do režimu spánku"</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"bránění přechodu tabletu do režimu spánku"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"bránění přechodu telefonu do režimu spánku"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Umožňuje aplikaci zabránit přechodu tabletu do režimu spánku."</string>
     <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Umožňuje aplikaci zabránit přechodu telefonu do režimu spánku."</string>
     <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"zapnutí či vypnutí tabletu"</string>
@@ -528,12 +539,12 @@
     <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Umožňuje aplikaci změnit časové pásmo telefonu."</string>
     <string name="permlab_accountManagerService" msgid="4829262349691386986">"role služby AccountManagerService"</string>
     <string name="permdesc_accountManagerService" msgid="1948455552333615954">"Umožňuje aplikaci volat funkce AccountAuthenticator."</string>
-    <string name="permlab_getAccounts" msgid="1086795467760122114">"vyhledání účtů v zařízení"</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"vyhledávání účtů v zařízení"</string>
     <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Umožňuje aplikaci získat seznam účtů v tabletu. Mohou sem patřit i účty vytvořené aplikacemi, které jste nainstalovali."</string>
     <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Umožňuje aplikaci získat seznam účtů v telefonu. Mohou sem patřit i účty vytvořené aplikacemi, které jste nainstalovali."</string>
     <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"vytváření účtů a nastavení hesel"</string>
     <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Umožňuje aplikaci používat funkce aplikace AccountManager související s ověřováním účtů – včetně vytváření účtů a získávání a nastavování hesel."</string>
-    <string name="permlab_manageAccounts" msgid="4983126304757177305">"přidání nebo odebrání účtů"</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"přidávání nebo odebírání účtů"</string>
     <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Umožňuje aplikaci provádět operace, jako je přidávání nebo odebírání účtů nebo mazání jejich hesel."</string>
     <string name="permlab_useCredentials" msgid="235481396163877642">"používání účtů v zařízení"</string>
     <string name="permdesc_useCredentials" msgid="7984227147403346422">"Umožňuje aplikaci požadovat ověřovací tokeny."</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 45f551c..1dc3d4b 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få adgang til USB-lager."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få adgang til SD-kortet."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Tilgængelighedsfunktioner"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funktioner, som hjælpeteknologier kan anmode om."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"deaktiver eller rediger statuslinje"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Tillader, at appen kan deaktivere statusbjælken eller tilføje og fjerne systemikoner."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"statusbjælke"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Sætter aktivitetsadministratoren i lukningstilstand. Lukker ikke helt ned."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"undgå programskift"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Forhindrer brugeren i at skifte til en anden app."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"få aktuelle app-oplysninger"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Tillader, at brugeren henter private oplysninger om den aktuelle applikation i forgrunden på ​​skærmen."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"overvåge og kontrollere åbning af alle apps"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Tillader, at appen kan overvåge og kontrollere, hvordan systemet starter aktiviteter. Ondsindede apps kan fuldstændig kompromittere systemet. Denne tilladelse er kun nødvendig til udvikling, aldrig til normal brug."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"send udsendelse om fjernet pakke"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Tillader, at en applikation læser de aktuelle data for batteriforbruget. Kan tillade, at applikationen henter detaljerede oplysninger om, hvilke apps du bruger."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"rediger batteristatistikker"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Tillader, at appen kan ændre indsamlede batteristatistikker. Anvendes ikke af normale apps."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"hent statistikker for handlinger i appen"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Tillader, at appen indhenter statistikker for handlinger i applikationen. Denne handling bruges ikke i almindelige apps."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"lav ændringer i statistik for handlinger i appen"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Tillader, at appen kan ændre indsamlede statistikker for handlinger i applikationen. Dette kan ikke bruges af almindelige apps."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontroller sikkerhedskopiering af system, og gendan"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Tillader, at brugeren kan forpligter sig til en inputmetodes grænseflade på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"bind dig til en tilgængelighedstjeneste"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Tillader, at brugeren binder sig til en grænseflade for en tilgængelighedstjeneste på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"anmod om udforsk ved berøring"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Tillader brugeren at anmode om en interaktionstilstand, hvor elementer, der berøres, læses op, og brugergrænsefladen kan udforskes via berøringer."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"anmod om bedre webtilgængelighed"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"forpligte sig til en sms-tjeneste"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Tillader, at ejeren kan binde en teksttjenestes grænseflade (f. eks. SpellCheckerService) på øverste niveau. Dette bør aldrig være nødvendigt til normale apps."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"bind til en VPN-tjeneste"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 1ef42f6..e3700d3 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Speicher"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Zugriff auf USB-Speicher"</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Zugriff auf SD-Karte"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funktionen der Bedienungshilfen"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funktionen, die für Bedienungshilfentechnologie beantragt werden können"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"Statusleiste deaktivieren oder ändern"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Ermöglicht der App, die Statusleiste zu deaktivieren oder Systemsymbole hinzuzufügen oder zu entfernen"</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"Statusleiste"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Versetzt den Aktivitätsmanager in einen heruntergefahrenen Zustand. Führt kein vollständiges Herunterfahren aus."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"App-Wechsel verhindern"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Hindert den Nutzer daran, zu einer anderen App zu wechseln"</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"Informationen zur aktuellen App abrufen"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Ermöglicht es dem Inhaber, private Informationen zur aktuellen App im Vordergrund des Bildschirms abzurufen"</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"Start von Apps überwachen und steuern"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Ermöglicht der App, den Start von Systemaktivitäten zu überwachen und zu steuern. Schädliche Apps können so das gesamte System beeinträchtigen. Diese Berechtigung wird nur zu Entwicklungszwecken und nie für die normale Nutzung benötigt."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"Broadcast ohne Paket senden"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Ermöglicht einer Anwendung, den momentan niedrigen Akkustand zu erkennen. Unter Umständen erhält die App detaillierte Informationen darüber, welche Apps Sie verwenden."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"Akkudaten ändern"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Ermöglicht der App, erfasste Akkudaten zu ändern. Nicht für normale Apps vorgesehen."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"App-Vorgangsstatistiken abrufen"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Ermöglicht der App, erfasste App-Vorgangsstatistiken abzurufen. Kann nicht von normalen Apps verwendet werden."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"App-Vorgangsstatistiken ändern"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Ermöglicht der App, erfasste App-Vorgangsstatistiken zu ändern. Kann nicht von normalen Apps verwendet werden"</string>
     <string name="permlab_backup" msgid="470013022865453920">"Systemsicherung und -wiederherstellung kontrollieren"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Ermöglicht dem Halter, sich an die Oberfläche einer Eingabemethode auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"An eine Bedienungshilfe binden"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Ermöglicht dem Halter, sich an die Oberfläche einer Bedienungshilfe auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"Tippen &amp; Entdecken beantragen"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Nutzer darf Interaktionsmodus beantragen, in dem berührte Elemente laut vorgelesen werden und die Benutzeroberfläche über Gesten erkundet werden kann."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"Erweiterte Webbedienungshilfen beantragen"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"An einen Textdienst binden"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Ermöglicht dem Halter, sich an die Oberfläche eines Textdienstes auf oberster Ebene zu binden, z. B. eines Rechtschreibprüfungsdienstes. Sollte nie für normale Apps benötigt werden."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"An einen VPN-Dienst binden"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index f3333dd..61e913c 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Αποθηκευτικός χώρος"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Πρόσβαση στον χώρο αποθ. USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Πρόσβαση στην κάρτα SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Λειτουργίες προσβασιμότητας"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Λειτουργίες που μπορεί να ζητήσει η τεχνολογία υποβοήθησης."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"απενεργοποίηση ή τροποποίηση γραμμής κατάστασης"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Επιτρέπει στην εφαρμογή να απενεργοποιεί τη γραμμή κατάστασης ή να προσθέτει και να αφαιρεί εικονίδια συστήματος."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"γραμμή κατάστασης"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Θέτει το πρόγραμμα διαχείρισης δραστηριοτήτων σε κατάσταση τερματισμού λειτουργιών. Δεν εκτελεί πλήρη τερματισμό λειτουργιών."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"αποτροπή εναλλαγών εφαρμογών"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Δεν επιτρέπει στο χρήστη να μεταβεί σε άλλη εφαρμογή."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"λήψη πληροφοριών σχετικά με την τρέχουσα εφαρμογή"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Δίνει στον κάτοχο τη δυνατότητα ανάκτησης απόρρητων πληροφοριών σχετικά με την τρέχουσα εφαρμογή στο προσκήνιο της οθόνης."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"παρακολούθηση και έλεγχος όλων των εκκινήσεων εφαρμογών"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Επιτρέπει στην εφαρμογή να παρακολουθεί και να ελέγχει τον τρόπο με τον οποίο το σύστημα εκκινεί δραστηριότητες. Τυχόν κακόβουλες εφαρμογές ενδέχεται να θέσουν σε κίνδυνο το σύστημα. Αυτή η άδεια είναι απαραίτητη μόνο για σκοπούς ανάπτυξης και ποτέ για συνήθη χρήση."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"αποστολή εκπομπής χωρίς πακέτο"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Επιτρέπει σε μια εφαρμογή να διαβάζει τα δεδομένα τρέχουσας χαμηλού επιπέδου χρήσης μπαταρίας. Ενδέχεται να επιτρέπει στην εφαρμογή να εντοπίσει λεπτομερείς πληροφορίες σχετικά με τις εφαρμογές που χρησιμοποιείτε."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"τροποποίηση στατιστικών στοιχείων μπαταρίας"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Επιτρέπει στην εφαρμογή την τροποποίηση στατιστικών στοιχείων μπαταρίας που έχουν συλλεχθεί. Δεν πρέπει να χρησιμοποιείται από συνήθεις εφαρμογές."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"ανάκτηση στατιστικών στοιχείων λειτουργίας για εφαρμογές"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Επιτρέπει στην εφαρμογή την ανάκτηση των στατιστικών στοιχείων λειτουργίας για τις εφαρμογές που έχουν συλλεχθεί. Δεν προορίζεται για χρήση από κανονικές εφαρμογές."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"τροποποίηση στατιστικών στοιχείων λειτουργιών εφαρμογών"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Επιτρέπει στην εφαρμογή την τροποποίηση των στατιστικών στοιχείων λειτουργίας εφαρμογών που έχουν συλλεχθεί. Δεν προορίζεται για χρήση από κανονικές εφαρμογές."</string>
     <string name="permlab_backup" msgid="470013022865453920">"αντίγραφο ασφαλείας και επαναφορά συστήματος"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας μεθόδου εισόδου. Δεν απαιτείται για συνήθεις εφαρμογές."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"δέσμευση σε υπηρεσία προσβασιμότητας"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανώτατου επιπέδου μιας υπηρεσίας προσβασιμότητας. Δεν απαιτείται σε κανονικές εφαρμογές."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"αίτημα εξερεύνησης με αφή"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Επιτρέπει στον κάτοχο να ζητήσει μια λειτουργία αλληλεπίδρασης κατά την οποία τα στοιχεία που αγγίζει ο χρήστης εκφωνούνται και είναι δυνατή η εξερεύνηση της διεπαφής χρήστη μέσω αφής."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"αίτημα βελτιωμένης προσβασιμότητας στον ιστό"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"δέσμευση σε υπηρεσία ανταλλαγής μηνυμάτων"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Επιτρέπει στον κάτοχο τη σύνδεση με τη διεπαφή ανωτέρου επιπέδου μιας υπηρεσίας ανταλλαγής μηνυμάτων (π.χ. SpellCheckerService). Δεν είναι απαραίτητο για κανονικές εφαρμογές."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"δέσμευση σε υπηρεσία VPN"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 538dd66..6bf151a 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Storage"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Access the USB storage."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Access the SD card."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Accessibility features"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Features that assistive technology can request."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"disable or modify status bar"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Allows the app to disable the status bar or add and remove system icons."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"status bar"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Puts the activity manager into a shut-down state. Does not perform a complete shut down."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"prevent app switches"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Prevents the user from switching to another app."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"get current app info"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Allows the holder to retrieve private information about the current application in the foreground of the screen."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"monitor and control all app launching"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Allows the app to monitor and control how the system launches activities. Malicious apps may completely compromise the system. This permission is only needed for development, never for normal use."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"send package removed broadcast"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Allows an application to read the current low-level battery use data. May allow the application to find out detailed information about which apps you use."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modify battery statistics"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Allows the app to modify collected battery statistics. Not for use by normal apps."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"retrieve app ops statistics"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Allows the app to retrieve collected application operation statistics. Not for use by normal apps."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modify app ops statistics"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Allows the app to modify collected component usage statistics. Not for use by normal apps."</string>
     <string name="permlab_backup" msgid="470013022865453920">"control system back up and restore"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Allows the holder to bind to the top-level interface of an input method. Should never be needed for normal apps."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"bind to an accessibility service"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Allows the holder to bind to the top-level interface of an accessibility service. Should never be needed for normal apps."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"request explore by touch"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Allows the hoder to request an interaction mode in which touched items are spoken aloud and the UI can be explored via gestures."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"request enhanced web accessibility"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"bind to a text service"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Allows the holder to bind to the top-level interface of a text service (e.g. SpellCheckerService). Should never be needed for normal applications."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"bind to a VPN service"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 8fc1450..87b1c24 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Espacio de almacenamiento"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceder al almacenamiento USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funciones de accesibilidad"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funciones que la tecnología de asistencia puede solicitar."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"desactivar o modificar la barra de estado"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Permite que la aplicación inhabilite la barra de estado o que agregue y elimine íconos del sistema."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"barra de estado"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Pone al administrador de la actividad en estado de cierre. No realiza un cierre completo."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir conmutadores de aplicación"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Evita que el usuario cambie a otra aplicación."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"obtener información de aplicación actual"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Permite que el titular recupere información privada sobre la aplicación actual en el primer plano de la pantalla."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"supervisar y controlar la ejecución de todas las aplicaciones"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Permite que la aplicación supervise y controle la manera en la que el sistema inicia actividades. Las aplicaciones maliciosas pueden comprometer el sistema por completo. Este permiso es necesario solo para el desarrollo, nunca para el uso habitual."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"enviar emisión de paquete eliminado"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Permite a una aplicación leer los datos actuales de uso de batería de bajo nivel. Puede permitir a la aplicación buscar información detallada sobre las aplicaciones que usas."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modificar las estadísticas de la batería"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Permite a la aplicación modificar las estadísticas recopiladas de la batería. Las aplicaciones normales no deben utilizarlo."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"Recuperar estadísticas de operaciones de la aplicación"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Permite que la aplicación recupere las estadísticas recopiladas de operación de la aplicación. Las aplicaciones normales no deben utilizar este permiso."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modificar estadísticas de uso de aplicaciones"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Permite que la aplicación modifique las estadísticas recopiladas sobre el uso de aplicaciones. Las aplicaciones normales no deben utilizar este permiso."</string>
     <string name="permlab_backup" msgid="470013022865453920">"copia de seguridad y restauración del sistema de control"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permite al propietario vincularse a la interfaz de nivel superior de un método de entrada. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"vincular a un servicio de accesibilidad"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permite al propietario vincularse a la interfaz de nivel superior de un servicio de accesibilidad. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"solicitar exploración táctil"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Le permite al titular solicitar un modo de interacción en el cual los elementos tocados se pronuncian en voz alta y la IU se puede explorar a través de gestos."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"solicitar accesibilidad mejorada de la Web"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"vincular a un servicio de texto"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Permite al titular vincularse a la interfaz de nivel superior de un servicio de texto (p. ej., SpellCheckerService). Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"vincular con un servicio de VPN"</string>
@@ -891,7 +902,7 @@
     <string name="permlab_updateLock" msgid="3527558366616680889">"no realizar actualizaciones automáticas"</string>
     <string name="permdesc_updateLock" msgid="1655625832166778492">"Permite a su propietario ofrecer información al sistema acerca de cuándo sería adecuado reiniciar el sistema de forma no interactiva y actualizar el dispositivo."</string>
     <string name="save_password_message" msgid="767344687139195790">"¿Quieres recordar esta contraseña en el navegador?"</string>
-    <string name="save_password_notnow" msgid="6389675316706699758">"Ahora no."</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"Ahora no"</string>
     <string name="save_password_remember" msgid="6491879678996749466">"Recuerda"</string>
     <string name="save_password_never" msgid="8274330296785855105">"Nunca"</string>
     <string name="open_permission_deny" msgid="7374036708316629800">"No tienes permiso para abrir esta página."</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 17a7e86..09ccddd3 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Almacenamiento"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceso a almacenamiento USB"</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funciones de accesibilidad"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funciones que pueden solicitar tecnología adaptada"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"inhabilitar o modificar la barra de estado"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Permite que la aplicación inhabilite la barra de estado o añada y elimine iconos del sistema."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"barra de estado"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Pone el administrador de actividades en estado de cierre. No realiza un cierre completo."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar cambios de aplicación"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Evita que el usuario cambie a otra aplicación."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"obtener información de la aplicación actual"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Permite que el titular recupere información privada sobre la aplicación actual en el primer plano de la pantalla."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"supervisar y controlar la ejecución de todas las aplicaciones"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Permite que la aplicación supervise y controle la ejecución de las actividades del sistema. Las aplicaciones malintencionadas pueden vulnerar la seguridad del sistema. Este permiso es necesario únicamente para tareas de desarrollo, nunca para el uso habitual."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"enviar emisión eliminada de paquete"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Permite que una aplicación consulte los datos actuales de uso de batería de nivel inferior. Puede permitir que la aplicación obtenga información detallada sobre las aplicaciones que utilizas."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modificar estadísticas de la batería"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Permite que la aplicación modifique las estadísticas recopiladas sobre la batería. Las aplicaciones normales no deben usar este permiso."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"recuperar estadísticas de operaciones de aplicaciones"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Permite que la aplicación recupere las estadísticas recopiladas sobre operaciones de aplicaciones. Las aplicaciones normales no deben usar este permiso."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modificar estadísticas de operaciones de aplicaciones"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Permite que la aplicación modifique las estadísticas recopiladas sobre operaciones de aplicaciones. Las aplicaciones normales no deben usar este permiso."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlar las copias de seguridad y las restauraciones del sistema"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permite que se enlace con la interfaz de nivel superior de un método de entrada de texto. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"enlazar con un servicio de accesibilidad"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permite enlazar con la interfaz de nivel superior de un servicio de accesibilidad. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"Solicitar exploración por tacto"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Permite al titular solicitar un modo de interacción en el que los elementos que se toquen se reproduzcan en voz alta y la interfaz de usuario se pueda explorar mediante gestos."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"Solicitar accesibilidad web mejorada"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"enlazar con un servicio de texto"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Permite enlazar con la interfaz de nivel superior de un servicio de texto (por ejemplo, SpellCheckerService). Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"enlazar con un servicio VPN"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 8b4408a..128f261 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Mäluruum"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Juurdepääs USB-mäluseadmele."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Juurdepääs SD-kaardile."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Pääsufunktsioonid"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funktsioonid, mida saab taotleda abistav tehnoloogia."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"keela või muuda olekuriba"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Võimaldab rakendusel keelata olekuriba või lisada ja eemaldada süsteemiikoone."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"olekuriba"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Lülitab tegevushalduri väljalülitusolekusse. Ei lülita lõplikult välja."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"väldi rakenduste ümberlülitamist"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Takistab kasutaja lülitumist teisele rakendusele."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"aktiivse rakenduse teabe hankimine"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Lubab õiguste saajal hankida privaatset teavet ekraanil esiplaanil oleva aktiivse rakenduse kohta."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"Kõigi rakenduste käivitumise jälgimine ja juhtimine"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Võimaldab rakendusel jälgida ja juhtida, kuidas süsteem tegevusi käivitab. Pahatahtlikud rakendused võivad süsteemi täielikult rikkuda. Seda õigust on vaja ainult arenduseks, mitte tavakasutuse korral."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"saada paketist eemaldatud saade"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Lubab rakendusel lugeda madala akutaseme kasutusandmeid. Võib lubada rakendusel hankida üksikasjalikku teavet selle kohta, mis rakendusi te kasutate."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"aku statistika muutmine"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Võimaldab rakendusel muuta aku kohta kogutud statistikat. Mitte kasutada tavarakenduste puhul."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"rakenduse tööstatistika hankimine"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Võimaldab rakendusel hankida kogutud rakenduse tööstatistikat. Mitte kasutada tavarakenduste puhul."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"rakenduse tööstatistika muutmine"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Võimaldab rakendusel muuta kogutud rakenduse tööstatistikat. Mitte kasutada tavarakenduste puhul."</string>
     <string name="permlab_backup" msgid="470013022865453920">"juhi süsteemi varundust ja taastet"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Lubab omanikul siduda sisestusmeetodi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"sidumine juurdepääsuteenusega"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Lubab omanikul luua sideme juurdepääsuteenuse ülataseme liidesega. Tavarakenduste puhul ei tohiks seda kunagi vaja minna."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"puudutusega uurimise taotlus"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Võimaldab taotleda suhtlusrežiimi, milles puudutatud üksused valjusti välja öeldakse ja kus kasutajaliidest saab kasutada liigutuste abil."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"täiustatud veebijuurdepääsu taotlus"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"tekstiteenusega sidumine"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Võimaldab omanikul siduda tekstiteenuse (nt SpellCheckerService) ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"seo VPN-teenusega"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 3f2da2c..70150c1 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"حافظه"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"به حافظهٔ USB دسترسی پیدا کنید."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"به کارت SD دسترسی داشته باشید."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"ویژگی‌های قابلیت دسترسی"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"ویژگی‌هایی که فناوری مفید می‌تواند درخواست کند."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"غیرفعال کردن یا تغییر نوار وضعیت"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"به برنامه اجازه می‎دهد تا نوار وضعیت را غیرفعال کند یا نمادهای سیستم را اضافه یا حذف کند."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"نوار وضعیت"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"مدیر فعالیت را در حالت خاموشی قرار می‌دهد. خاموشی را به صورت کامل انجام نمی‌دهد."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ممانعت از جابجایی برنامه"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"اجازه نمی‎دهد کاربر به برنامه دیگری برود."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"دریافت اطلاعات برنامه فعلی"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"به دارنده اجازه می‌دهد اطلاعات خصوصی مربوط به برنامه فعلی را در پیش زمینه صفحه بازیابی کند."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"نظارت و کنترل راه‌اندازی همه برنامه"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"به برنامه اجازه می‎دهد تا نحوه راه‌اندازی فعالیت‌های سیستم را کنترل کند. برنامه‎های مخرب می‎توانند کاملا با سیستم سازگار شوند. این مجوز فقط برای توسعه نیاز است و برای استفاده عادی نیست."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"ارسال پخش بسته حذف شده"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"به یک برنامه کاربردی اجازه می‌دهد که داده‌های استفاده کننده از میزان باتری کم کنونی را بخواند. این کار ممکن است به برنامه این امکان را بدهد که اطلاعات جزئی درباره برنامه‌هایی که استفاده می‌کنید، بدست آورد."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"اصلاح آمار باتری"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"به برنامه اجازه می‎دهد تا آمار جمع‌آوری شده باتری را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"بازیابی آمار مربوط به کارکرد برنامه"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"به برنامه امکان می‌دهد آمار جمع‌آوری شده مربوط به عملکرد برنامه را بازیابی کند. برای استفاده توسط برنامه‌های معمولی، در نظر گرفته نشده است."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"تغییر آمار کارکرد برنامه"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"به برنامه اجازه تغییر آمار کارکرد جمع‌آوری شده از برنامه را می‌دهد. برای استفاده توسط برنامه‌های معمولی نیست."</string>
     <string name="permlab_backup" msgid="470013022865453920">"کنترل نسخهٔ پشتیبان سیستم و بازیابی"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"به دارنده این دستگاه اجازه می‎دهد تا به رابط سطح بالای یک روش ورودی متصل شود. این ویژگی هیچگاه برای برنامه‎های معمولی ضروری نمی‎باشد."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"اتصال به سرویس دسترسی"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"به دارنده اجازه می‌دهد که به رابط سطح بالای سرویس دسترسی متصل شود. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"درخواست کاوش با لمس"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"به دارنده اجازه می‌دهد یک حالت تعاملی را درخواست کند که در این حالت موارد لمس شده به صدای بلند بیان می‌شوند و رابط کاربری از طریق حرکات اشاره قابل کاوش است."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"درخواست افزایش دسترسی به وب"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"اتصال به یک سرویس متنی"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"به دارنده اجازه می‌دهد خود را به یک رابط سطح بالای خدمات متنی مرتبط کند (برای مثال SpellCheckerService). هرگز برای برنامه‌های عادی لازم نیست."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"اتصال به یک سرویس VPN"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 7573f41..6c37941 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Tallennustila"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Käytä USB-tallennustilaa."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Käytä SD-korttia."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Esteettömyysominaisuudet"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Ominaisuudet, joiden käyttöönottoa avustava tekniikka voi pyytää."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"poista tilapalkki käytöstä tai muokkaa tilapalkkia"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Antaa sovelluksen poistaa tilapalkin käytöstä ja lisätä tai poistaa järjestelmäkuvakkeita."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"tilapalkki"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Asettaa toimintojen hallinnan sulkeutumistilaan. Ei sulje puhelinta kokonaan."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"estä sovellusten vaihto"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Estää käyttäjää siirtymästä toiseen sovellukseen."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"hae nykyisen sovelluksen tiedot"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Antaa sovellukselle luvan noutaa nykyistä sovellusta koskevia yksityisiä tietoja ruudun etualalla."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"kaikkien sovellusten käynnistämisen valvonta ja hallinta"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Antaa sovelluksen valvoa ja hallita sitä, miten laite käynnistää toimintoja. Haitalliset sovellukset voivat vaarantaa laitteen käytön. Tätä oikeutta tarvitaan vain kehityskäyttöön eikä koskaan tavalliseen käyttöön."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"lähetä paketeista poistettuja lähetyksiä"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Antaa sovelluksen lukea nykyisiä alhaisen tason akunkäyttötietoja. Sovellus saattaa saada tietoonsa, mitä sovelluksia käytät."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"muokkaa akkutilastoja"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Antaa sovelluksen muokata kerättyjä akkutilastoja. Ei tavallisten sovellusten käyttöön."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"nouda sovellusten toimintatilastoja"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Antaa sovelluksen noutaa kerättyjä sovellusten toimintatilastoja. Ei tavallisten sovellusten käyttöön."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"sovellusten käyttötilastojen muokkaus"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Antaa sovelluksen muokata kerättyjä sovellusten käyttötilastoja. Ei tavallisten sovellusten käyttöön."</string>
     <string name="permlab_backup" msgid="470013022865453920">"hallitse järjestelmän varmuuskopiointia ja palauttamista"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Antaa sovelluksen sitoutua syötetavan ylätason käyttöliittymään. Ei tavallisten sovellusten käyttöön."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"sitoudu esteettömyyspalveluun"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Antaa sovelluksen sitoutua esteettömyyspalvelun ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"pyydä kosketuksella tutkimisen käyttöönottoa"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Antaa luvan haltijan pyytää käyttöön vuorovaikutustilaa, jossa kosketettujen kohteiden nimet sanotaan ääneen ja käyttöliittymää voi tutkia eleiden avulla."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"pyydä parannettua verkon esteettömyyttä"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"tekstipalveluun sitoutuminen"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Antaa sovelluksen sitoutua tekstipalvelun (kuten SpellCheckerServicen) ylätason liittymään. Ei tavallisten sovellusten käyttöön."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"sitoudu VPN-palveluun"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index e4aad26..6346632 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Stockage"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accéder à la  mémoire de stockage USB"</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accéder à la carte SD"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Fonctionnalités d\'accessibilité"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Fonctionnalités pouvant être requises dans le cadre des technologies d\'assistance"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"Désactivation ou modification de la barre d\'état"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Permet à l\'application de désactiver la barre d\'état, ou d\'ajouter et de supprimer des icônes système."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"barre d\'état"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Place le gestionnaire d\'activités en état d\'arrêt. N\'effectue pas un arrêt complet."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"empêcher les changements d\'applications"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Empêche l\'utilisateur de changer d\'application."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"Récupérer des informations sur l\'application actuelle"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Permet à l\'application autorisée de récupérer des informations confidentielles à propos de l\'application exécutée au premier plan sur l\'écran."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"suivre et contrôler le lancement de toutes les applications"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Permet à l\'application de surveiller et de contrôler la façon dont le système lance les activités. Des applications malveillantes peuvent exploiter cette fonctionnalité pour totalement compromettre le système. Cette autorisation est uniquement destinée aux développeurs. Elle ne doit jamais être activée dans le cadre d\'une utilisation standard."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"Envoyer une diffusion sans paquet"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Permet à une application de lire les données de consommation actuelles indiquant le faible niveau de la batterie. Permet éventuellement à l\'application d\'obtenir des informations détaillées sur les applications que vous utilisez."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modifier les statistiques de la batterie"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Permet à l\'application de modifier les statistiques collectées concernant la batterie. Les applications standards ne doivent pas utiliser cette fonctionnalité."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"récupérer les statistiques de fonctionnement des applications"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Permet à l\'application de récupérer les statistiques de fonctionnement des applications recueillies. Les applications standards ne doivent pas utiliser cette fonctionnalité."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modifier les statistiques de fonctionnement des applications"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Permet à l\'application de modifier les statistiques de fonctionnement des applications collectées. Les applications standards ne doivent pas utiliser cette fonctionnalité."</string>
     <string name="permlab_backup" msgid="470013022865453920">"contrôler la sauvegarde et la restauration du système"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un mode de saisie. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"associer à un service d\'accessibilité"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service d\'accessibilité. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"demander l\'activation de la fonctionnalité \"Explorer au toucher\""</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Permet à l\'application de demander l\'activation d\'un mode d\'interaction dans lequel les éléments sur lesquels l\'utilisateur appuie sont énoncés à voix haute et dans lequel l\'utilisateur peut explorer l\'interface à l\'aide de gestes."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"demander des améliorations de la fonctionnalité d\'accessibilité Web"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"associer à un service de texte"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Permet à l\'application de s\'associer à l\'interface de haut niveau d\'un service de texte (par exemple, SpellCheckerService). Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"associer à un service VPN"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index f4e2d3e..61ec7a1 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"संग्रहण"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB संग्रहण में पहुंचें."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD कार्ड में पहुंचें."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"पहुंच-योग्यता सुविधाएं"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"सहायक प्रौद्योगिकी के द्वारा अनुरोध की जा सकने वाली सुविधाएं."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"स्‍थिति बार अक्षम या बदलें"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"एप्लिकेशन को स्थिति बार अक्षम करने या सिस्‍टम आइकन को जोड़ने या निकालने देता है."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"स्‍थिति बार"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"गतिविधि प्रबंधक को शटडाउन स्‍थिति में रखता है. पूर्ण शटडाउन निष्‍पादित नहीं करता है."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"एप्‍लिकेशन स्‍विच करने से रोकता है"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"उपयोगकर्ता को दूसरे एप्‍लिकेशन पर स्‍विच करने से रोकता है."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"वर्तमान एप्लिकेशन की जानकारी प्राप्त करें"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"धारक को स्क्रीन के अग्रभाग में स्थित वर्तमान एप्लिकेशन के बारे में निजी जानकारी प्राप्त करने देती है."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"सभी एप्‍लिकेशन की लॉन्‍चिंग की निगरानी करें और उसे नियंत्रित करें"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"एप्लिकेशन को यह निगरानी और नियंत्रित करने देता है कि सिस्टम कैसे गतिविधियां लॉन्च करता है. दुर्भावनापूर्ण एप्लिकेशन सिस्टम को पूरी तरह से जोखिम में डाल सकते हैं. इस अनुमति की आवश्यकता केवल विकास के लिए है, सामान्य उपयोग के लिए कभी नहीं."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"पैकेज निकाले गए प्रसारण भेजें"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"एप्लिकेशन को वर्तमान निम्न-स्तरीय बैटरी उपयोग डेटा पढ़ने देती है. एप्लिकेशन को आपके द्वारा उपयोग किए जाने वाले एप्लिकेशन के बारे में विस्तृत जानकारी ढूंढने दे सकती है."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"बैटरी के आंकड़े संशोधित करें"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"एप्‍लिकेशन को बैटरी के संकलित आंकड़ों को संशोधित करने देती है. सामान्‍य एप्‍लिकेशन के द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"एप्लिकेशन संचालन आंकड़े प्राप्त करें"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"एप्लिकेशन को संकलित एप्लिकेशन संचालन आंकड़े प्राप्त करने देता है. सामान्य एप्लिकेशन के द्वारा उपयोग के लिए नहीं."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"एप्लिकेशन कार्यवाही के आंकड़े बदलें"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"एप्लिकेशन को एप्लिकेशन कार्यवाही के एकत्रित आंकड़े बदलने देता है. सामान्य एप्लिकेशन के द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_backup" msgid="470013022865453920">"सिस्‍टम बैकअप नियंत्रित और पुनर्स्‍थापित करें"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"धारक को किसी इनपुट विधि के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍लिकेशन के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"पहुंच-योग्‍यता सेवा से आबद्ध करें"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"धारक को किसी पहुंच-योग्यता सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍लिकेशन के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"स्पर्श द्वारा एक्सप्लोर करें का अनुरोध करें"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"धारक को ऐसे सहभागी मोड का अनुरोध करने देती है जिसमें स्पर्श किए गए आइटम ज़ोर से बोले जाते हैं और UI को जेस्चर के द्वारा एक्सप्लोर किया जा सकता है."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"उन्नत वेब पहुंच-योग्यता का अनुरोध करें"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"किसी पाठ सेवा पर बने रहें"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"धारक को किसी पाठ सेवा (उदा. SpellCheckerService) के शीर्ष-स्‍तर इंटरफ़ेस पर आबद्ध होने देता है. सामान्‍य एप्‍लिकेशन के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"किसी VPN सेवा से आबद्ध करें"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index a7085f4..58980a7 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Prostor za pohranu"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Pristupi memoriji USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Pristup SD kartici."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Značajke dostupnosti"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Značajke koje tehnologija za pristupačnost može zahtijevati."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"onemogućavanje ili izmjena trake statusa"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Aplikaciji omogućuje onemogućavanje trake statusa ili dodavanje i uklanjanje sistemskih ikona."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"traka statusa"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Postavlja upravitelja za aktivnost u stanje mirovanja. Ne isključuje ga u potpunosti."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"sprečavanje promjene aplikacije"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Sprječava korisnika u prebacivanju na drugu aplikaciju."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"dohvaćanje informacija o trenutačnoj aplikaciji"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Omogućuje nositelju dohvaćanje privatnih informacija o trenutačnoj aplikaciji u prednjem planu na zaslonu."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"praćenje i nadzor svih pokretanja aplikacija"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Omogućuje aplikaciji nadzor i upravljanje načinom na koji sustav pokreće aktivnosti. Zlonamjerne aplikacije mogu posve ugroziti sustav. Ta je dozvola potrebna samo za razvoj, nikada za uobičajenu upotrebu."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"slanje paketno uklonjenog prijenosa"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Aplikacija može očitavati podatke o trenutačnoj potrošnji baterije na niskoj razini. Tako može doznati detaljne informacije o aplikacijama koje upotrebljavate."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"izmjena statistike o bateriji"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Omogućuje aplikaciji promjenu prikupljene statistike o potrošnji baterije. Nije namijenjena uobičajenim aplikacijama."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"dohvaćanje statistike o radu aplikacije"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Aplikaciji omogućuje dohvaćanje prikupljene statistike o radu aplikacije. Nije namijenjena uobičajenim aplikacijama."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"izmjena statistike o radu aplikacije"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Aplikaciji omogućuje promjenu prikupljene statistike o radu aplikacije. Nije namijenjena uobičajenim aplikacijama."</string>
     <string name="permlab_backup" msgid="470013022865453920">"sigurnosna kopija i oporavak nadzornog sustava"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Nositelju omogućuje povezivanje sučelja najviše razine načina unosa. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"vezivanje uz uslugu dostupnosti"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Nositelju omogućuje vezanje uz sučelje najviše razine usluge dostupnosti. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"zahtijevaj istraživanje dodirom"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Omogućuje korisniku zahtijevanje načina interakcije u kojem se dodirnute stavke izgovaraju naglas, a korisničko sučelje može se istraživati pokretima."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"zahtijevaj poboljšanu web-dostupnost"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"vezanje na tekstualnu uslugu"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Omogućuje korisniku povezivanje s najvišom razinom sučelja tekstualne usluge (npr. SpellCheckerService). Ne bi smjelo biti potrebno za normalne aplikacije."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"vezanje na VPN uslugu"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 840ed06..08db6d4 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Tárhely"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Az USB-tár elérése."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Az SD-kártya elérése."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Kisegítő lehetőségek funkciói"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"A kisegítő technológia által kérhető funkciók."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"állapotsor kikapcsolása vagy módosítása"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Lehetővé teszi az alkalmazás számára az állapotsor kikapcsolását, illetve rendszerikonok hozzáadását és eltávolítását."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"állapotsor"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Leállítás állapotba helyezi a tevékenységkezelőt. Nem hajtja végre a teljes leállítást."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"alkalmazásváltás megakadályozása"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Megakadályozza, hogy a felhasználó átváltson egy másik alkalmazásra."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"az alkalmazás aktuális információinak lekérése"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Lehetővé teszi, hogy a felhasználó privát adatokat kérjen le az aktuális alkalmazásról a képernyő előterében."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"alkalmazásindítások nyomon követése és vezérlése"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Lehetővé teszi az alkalmazás számára, hogy figyelje és vezérelje, hogy a rendszer hogyan indít el tevékenységeket. A rosszindulatú alkalmazások teljesen tönkretehetik a rendszert. Ez az engedély csak fejlesztéshez szükséges, normál használathoz sosem."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"eltávolított csomagú üzenetek küldése"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Lehetővé teszi egy alkalmazás számára, hogy leolvassa az aktuális alacsony szintű akkumulátorhasználatra vonatkozó adatokat. Ezáltal az alkalmazás részletes adatokhoz jut az Ön által használt alkalmazásokról."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"akkumulátorstatisztikák módosítása"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Lehetővé teszi az alkalmazás számára az összegyűjtött akkumulátorhasználati statisztikák módosítását. Normál alkalmazások nem használhatják."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"alkalmazásműveleti statisztikák lekérdezése"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Lehetővé teszi az alkalmazás számára az összegyűjtött alkalmazásműveleti statisztikák lekérdezését. Normál alkalmazások nem használhatják."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"alkalmazásműveleti statisztikák módosítása"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Lehetővé teszi az alkalmazás számára az összegyűjtött alkalmazásműveleti statisztikák módosítását. Normál alkalmazások nem használhatják."</string>
     <string name="permlab_backup" msgid="470013022865453920">"rendszer biztonsági mentésének és helyreállításának vezérlése"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Lehetővé teszi, hogy a tulajdonos kötelezővé tegye egy beviteli mód legfelső szintű felületét. A normál alkalmazásoknak erre soha nincs szüksége."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"csatlakozás egy kisegítő szolgáltatáshoz"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Lehetővé teszi a használó számára, hogy csatlakozzon egy kisegítő szolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"felfedezés érintéssel kérése"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Lehetővé teszi a felhasználó számára egy olyan használati mód engedélyezését, amelyben az eszköz kimondja, hogy milyen elemek lettek megérintve, a felhasználói felület pedig felfedezhető kézmozdulatok révén."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"bővített internetes kisegítő lehetőségek kérése"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"csatlakozás szövegszolgáltatáshoz"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Lehetővé teszi, hogy a tulajdonos egy szöveges szolgáltatás felső szintjéhez kapcsolódjon (pl. SpellCheckerService). A normál alkalmazásoknak erre soha nincs szüksége."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"csatlakozás egy VPN-szolgáltatáshoz"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 638528f..8386aa0 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Penyimpanan"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses penyimpanan USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kartu SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Fitur aksesibilitas"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Fitur yang dapat diminta oleh teknologi bantu."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"nonaktifkan atau ubah bilah status"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Mengizinkan apl menonaktifkan bilah status atau menambah dan menghapus ikon sistem."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"bilah status"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Letakkan pengelola aktivitas dalam kondisi mati. Tidak melakukan penonaktifan penuh."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"cegah pergantian aplikasi"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Mencegah pengguna beralih ke apl lain."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"dapatkan info tentang aplikasi yang aktif"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Memungkinkan pemegang mengambil informasi pribadi tentang aplikasi yang aktif di latar depan layar."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"memantau dan mengontrol semua peluncuran apl"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Mengizinkan apl memantau dan mengontrol cara sistem meluncurkan kegiatan. Apl berbahaya dapat meretas sistem sepenuhnya. Izin ini hanya diperlukan untuk pengembangan, tidak pernah diperlukan untuk penggunaan normal."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"kirim siaran paket dihapus"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Mengizinkan aplikasi membaca data penggunaan baterai tingkat rendah. Dapat mengizinkan aplikasi mencari informasi mendetail tentang aplikasi mana yang Anda gunakan."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"ubah statistik baterai"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Mengizinkan aplikasi mengubah statistik baterai yang dikumpulkan. Tidak untuk digunakan oleh aplikasi normal."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"mengambil statistik pengoperasian aplikasi"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Mengizinkan aplikasi mengambil statistik pengoperasian aplikasi yang dikumpulkan. Tidak untuk digunakan oleh aplikasi normal."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"memodifikasi statistik pengoperasian aplikasi"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Mengizinkan aplikasi memodifikasi statistik pengoperasian aplikasi yang dikumpulkan. Tidak untuk digunakan oleh aplikasi normal."</string>
     <string name="permlab_backup" msgid="470013022865453920">"mengontrol cadangan dan pemulihan sistem"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu metode masukan. Tidak pernah diperlukan oleh apl normal."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"mengikat ke layanan aksesibilitas"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Mengizinkan pemegang untuk mengikat antarmuka tingkat tinggi dari suatu layanan. Tidak pernah diperlukan oleh aplikasi normal."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"meminta penjelajahan dengan sentuhan"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Memungkinkan pemegang meminta mode interaksi yang mana item yang disentuh diucapkan dengan keras dan UI dapat dijelajahi dengan isyarat."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"meminta aksesibilitas web yang disempurnakan"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"mengikat ke layanan SMS"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu layanan teks (mis. SpellCheckerService). Tidak pernah diperlukan oleh apl normal."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"mengikat ke layanan VPN"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index d3eaa61..9621b97 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Archiviazione"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesso all\'archivio USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesso alla scheda SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funzioni di accessibilità"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funzioni che possono essere richieste dalla tecnologia di ausilio."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"disattivare o modificare la barra di stato"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Consente all\'applicazione di disattivare la barra di stato o di aggiungere e rimuovere icone di sistema."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"barra di stato"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Mette il gestore delle attività in uno stato di chiusura. Non esegue una chiusura completa."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedire commutazione applicazione"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Impedisce all\'utente di passare a un\'altra applicazione."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"recupero di informazioni sull\'app corrente"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Consente al titolare di recuperare le informazioni private sull\'app correntemente in primo piano sullo schermo."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"monitoraggio e controllo avvio di tutte le applicazioni"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Consente all\'applicazione di monitorare e controllare l\'avvio delle attività da parte del sistema. Le applicazioni dannose potrebbero compromettere completamente il sistema. Questa autorizzazione è necessaria solo per lo sviluppo, mai per l\'utilizzo normale."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"invio broadcast rimossi dal pacchetto"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Consente a un\'applicazione di leggere i dati di utilizzo della batteria di basso livello correnti. Potrebbe consentire all\'applicazione di trovare informazioni dettagliate sulle applicazioni che utilizzi."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modifica statistiche batteria"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Consente all\'applicazione di modificare le statistiche raccolte sulla batteria. Da non usare per normali applicazioni."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"recupero statistiche funzion. app"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Consente all\'applicazione di recuperare le statistiche raccolte sul funzionamento dell\'applicazione. Da non usare per normali applicazioni."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modifica statistiche funzionamento app"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Consente all\'applicazione di modificare le statistiche raccolte sul funzionamento dell\'applicazione. Da non usare per normali applicazioni."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controllo del backup di sistema e ripristino"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Consente l\'associazione di un metodo di inserimento all\'interfaccia principale. Non dovrebbe mai essere necessaria per le normali applicazioni."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"collegamento a un servizio di accessibilità"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio di accessibilità. Non dovrebbe essere mai necessaria per le normali applicazioni."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"richiesta di esplorazione al tocco"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Consente al titolare di richiedere una modalità di interazione con cui gli elementi toccati vengono descritti tramite output vocale e l\'interfaccia utente può essere esplorata tramite gesti."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"richiesta di accessibilità web migliorata"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"associazione a un servizio di testo"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio di testo (ad esempio SpellCheckerService). Non dovrebbe essere mai necessaria per le normali applicazioni."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"associazione a un servizio VPN"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 784a893..86f3ba0 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"אחסון"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"גישה לאמצעי אחסון מסוג USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"גש לכרטיס SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"תכונות נגישות"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"תכונות שטכנולוגיה מסייעת יכולה לבקש."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"השבת או שנה את שורת המצב"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"מאפשר ליישום להשבית את שורת המצב או להוסיף ולהסיר סמלי מערכת."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"שורת מצב"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"מעביר את מנהל הפעילויות למצב כיבוי. לא מבצע כיבוי מלא."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"מנע החלפת יישומים"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"מניעת מעבר ליישום אחר על ידי המשתמש."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"קבל פרטים על היישום הנוכחי"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"מאפשר לבעלים לאחזר מידע פרטי לגבי היישום הנוכחי שבקדמת המסך."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"ניהול מעקב ושליטה על כל הפעלות היישומים"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"מאפשר ליישום לנהל מעקב אחר האופן שבו המערכת מפעילה פעילויות, ולשלוט בו. יישומים זדוניים עלולים לסכן את המערכת כולה. הרשאה זו אינה נחוצה לשימוש רגיל, אלא לפיתוח בלבד."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"שלח שידור שהוסר מחבילה"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"מאפשר ליישום לקרוא את נתוני השימוש הנוכחיים של הסוללה ברמה נמוכה. עשוי לאפשר ליישום לגלות מידע מפורט לגבי היישומים שבהם אתה משתמש."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"שינוי הנתונים הסטטיסטיים של הסוללה"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"מאפשר ליישום לשנות נתונים סטטיסטיים שנאספו לגבי הסוללה. לא מיועד לשימוש על ידי יישומים רגילים."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"אחזור נתונים סטטיסטיים של פעולות יישום"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"הרשאה זו מאפשרת ליישום לאחזר נתונים סטטיסטיים שנאספו לגבי פעולות יישום. לא מיועד לשימוש על ידי יישומים רגילים."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"שינוי סטטיסטיקת ההפעלה של היישום"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"מאפשר ליישום לשנות נתונים סטטיסטיים שנאספו לגבי הפעלתו. לא מיועד לשימוש על ידי יישומים רגילים."</string>
     <string name="permlab_backup" msgid="470013022865453920">"שלוט בגיבוי ובשחזור של המערכת"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"מאפשר למשתמש לבצע איגוד לממשק ברמה עליונה של שיטת קלט. הרשאה זו לעולם אינה נחוצה ליישומים רגילים."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"הכפפה לשירות נגישות"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"מתיר לבעלים להכפיף לממשק ברמה העליונה של שירות זמינות. הרשאה זו אף פעם אינה אמורה להיות נחוצה ליישומים רגילים."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"בקשת גילוי באמצעות מגע"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"מאפשר לבעלים לבקש מצב אינטראקציה שבו נגיעה בפריטים מלווה בהשמעת התיאור שלהם ושניתן לחקור בו את ה-UI באמצעות מחוות."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"בקשת נגישות משופרת לאינטרנט"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"הכפפה לשירות טקסט"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"מאפשר למשתמש ליצור איגוד לממשק הרמה העליונה של שירות טקסט (למשל, SpellCheckerService). הרשאה זו לעולם אינה נחוצה ליישומים רגילים."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"אגד לשירות VPN"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index e53ff29..63d3149 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"ストレージ"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USBストレージへのアクセス"</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SDカードにアクセスします。"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"ユーザー補助機能"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"補助テクノロジーがリクエストできる機能です。"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"ステータスバーの無効化や変更"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"ステータスバーの無効化、システムアイコンの追加や削除をアプリに許可します。"</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"ステータスバーへの表示"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"アクティビティマネージャをシャットダウン状態にします。完全なシャットダウンは実行しません。"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"アプリケーションの切り替えを禁止する"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"ユーザーが別のアプリに切り替えられないようにします。"</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"現在のアプリ情報の取得"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"画面のフォアグラウンドで現在のアプリに関する非公開情報を取得することを所有者に許可します。"</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"すべてのアプリ起動の監視と制御"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"システムによるアクティビティ起動方法を監視し制御することをアプリに許可します。この許可を悪意のあるアプリに利用されると、システム全体のセキュリティが侵害される恐れがあります。この許可は開発時にのみ必要で、通常の使用では不要です。"</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"パッケージ削除ブロードキャストの送信"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"現在の電池消費量の低レベルデータを読み取ることをアプリに許可します。このアプリが、使用しているアプリの詳細情報を確認できるようになります。"</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"電池統計情報の変更"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"電池に関して収集した統計情報の変更をアプリに許可します。通常のアプリでは使用しません。"</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"アプリの操作状況に関する統計情報の取得"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"アプリの操作状況に関して収集された統計情報の取得をアプリに許可します。通常のアプリでは使用しません。"</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"アプリの操作状況に関する統計情報の変更"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"アプリの操作状況に関して収集された統計情報の変更をアプリに許可します。通常のアプリでは使用しません。"</string>
     <string name="permlab_backup" msgid="470013022865453920">"システムのバックアップと復元を制御する"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"入力方法のトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"ユーザー補助サービスにバインド"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"ユーザー補助サービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"タッチガイドのリクエスト"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"触れたアイテムが読み上げられ、ジェスチャーでユーザーインターフェースのガイドを利用できる操作モードをリクエストすることを所有者に許可します。"</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"ウェブアクセシビリティ拡張のリクエスト"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"テキストサービスにバインド"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"テキストサービス(SpellCheckerServiceなど)のトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPNサービスにバインド"</string>
@@ -785,11 +796,11 @@
     <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"ユーザーガイドをご覧いただくか、お客様サポートにお問い合わせください。"</string>
     <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIMカードはロックされています。"</string>
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIMカードのロック解除中..."</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
-    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"正しくないパスワードを<xliff:g id="NUMBER_0">%d</xliff:g>回入力しました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"正しくないPINを<xliff:g id="NUMBER_0">%d</xliff:g>回入力しました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にGoogleへのログインが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒以内にもう一度お試しください。"</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にGoogleへのログインが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"正しくないパスワードを<xliff:g id="NUMBER_0">%d</xliff:g>回入力しました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"正しくないPINを<xliff:g id="NUMBER_0">%d</xliff:g>回入力しました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にGoogleへのログインが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にGoogleへのログインが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"タブレットのロック解除に<xliff:g id="NUMBER_0">%d</xliff:g>回失敗しました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回失敗すると、タブレットは工場出荷状態にリセットされ、ユーザーのデータはすべて失われます。"</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"端末のロック解除に<xliff:g id="NUMBER_0">%d</xliff:g>回失敗しました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回失敗すると、端末は工場出荷状態にリセットされ、ユーザーのデータはすべて失われます。"</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"タブレットのロック解除を<xliff:g id="NUMBER">%d</xliff:g>回失敗しました。タブレットを工場出荷状態にリセットします。"</string>
@@ -1420,7 +1431,7 @@
     <string name="kg_wrong_pattern" msgid="1850806070801358830">"パターンが正しくありません"</string>
     <string name="kg_wrong_password" msgid="2333281762128113157">"パスワードが正しくありません"</string>
     <string name="kg_wrong_pin" msgid="1131306510833563801">"PINが正しくありません"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g>秒後にもう一度お試しください。"</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"パターンを入力"</string>
     <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PINを入力"</string>
     <string name="kg_pin_instructions" msgid="2377242233495111557">"PINを入力"</string>
@@ -1442,15 +1453,15 @@
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"ユーザー名またはパスワードが無効です。"</string>
     <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ユーザー名またはパスワードを忘れた場合は"\n" "<b>"google.com/accounts/recovery"</b>" にアクセスしてください。"</string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"アカウントをチェックしています…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PINの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"パスワードの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PINの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"パスワードの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒後にもう一度お試しください。"</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"タブレットのロック解除に<xliff:g id="NUMBER_0">%d</xliff:g>回失敗しました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回失敗すると、タブレットは出荷時設定にリセットされ、ユーザーのデータはすべて失われます。"</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"携帯端末のロック解除に<xliff:g id="NUMBER_0">%d</xliff:g>回失敗しました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回失敗すると、端末は出荷時設定にリセットされ、ユーザーのデータはすべて失われます。"</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"タブレットのロック解除を<xliff:g id="NUMBER">%d</xliff:g>回失敗しました。タブレットは出荷時設定にリセットされます。"</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"携帯端末のロック解除を<xliff:g id="NUMBER">%d</xliff:g>回失敗しました。端末は出荷時設定にリセットされます。"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒以内にもう一度お試しください。"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"削除"</string>
     <string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"安全レベルを超えるまで音量を上げますか?"\n"大音量で長時間聞き続けると、聴力を損なう恐れがあります。"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 17006fd..47bc354 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"저장"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB 저장소에 액세스합니다."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD 카드에 액세스합니다."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"접근성 기능"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"장애인 보조 기술이 요청할 수 있는 기능입니다."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"상태 표시줄 사용 중지 또는 수정"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"앱이 상태 표시줄을 사용중지하거나 시스템 아이콘을 추가 및 제거할 수 있도록 허용합니다."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"상태 표시줄"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"작업 관리자를 종료 상태로 설정합니다. 전체 종료를 수행하지는 않습니다."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"애플리케이션 전환 방지"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"사용자가 다른 앱으로 전환하지 못하게 합니다."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"현재 앱 정보 얻기"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"권한을 가진 프로그램이 화면의 포그라운드에서 현재 애플리케이션에 대한 비공개 정보를 검색하도록 허용합니다."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"실행 중인 모든 앱 모니터링 및 제어"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"앱이 시스템에서 활동이 시작되는 방식을 모니터링하고 관리할 수 있도록 허용합니다. 이 경우 악성 앱이 이 기능을 이용하여 시스템을 완전히 손상시킬 수 있습니다. 이 권한은 개발 과정에만 필요하며 일반 사용 시에는 필요하지 않습니다."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"패키지 제거 브로드캐스트 보내기"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"애플리케이션이 현재의 낮은 수준 배터리 사용 데이터를 읽을 수 있도록 합니다. 이 경우 애플리케이션이 내가 사용하는 앱에 대한 세부정보를 파악할 수도 있습니다."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"배터리 통계 수정"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"앱이 수집된 배터리 통계를 수정할 수 있도록 허용합니다. 일반 앱에서는 사용하지 않습니다."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"앱 운영 통계 검색"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"앱이 수집된 애플리케이션 운영 통계를 검색하도록 합니다. 일반 앱에서는 사용하지 않습니다."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"앱 운영 통계 수정"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"앱이 수집된 애플리케이션 운영 통계를 수정하도록 합니다. 일반 앱에서는 사용하지 않습니다."</string>
     <string name="permlab_backup" msgid="470013022865453920">"시스템 백업 및 복원 관리"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"권한을 가진 프로그램이 입력 방법에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"접근성 서비스와 연결"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"권한을 가진 프로그램이 접근성 서비스에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"\'터치하여 탐색\' 요청"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"권한을 가진 프로그램이 터치한 항목을 소리내어 말하고 제스처로 UI를 탐색할 수 있는 상호작용 모드를 요청할 수 있도록 허용합니다."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"웹 접근성 개선 요청"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"텍스트 서비스 연결"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"권한을 가진 프로그램이 텍스트 서비스(예: SpellCheckerService)에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN 서비스와 연결"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 7700f1c..c14ae05 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Saugykla"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Pasiekti USB atmintinę."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Pasiekite SD kortelę."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Pritaikymo neįgaliesiems funkcijos"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funkcijos, kurių užklausas gali teikti pagalbinė technologija."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"išjungti ar keisti būsenos juostą"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Leidžiama programai neleisti būsenos juostos arba pridėti ir pašalinti sistemos piktogramas."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"būsenos juosta"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Veiklos tvarkyklę perjungia į išsijungimo būseną. Neišjungia visiškai."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"neleisti perjungti programų"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Neleidžiama naudotojui perjungti į kitą programą."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"gauti esamos programos informaciją"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Savininkui leidžiama gauti privačią esamos pirmaeilės ekrano programos informaciją."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"stebėti ir valdyti visų programų paleidimą"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Leidžiama programai stebėti ir valdyti, kaip sistema paleidžia veiklą. Kenkėjiškos programos gali visiškai pažeisti sistemą. Šis leidimas reikalingas tik kuriant ir jo niekada nereikia naudojant įprastai."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"siųsti pašalinto paketo perdavimą"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Leidžiama programai skaityti dabartinius išsikraunančio akumuliatoriaus naudojimo duomenis. Gali būti leidžiama programai sužinoti išsamią informaciją apie jūsų naudojamas programas."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"keisti akumuliatoriaus statistiką"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Leidžiama programai keisti surinktą akumuliatoriaus statistiką. Neskirta naudoti įprastoms programoms."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"nuskaityti programos naudojimo statistiką"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Programai leidžiama nuskaityti surinktą programos naudojimo statistiką. Neskirta naudoti įprastoms programoms."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"keisti programos naudojimo statistiką"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Programai leidžiama keisti surinktą programos naudojimo statistiką. Neskirta naudoti įprastoms programoms."</string>
     <string name="permlab_backup" msgid="470013022865453920">"valdyti sistemos atsarginę kopiją ir atkūrimą"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Leidžiama savininką susaistyti su įvesties metodo aukščiausio lygio sąsaja. Įprastoms programoms to neturėtų prireikti."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"susisaistyti su pasiekiamumo paslauga"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Savininkui leidžiama susisaistyti su aukščiausio lygio pasiekiamumo paslaugos sąsaja. Įprastoms programoms to neturėtų prireikti."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"pateikti užklausą dėl naršymo palietus"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Leidžiama pateikti užklausą dėl sąveikos režimo, kuriam veikiant garsiai pasakomi paliesti elementai ir palietimu galima tyrinėti naudotojo sąsają."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"pateikti užklausą dėl patobulintos prieigos prie žiniatinklio"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"priskirti teksto paslaugą"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Leidžiama savininkui priskirti aukščiausio lygio teksto paslaugos (pvz., „SpellCheckerService“) sąsają. Įprastoms programoms to neturėtų prireikti."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"susaistyti su VPN paslauga"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 040beb1..6a10595 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Krātuve"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Piekļūst USB krātuvei."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Piekļūstiet SD kartei."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Pieejamības funkcijas"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funkcijas, kuras palīgtehnoloģija var pieprasīt."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"atspējot vai pārveidot statusa joslu"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Ļauj lietotnei atspējot statusa joslu vai pievienot un noņemt sistēmas ikonas."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"statusa josla"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Liek darbību pārvaldniekam pāriet izslēgšanas stāvoklī. Neveic pilnīgu izslēgšanu."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"novērst lietojumprogrammu pārslēgšanu"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Novērš lietotāja pārslēgšanos uz citu lietotni."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"pašreizējās lietotnes informācijas iegūšana"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Ļauj īpašniekam izgūt privātu informāciju par pašreizējo lietojumprogrammu ekrāna priekšplānā."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"pārraudzīt un kontrolēt visu lietotņu atvēršanu"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Ļauj lietotnei pārraudzīt un kontrolēt, kā sistēmā tiek palaistas darbības. Ļaunprātīgas lietotnes var pilnībā uzlauzt sistēmu. Šī atļauja ir nepieciešama tikai izstrādei, taču ne parastai lietošanai."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"sūtīt apraidi par pakotnes noņemšanu"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Ļauj lietojumprogrammai lasīt pašreizējos zema akumulatora enerģijas patēriņa datus. Var atļaut lietojumprogrammai iegūt detalizētu informāciju par to, kuras lietotnes izmantojat."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"akumulatora statistikas pārveidošana"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Ļauj lietotnei pārveidot apkopoto statistiku par akumulatoru. Atļauja neattiecas uz parastām lietotnēm."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"Izgūt lietotnes darbību statistiku"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Ļauj lietotnei izgūt apkopoto statistiku par lietojumprogrammas darbību. Atļauja neattiecas uz parastām lietotnēm."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"Pārveidot lietotnes darbības statistiku"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Ļauj lietotnei pārveidot apkopoto statistiku par lietojumprogrammas darbību. Atļauja neattiecas uz parastām lietotnēm."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrolēt sistēmas dublējumu un atjaunošanu"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Ļauj īpašniekam izveidot saiti ar ievades metodes augstākā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"saistīt ar pieejamības pakalpojumu"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Ļauj īpašniekam izveidot saiti ar pieejamības pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm šī atļauja nav nepieciešama."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"pieprasīt funkciju “Pārlūkot pieskaroties”"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Ļauj pieprasīt mijiedarbības režīmu. Izmantojot šo režīmu, vienumi, kuriem pieskaraties, tiek izrunāti skaļi, un lietotāja saskarni var pārlūkot ar žestiem."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"pieprasīt uzlabotu tīmekļa pieejamību"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"saistīt ar īsziņu pakalpojumu"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Ļauj īpašniekam veikt saistīšanu ar īsziņu pakalpojuma augstākā līmeņa saskarni (piem., SpellCheckerService). Parastajām lietotnēm tas nekad nav nepieciešams."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"saistīt ar VPN pakalpojumu"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 436a1db..42cdbcc 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Storan"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses storan USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kad SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Ciri kebolehaksesan"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Ciri yang boleh diminta oleh teknologi eksekutif."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"lumpuhkan atau ubah suai bar status"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Membenarkan apl melumpuhkan bar status atau menambah dan mengalih keluar ikon sistem."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"bar status"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Meletakkan pengurus aktiviti dalam keadaan tutup. Tidak melaksanakan penutupan lengkap."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"halang pertukaran apl"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Menghalang pengguna daripada bertukar kepada apl lain."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"dapatkan maklumat apl semasa"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Membenarkan pemegang mendapatkan maklumat peribadi tentang permohonan semasa di latar hadapan skrin"</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"pantau dan kawal semua pelancaran apl"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Membenarkan apl untuk memantau dan mengawal cara sistem melancarkan aktiviti. Apl hasad boleh menjejaskan sistem sepenuhnya. Kebenaran ini hanya diperlukan untuk pembangunan, tidak sekali-kali untuk penggunaan biasa."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"hantar siaran bahawa pakej telah dialih keluar"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Membenarkan aplikasi membaca data penggunaan bateri tahap rendah semasa. Boleh membenarkan aplikasi untuk mencari maklumat terperinci tentang apl yang anda gunakan."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"ubah suai statistik bateri"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Membenarkan apl mengubah suai statistik bateri yang dikumpul. Bukan untuk penggunaan apl normal."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"dapatkan semula statistik pengendalian apl"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Membenarkan apl mendapatkan semula statistik pengendalian aplikasi yang dikumpul. Bukan untuk kegunaan apl biasa."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"ubah suai apl ops statistik"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Membenarkan apl mengubah suai statistik operasi aplikasi yang dikumpul. Bukan untuk kegunaan apl biasa."</string>
     <string name="permlab_backup" msgid="470013022865453920">"sandaran dan pemulihan sistem kawalan"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kaedah input itu. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"terikat kepada perkhidmatan yang boleh diakses"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan yang boleh diakses. Tidak sekali-kali diperlukan untuk apl biasa."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"minta jelajah melalui sentuhan"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Membenarkan pengguna untuk meminta mod interaksi agar item yang disentuh disebut dengan kuat dan UI boleh dijelajahi melalui gerak isyarat."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"minta kebolehaksesan web dipertingkatkan"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"terikat kepada perkhidmatan teks"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Membenarkan pemegang mengikat kepada antara muka peringkat atasan perkhidmatan teks(mis. PerkhidmatanPenyemakEjaan). Tidak seharusnya diperlukan untuk apl biasa."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"terikat kepada perkhidmatan VPN"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 3a7cd46..8d83af2 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Tilgang til USB-lagring."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Tilgang til minnekortet."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Tilgjengelighetsfunksjoner"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funksjoner hjelpeteknologi kan be om."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"deaktivere eller endre statusfeltet"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Lar appen deaktivere statusfeltet eller legge til og fjerne systemikoner."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"statusrad"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Lar applikasjonen sette aktivitetshåndtereren i avslutningstilstand. Slår ikke systemet helt av."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"forhindre applikasjonsbytte"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Hindrer brukeren i å bytte til en annen app."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"få informasjon om appen"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Tillater brukeren å få tilgang til privat informasjon om den aktuelle appen i forgrunnen på skjermen."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"avervåke og kontrollere all oppstart av apper"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Lar appen overvåke og kontrollere hvordan systemet starter opp aktiviteter. Ondsinnede apper kan utsette hele systemet for sikkerhetsbrudd. Denne tillatelsen er bare nødvendig for utviklere, aldri for vanlig bruk."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"kringkaste melding om fjernet pakke"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Lar apper lese gjeldende data på lavt nivå om batteribruk. Kan også la appen finne ut detaljert informasjon om hvilke apper du bruker."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"endre batteristatistikk"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Lar appen endre innsamlet batteristatistikk. Ikke beregnet på vanlige apper."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"hente bruksstatistikk for appen"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Lar appen hente innsamlet bruksstatistikk. Ikke beregnet på vanlige apper."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"endre bruksstatistikk for appen"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Lar appen endre innsamlet bruksstatistikk. Ikke beregnet på vanlige apper."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrollere sikkerhetskopiering og gjenoppretting"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Lar innehaveren binde det øverste nivået av grensesnittet til en inndatametode. Skal aldri være nødvendig for normale apper."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"binde seg til en tilgjengelighetstjeneste"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Gir innehaveren tillatelse til å bindes til det øverste nivået av grensesnittet for en tilgjengelighetstjeneste. Skal aldri være nødvendig for vanlige apper."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"be om utforsking ved berøring"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Tillater brukeren å be om en interaksjonsmodus der berørte elementer sies høyt, og brukergrensesnittet kan utforskes med bevegelser."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"be om forbedret nettilgjengelighet"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"binde til en teksttjeneste"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Lar innehaveren binde seg til øverste grensesnittnivå for en teksttjeneste (f.eks. SpellCheckerService). Skal aldri være nødvendig for vanlige apper."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"binde deg til en VPN-tjeneste"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 1dd9fe9..a515fa5 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Opslagruimte"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Toegang krijgen tot USB-opslag."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Toegang tot de SD-kaart."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Toegankelijkheidsfuncties"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Functies die kunnen worden aangevraagd door ondersteunende technologie."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"statusbalk uitschakelen of wijzigen"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Hiermee kan de app de statusbalk uitschakelen of systeempictogrammen toevoegen en verwijderen."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"statusbalk"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Hiermee wordt activiteitenbeheer uitgeschakeld. Er wordt geen volledige uitschakeling uitgevoerd."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"schakelen tussen apps voorkomen"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Hiermee wordt voorkomen dat de gebruiker overschakelt naar een andere app."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"huidige appgegevens ophalen"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"De houder kan hiermee persoonlijke gegevens ophalen over de applicatie die momenteel op de voorgrond wordt weergegeven."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"alle startende apps bijhouden en beheren"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Hiermee kan de app de manier bijhouden en beheren waarop het systeem activiteiten start. Schadelijke apps kunnen het systeem volledig in gevaar brengen. Deze machtiging is alleen voor ontwikkeling vereist, nooit voor normaal gebruik."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"melding verzenden dat pakket is verwijderd"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Hiermee kan de app het huidige accugebruik voor gegevens op laag niveau lezen. Een app kan hierdoor mogelijk gedetailleerde informatie achterhalen over de door u gebruikte apps."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"accustatistieken aanpassen"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Hiermee kan de app verzamelde accustatistieken wijzigen. Niet voor gebruik door normale apps."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"bewerkingsstatistieken van apps ophalen"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Hiermee kan de app verzamelde bewerkingsstatistieken van apps ophalen. Niet voor gebruik door normale apps."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"bewerkingsstatistieken van apps wijzigen"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Hiermee kan de app verzamelde bewerkingsstatistieken van apps wijzigen. Niet voor gebruik door normale apps."</string>
     <string name="permlab_backup" msgid="470013022865453920">"systeemback-up en -herstel beheren"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Hiermee kan de houder zich verbinden met de hoofdinterface van een invoermethode. Nooit vereist voor normale apps."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"koppelen aan een toegankelijkheidsservice"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Hiermee wordt de houder toegestaan verbinding te maken met de hoofdinterface van een toegankelijkheidsservice. Nooit vereist voor normale apps."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"verkennen via aanraking aanvragen"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Hiermee kan de houder een interactiemodus aanvragen waarin aangeraakte items worden uitgesproken en de gebruikersinterface kan worden bediend met gebaren."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"verbeterde internettoegankelijkheid aanvragen"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"koppelen aan een sms-service"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Hiermee kan de gebruiker koppelen met de hoofdinterface van een tekstservice (zoals SpellCheckerService). Dit is niet nodig voor normale apps."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"koppelen aan een VPN-service"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 8123bea..a3ee3a5 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Pamięć"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostęp do nośnika USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostęp do karty SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funkcje ułatwień dostępu"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funkcje, których może zażądać technologia ułatwień dostępu."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"wyłączanie lub zmienianie paska stanu"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Pozwala aplikacji na wyłączanie paska stanu oraz dodawanie i usuwanie ikon systemowych."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"pasek stanu"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Przełącza menedżera aktywności w stan wyłączenia. Nie wykonuje pełnego wyłączenia."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zapobieganie przełączaniu aplikacji"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Uniemożliwia użytkownikowi przełączenie na inną aplikację."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"pobierz informacje o bieżącej aplikacji"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Zezwala posiadaczowi na pobieranie prywatnych informacji o bieżącej aplikacji i wyświetlanie ich na pierwszym planie ekranu."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"monitorowanie i kontrolowanie wszystkich uruchamianych aplikacji"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Pozwala aplikacji na monitorowanie i kontrolowanie sposobu uruchamiania działań przez system. Złośliwe aplikacje mogą całkowicie naruszyć zabezpieczenia systemu. To uprawnienie nigdy nie jest potrzebne podczas normalnego użytkowania, a jedynie podczas programowania."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"wysyłanie transmisji informującej o usuniętym pakiecie"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Zezwala aplikacji na odczytywanie bieżących danych niskiego poziomu o wykorzystaniu baterii. Możliwe jest wtedy zbieranie przez aplikację szczegółowych danych o używanych aplikacjach."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"zmienianie statystyk dotyczących baterii"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Zezwala aplikacji na modyfikowanie zebranych statystyk dotyczących baterii. Nieprzeznaczone dla zwykłych aplikacji."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"pobieranie statystyk działania aplikacji"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Zezwala aplikacji na pobieranie zebranych statystyk działania aplikacji. Nieprzeznaczone dla zwykłych aplikacji."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modyfikowanie statystyk działania aplikacji"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Zezwala aplikacji na modyfikowanie zebranych statystyk działania aplikacji. Nieprzeznaczone dla zwykłych aplikacji."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrolowanie tworzenia i przywracania kopii zapasowych systemu"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Pozwala na powiązanie wybranego sposobu wprowadzania tekstu z interfejsem najwyższego poziomu. To uprawnienie nie powinno być nigdy wymagane przez zwykłe aplikacje."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"tworzenie powiązania z usługą ułatwień dostępu"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi ułatwień dostępu. Nieprzeznaczone dla zwykłych aplikacji."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"żądanie dotyczące czytania dotykiem"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Pozwala właścicielowi zażądać włączenia trybu interaktywnego, w którym nazwy klikniętych elementów są wypowiadane na głos, a po interfejsie można poruszać się gestami."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"żądanie dotyczące dodatkowych ułatwień dostępu w internecie"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"tworzenie powiązania z usługą tekstową"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Pozwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi tekstowej (np. SpellCheckerService). Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"tworzenie powiązania z usługą VPN"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 66879ee..cdc5a49 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Aceder ao armazenamento USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Aceder ao cartão SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funcionalidades de acessibilidade"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funcionalidades que a tecnologia de apoio pode solicitar."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"desactivar ou modificar barra de estado"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Permite à aplicação desativar a barra de estado ou adicionar e remover ícones do sistema."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"barra de estado"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Coloca o gestor de actividade num estado de encerramento. Não executa um encerramento completo."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir trocas de aplicações"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Impede que o utilizador mude para outra aplicação."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"obter informações da aplicação atual"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Permite ao titular recuperar informações privadas acerca da aplicação atual no primeiro plano do ecrã."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"monitorizar e controlar a iniciação de todas as aplicações"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Permite que uma aplicação monitorize e controle a forma como o sistema inicia atividades. As aplicações maliciosas podem comprometer totalmente o sistema. Esta autorização só é necessária para programação, nunca para utilização normal."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"enviar difusão de pacote removido"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Permite que uma aplicação leia os atuais dados de utilização da bateria de baixo nível. Poderá permitir que a aplicação encontre informações detalhadas sobre as aplicações que utiliza."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modificar estatísticas da bateria"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Permite que a aplicação modifique as estatísticas recolhidas sobre a bateria. Não se destina a utilização por aplicações normais."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"obter estatísticas de utilização da aplicação"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Permite que a aplicação obtenha as estatísticas de utilização da aplicação recolhidas. Não se destina a utilização por aplicações normais."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modificar estatísticas de utilização da aplicação"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Permite que a aplicação modifique as estatísticas de utilização de aplicação recolhidas. Não se destina a utilização por aplicações normais."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlar a cópia de segurança e restauro do sistema"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permite ao titular vincular-se à interface de nível superior de um método de entrada. Nunca deve ser necessário para aplicações normais."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"vincular a um serviço de acessibilidade"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permite que o titular vincule a interface de nível superior de um serviço de acessibilidade. Nunca deverá ser necessário para aplicações normais."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"solicitar exploração por toque"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Permite ao Hoder solicitar um modo de interação em que os itens tocados são falados em voz alta e a IU pode ser explorada através de gestos."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"solicitar acessibilidade Web melhorada"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"vincular a um serviço de texto"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Permite ao titular ligar-se à interface de nível superior de um serviço de texto (por exemplo SpellCheckerService). Nunca deverá ser necessário para aplicações normais."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"vincular a um serviço VPN"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index b9167ef..cacb2d5 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acessa o armazenamento USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acessar o cartão SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Recursos de acessibilidade"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Recursos que a tecnologia assistencial pode solicitar."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"desativar ou modificar a barra de status"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Permite que o aplicativo desative a barra de status ou adicione e remova ícones do sistema."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"barra de status"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Coloca o gerenciador de atividades em um estado de desligamento. Não executa o desligamento completo."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar trocas de aplicativo"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Impede que o usuário alterne para outro aplicativo."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"obter informações do aplicativo atual"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Permite ao titular recuperar informações particulares sobre o aplicativo atual em primeiro plano na tela."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"monitorar e controlar todos os aplicativos que estão sendo iniciados"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Permite que o aplicativo monitore e controle a forma como o sistema inicia atividades. Aplicativos maliciosos podem comprometer completamente o sistema. Esta permissão só é necessária para o desenvolvimento, nunca para o uso normal."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"enviar transmissão removida do pacote"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Permite que o aplicativo leia os dados de uso da bateria de baixo nível atuais. Pode fornecer ao aplicativo informações detalhadas sobre os aplicativos usados por você."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modificar estatísticas da bateria"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Permite que o aplicativo modifique as estatísticas coletadas da bateria. Não deve ser usado em aplicativos normais."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"recuperar estatísticas de operações de aplicativos"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Permite que o aplicativo recupere as estatísticas de operações de aplicativos. Não deve ser usado em aplicativos normais."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modificar estatísticas de operações de aplicativos"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Permite que o aplicativo modifique as estatísticas de operações de aplicativos. Não deve ser usado em aplicativos normais."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlar backup e restauração do sistema"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permite que o proprietário utilize a interface de nível superior de um método de entrada. Nunca deve ser necessário para aplicativos normais."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"usar um serviço de acessibilidade"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permite que o proprietário use a interface de nível superior de um serviço de acessibilidade. Nunca deve ser necessário para aplicativos comuns."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"solicitar explorar por toque"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Permite ao proprietário solicitar um modo de interação em que os itens tocados são falados em voz alta e a interface do usuário pode ser explorada com gestos."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"solicitar acessibilidade melhorada da Web"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"sujeitar-se a um serviço de texto"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Permite que o proprietário utilize interface de nível superior de um serviço de texto (por exemplo, SpellCheckerService). Nunca deve ser necessário para aplicativos normais."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"se ligam a um serviço de VPN"</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 8d8d882..67e5576 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -310,6 +310,10 @@
     <!-- no translation found for permgroupdesc_storage (7442318502446874999) -->
     <skip />
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Access a la carta SD."</string>
+    <!-- no translation found for permgrouplab_accessibilityFeatures (7919025602283593907) -->
+    <skip />
+    <!-- no translation found for permgroupdesc_accessibilityFeatures (4205196881678144335) -->
+    <skip />
     <string name="permlab_statusBar" msgid="7417192629601890791">"deactivar u modifitgar la trav da status"</string>
     <!-- no translation found for permdesc_statusBar (8434669549504290975) -->
     <skip />
@@ -449,6 +453,10 @@
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar il midar tranter applicaziuns"</string>
     <!-- no translation found for permdesc_stopAppSwitches (8262195802582255021) -->
     <skip />
+    <!-- no translation found for permlab_getTopActivityInfo (2537922311411546016) -->
+    <skip />
+    <!-- no translation found for permdesc_getTopActivityInfo (2512448855496067131) -->
+    <skip />
     <!-- no translation found for permlab_runSetActivityWatcher (892239094867182656) -->
     <skip />
     <!-- no translation found for permdesc_runSetActivityWatcher (6003603162578577406) -->
@@ -477,6 +485,10 @@
     <skip />
     <!-- no translation found for permdesc_updateBatteryStats (6862817857178025002) -->
     <skip />
+    <!-- no translation found for permlab_getAppOpsStats (1508779687436585744) -->
+    <skip />
+    <!-- no translation found for permdesc_getAppOpsStats (6243887041577912877) -->
+    <skip />
     <!-- no translation found for permlab_updateAppOpsStats (8829097373851521505) -->
     <skip />
     <!-- no translation found for permdesc_updateAppOpsStats (50784596594403483) -->
@@ -521,6 +533,14 @@
     <skip />
     <!-- no translation found for permdesc_bindAccessibilityService (7034615928609331368) -->
     <skip />
+    <!-- no translation found for permlab_canRequestTouchExplorationMode (6094034289937541846) -->
+    <skip />
+    <!-- no translation found for permdesc_canRequestTouchExplorationMode (940314268922270663) -->
+    <skip />
+    <!-- no translation found for permlab_canRequestEnahncedWebAccessibility (1905232971331801453) -->
+    <skip />
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
     <skip />
     <!-- no translation found for permdesc_bindTextService (8151968910973998670) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 30276cb..4849dff 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Stocare"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesează stocarea USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesează cardul SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funcții de accesibilitate"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funcții pe care tehnologia de asistare le poate solicita."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"dezactivare sau modificare bare de stare"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Permite aplicaţiei să dezactiveze bara de stare sau să adauge şi să elimine pictograme de sistem."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"bară de stare"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Plasează Managerul de activităţi într-o stare de închidere. Nu efectuează o închidere completă."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"împiedicare comutare între aplicaţii"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Împiedică trecerea utilizatorului la o altă aplicaţie."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"obținere informații despre aplicația curentă"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Permite proprietarului să preia informațiile private despre aplicația curentă în prim-planul ecranului."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"monitorizare şi control asupra lansării tuturor aplicaţiilor"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Permite aplicaţiei să monitorizeze şi să controleze modul în care sistemul lansează activităţi. Aplicaţiile rău intenţionate pot să compromită sistemul în întregime. Această permisiune este necesară doar pentru dezvoltare şi niciodată pentru utilizarea normală."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"trimitere mesaj difuzat privind extragerea din pachet"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Permite unei aplicaţii să citească datele actuale privind utilizarea la nivel redus a bateriei. Cu această permisiune, aplicaţia poate afla informaţii detaliate despre aplicaţiile pe care le utilizaţi."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"modifică statistici referitoare la baterie"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Permite aplicaţiei să modifice statisticile colectate despre baterie. Nu se utilizează de aplicaţiile obişnuite."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"preluarea statisticilor privind operațiile aplicației"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Permite aplicației să preia statisticile colectate privind operațiile aplicației. Nu se utilizează de aplicațiile obișnuite."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"modificarea statisticilor privind utilizarea aplicației"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Permite aplicației să modifice statisticile colectate despre utilizarea aplicației. Nu se utilizează de aplicațiile obișnuite."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlare copiere de rezervă şi restabilire a sistemului"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unei metode de introducere. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"conectare la un serviciu de accesibilitate"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unui serviciu de accesibilitate. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"solicitare explorare prin atingere"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Permite proprietarului să solicite un mod de interacțiune în care elementele atinse sunt rostite cu voce tare, iar interfața de utilizare poate fi explorată prin gesturi."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"solicitare accesibilitate web îmbunătățită"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"conectare la un serviciu text"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Permite proprietarului să se conecteze la o interfaţă de nivel superior a unui serviciu text (de ex., SpellCheckerService). Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"conectare la un serviciu VPN"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index bbfd928..b02b6f8 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Память"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Доступ к USB-накопителю."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ к SD-карте."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Специальные возможности"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Специальные возможности, которые можно запрашивать"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"отключать или изменять строку состояния"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Приложение сможет отключать строку состояния, а также добавлять и удалять системные значки."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"строка состояния"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Завершает работу диспетчера активности. Не выполняет полное завершение работы."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"запретить переключение приложений"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Запрещает пользователям переключаться между приложениями."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"показывать информацию о текущем приложении"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"На экране будут отображаться сведения о текущем приложении."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"отслеживание и управление запуском всех приложений"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Приложение сможет отслеживать запуск системных процессов и управлять им. Вредоносные программы смогут получить полный контроль над системой. Это разрешение необходимо только для разработки и не нужно в обычном режиме."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"отправлять рассылку об удалении пакета"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Разрешает приложению получать данные об использовании батареи на низшем уровне. В результате оно может иметь доступ к информации об используемых вами программах."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"изменять статистику батареи"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Приложение сможет изменять собранную статистику использования заряда батареи. Это разрешение не используется обычными приложениями."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"получать статистику операций в приложениях"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Приложение сможет получать собранную статистику операций в приложениях. Это разрешение не используется обычными программами."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"изменять статистику операций в приложениях"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Приложение сможет изменять собранную статистику операций в приложениях. Это разрешение не используется обычными приложениями."</string>
     <string name="permlab_backup" msgid="470013022865453920">"управление резервным копированием и восстановлением системы"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Приложение сможет подключаться к базовому интерфейсу системы ввода. Это разрешение не используется обычными приложениями."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"подключаться к службе спецвозможностей"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Приложение сможет подключаться к базовому интерфейсу службы специальных возможностей. Это разрешение не используется обычными приложениями."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"запрашивать функцию \"Изучение касанием\""</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Владелец устройства сможет запрашивать включение режима \"Изучение касанием\", чтобы названия элементов управления озвучивались."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"запрашивать установку веб-скриптов"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"привязка к службе текстовых сообщений"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Позволяет подключаться к базовому интерфейсу службы текстовых сообщений (например, SpellCheckerService). Это разрешение не используется обычными приложениями."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"подключаться к VPN-службе"</string>
@@ -752,7 +763,7 @@
     <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Неверный PIN-код."</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"Для разблокировки нажмите \"Меню\", а затем 0."</string>
     <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Экстренная служба"</string>
-    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Сеть не найдена"</string>
+    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Нет сигнала"</string>
     <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Экран заблокирован."</string>
     <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Нажмите \"Меню\", чтобы разблокировать экран или вызвать службу экстренной помощи."</string>
     <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Для разблокировки нажмите \"Меню\"."</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index c0147eb..9070f3d 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Ukladací priestor"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Prístup do ukl. priestoru USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Prístup na kartu SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funkcie zjednodušenia ovládania"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funkcie, ktoré môže vyžadovať nápomocná technológia."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"zakázanie alebo zmeny stavového riadka"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Umožňuje aplikácii vypnúť stavový riadok alebo pridať a odstrániť systémové ikony."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"stavový riadok"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Uvedie správcu činností do vypnutého stavu. Úplné vypnutie však nenastane."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zabrániť prepínaniu aplikácií"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Zabráni používateľovi prepnúť na inú aplikáciu."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"získať informácie o aktuálnej aplikácii"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Umožňuje držiteľovi povolenia načítať súkromné ​​informácie o aktuálnej aplikácii v popredí obrazovky."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"sledovať a ovládať všetky spustenia aplikácií"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Umožňuje aplikácii sledovať a ovládať spúšťanie aktivít systémom. Škodlivé aplikácie môžu systém úplne ovládnuť. Toto povolenie je potrebné len na účely vývoja, nikdy nie na bežné používanie."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"odoslanie vysielania o odstránení balíčka"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Umožňuje aplikácii čítať aktuálne údaje nízkej úrovne o používaní batérie. Pomocou tejto funkcie môže aplikácia zistiť podrobnosti o tom, ktoré aplikácie používate."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"zmena štatistických údajov o batérii"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Umožňuje aplikácii zmeniť zhromaždené štatistické údaje o batérii. Bežné aplikácie toto nastavenie nepoužívajú."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"získať štatistické údaje o fungovaní aplikácií"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Umožňuje aplikácii získať zhromaždené štatistické údaje o fungovaní aplikácií. Bežné aplikácie toto nastavenie nepoužívajú."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"upraviť štatistické údaje o fungovaní aplikácií"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Umožňuje aplikácii zmeniť zhromaždené štatistické údaje o fungovaní aplikácií. Bežné aplikácie toto nastavenie nepoužívajú."</string>
     <string name="permlab_backup" msgid="470013022865453920">"Ovládať zálohovanie a obnovu systému"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania metódy vstupu. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"viazať na službu zjednodušeného ovládania"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania služby zjednodušeného ovládania. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"vyžiadať preskúmanie dotykom"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Držiteľovi umožňuje, aby požiadal o interaktívny režim, v ktorom aplikácia reaguje na dotyky položiek vyslovením ich názvu a v ktorom môže používateľ preskúmať používateľské rozhranie pomocou gest."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"vyžiadať zlepšenie dostupnosti webu"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"väzba na textovú službu"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania textovej služby (napr. SpellCheckerService). Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"Zaviazať k službe VPN"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 5e90928..768e9a9 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Prostor za shranjevanje"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostop do pomnilnika USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostop do kartice SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funkcije za ljudi s posebnimi potrebami"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funkcije, ki jih lahko zahteva tehnologija za ljudi s posebnimi potrebami."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"onemogočanje ali spreminjanje vrstice stanja"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Programom omogoča onemogočenje vrstice stanja ali dodajanje in odstranjevanje ikon sistema."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"vrstica stanja"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Upravitelja dejavnosti preklopi v stanje za zaustavitev. Ne izvede celotne zaustavitve."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"preprečevanje preklopa programov"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Uporabniku preprečuje preklop v drug program."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"pridobivanje podatkov o trenutni aplikaciji"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Omogoča imetniku pridobivanje zasebnih podatkov o trenutni aplikaciji v ospredju zaslona."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"spremljanje in nadzor vseh zagonov programov"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Programu omogoča spremljanje in nadziranje načina, kako sistem zažene dejavnosti. Zlonamerni programi lahko v celoti ogrozijo varnost sistema. To dovoljenje je potrebno samo za razvoj, vendar nikoli za običajno uporabo."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"pošiljanje oddaje brez paketa"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Aplikaciji omogoča branje podatkov o trenutni nizki napolnjenosti akumulatorja. Aplikaciji lahko tudi dovoli dostop do podrobnosti o tem, katere aplikacije uporabljate."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"spreminjanje statističnih podatkov o akumulatorju"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Aplikaciji omogoča spreminjanje zbranih statističnih podatkov o akumulatorju. Ni primerno za uporabo z običajnimi aplikacijami."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"pridobi statistične podatke o delovanju aplikacij"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Aplikaciji dovoli pridobivanje zbranih statističnih podatkov o delovanju aplikacij. Ni za uporabo v navadnih aplikacijah."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"spreminjanje statističnih podatkov o delovanju aplikacije"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Aplikaciji dovoli spreminjanje zbranih statističnih podatkov o delovanju aplikacij. Ni za uporabo v navadnih aplikacijah."</string>
     <string name="permlab_backup" msgid="470013022865453920">"nadzor varnostnega kopiranja sistema in obnovitev"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Lastniku omogoča, da se poveže z vmesnikom načina vnosa najvišje ravni. Tega nikoli ni treba uporabiti za navadne programe."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"povezovanje s storitvijo za ljudi s posebnimi potrebami"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Lastniku omogoča povezovanje z vmesnikom najvišje ravni storitve za ljudi s posebnimi potrebami. Tega nikoli ni treba uporabiti za navadne aplikacije."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"zahteva za raziskovanje z dotikom"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Imetniku dovoli zahtevanje načina interaktivnosti, v katerem se dotaknjene možnosti izgovorijo na glas in je mogoče uporabniški vmesnik raziskati s potezami."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"zahteva za izboljšano spletno dostopnost"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"poveži z besedilno storitvijo"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Dovoljuje, da se lastnik poveže z vmesnikom besedilne storitve najvišje ravni (npr. SpellCheckerService). Tega nikoli ni treba uporabiti za navadne programe."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"povezava s storitvijo navideznega zasebnega omrežja"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 736a545..0812ed1 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Складиште"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Приступите USB меморији."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Приступ SD картици."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Функције приступачности"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Функције које технологија за помоћ може да захтева."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"онемогућавање или измена статусне траке"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Дозвољава апликацији да онемогући статусну траку или да додаје и уклања системске иконе."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"статусна трака"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Ставља менаџера активности у стање искључивања. Не искључује га у потпуности."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"спречавање пребацивања са једне апликације на другу"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Спречава да корисник пређе на другу апликацију."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"преузимање информација о актуелној апликацији"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Дозвољава власнику да преузима приватне информације о актуелној апликацији у првом плану екрана."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"надгледање и контрола покретања свих апликација"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Дозвољава апликацији да прати начин на који систем покреће активности и да њиме управља. Злонамерне апликације могу у потпуности да угрозе систем. Ова дозвола је потребна само за програмирање, а никада за уобичајено коришћење."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"слање емитовања уклоњеног пакета"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Дозвољава апликацији да чита опште податке о тренутној употреби батерије на измаку. Можда ће апликацији дозволити да сазна детаљне информације о томе које апликације користите."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"измена статистике о батерији"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Дозвољава апликацији да мења прикупљену статистику о батерији. Не користе је обичне апликације."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"преузимање статистике о функционисању апликације"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Дозвољава апликацији да преузима прикупљену статистику о функционисању апликације. Не користе је уобичајене апликације."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"измена статистике о функционисању апликације"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Дозвољава апликацији да измени прикупљену статистику о функционисању апликације. Не користе је уобичајене апликације."</string>
     <string name="permlab_backup" msgid="470013022865453920">"контрола резервне копије система и враћање почетних вредности"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Омогућава да се власник обавеже на интерфејс методе уноса највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"повезивање са услугом приступачности"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Дозвољава власнику да се повеже са интерфејсом услуге приступачности највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"захтевање истраживања додиром"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Омогућава носиоцу да захтева режим интеракције у коме се називи додирнутих ставки изговарају наглас, а кориснички интерфејс може да се истражује покретима."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"захтевање побољшане приступачности вебу"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"обавезивање на текстуалну услугу"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Омогућава власнику да се обавеже на интерфејс текстуалне услуге највишег нивоа (нпр. SpellCheckerService). Обичне апликације никада не би требало да је користе."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"везивање за VPN услугу"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index e975f68..7047508 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få åtkomst till USB-enheten."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få åtkomst till SD-kortet."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Tillgänglighetsfunktioner"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funktioner som kan behövas med hjälpmedel."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"inaktivera eller ändra statusfält"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Tillåter att appen inaktiverar statusfältet eller lägger till och tar bort systemikoner."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"statusfält"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Sätter aktivitetshanteraren i avstängningsläge. Utför inte en fullständig avstängning."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"förhindrar programbyten"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Hindrar användaren från att byta till en annan app."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"hämta information om aktuell app"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Innehavaren tillåts att hämta privat information om den app som för tillfället är i förgrunden på skärmen."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"övervaka och styra alla appar som öppnas"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Tillåter att appen övervakar och styr hur systemet startar aktiviteter. Skadliga appar kan kompromettera systemet helt. Den här behörigheten behövs bara för programmering, aldrig för vanlig användning."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"skicka meddelande om borttaget paket"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Tillåter att en app läser de aktuella uppgifterna om låg batterianvändningsnivå. Appen kan tillåtas få reda på detaljerade uppgifter om vilka appar du använder."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"ändra batteristatistik"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Tillåter att appen ändrar samlad batteristatistik. Används inte av vanliga appar."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"hämta åtgärdsstatistik för appar"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Tillåter att appen hämtar samlad åtgärdsstatistik för appar. Används inte av vanliga appar."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"ändra appars åtgärdsstatistik"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Tillåter att appen ändrar samlad åtgärdsstatistik för appar. Används inte av vanliga appar."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrollera säkerhetskopiering och återställning av systemet"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en inmatningsmetod. Ska inte behövas för vanliga appar."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"bind till en tillgänglighetstjänst"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en tillgänglighetstjänst. Ska inte behövas för vanliga appar."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"begära beröringsstyrda gränssnittsfunktioner"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Innehavaren tillåts begära ett interaktionsläge där objekt som användaren trycker på läses upp och där gränssnittet kan användas med gester."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"begära tillgänglighetsfunktioner"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"bind till en texttjänst"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Tillåter innehavaren att binda mot den högsta gränssnittsnivån i en texttjänst (t.ex. SpellCheckerService). Bör aldrig behövas för normala appar."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"bind till en VPN-tjänst"</string>
@@ -589,7 +600,7 @@
     <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"testa åtkomst till skyddad lagringsenhet"</string>
     <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"Tillåter att appen testar behörighet till USB-enheter för användning på framtida enheter."</string>
     <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"Tillåter appen att testa behörighet till SD-kortet för användning på framtida enheter."</string>
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ändra eller ta bort innehållet"</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ändra eller ta bort innehåll på USB-enheten"</string>
     <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"ändra eller ta bort innehåll på SD-kortet"</string>
     <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Gör att app skriver till USB."</string>
     <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Tillåter att appen skriver till SD-kortet."</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index fff8a16..d590d37 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Hifadhi"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Fikia hifadhi ya USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Fikia kadi ya SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Vipengele vya ufikiaji"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Vipengele ambavyo teknolojia saidizi inaweza kuomba."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"zima au rekebisha mwambaa hali"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Inaruhusu programu kulemaza upau wa hali au kuongeza na kutoa ikoni za mfumo."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"mwamba hali"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Huweka kisimamia shughuli katika hali ya kuzima. Haiadhiri uzimaji kamili"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zuia swichi za app"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Huzuia mtumiaji dhidi ya kubadilisha na kwenda kwa programu nyingine."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"pata maelezo ya sasa kuhusu programu"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Huruhusu mmiliki kurejesha maelezo ya faragha kuhusu programu ya sasa katika mandharimbele ya skrini."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"Fuatilia na kudhibiti uzinduzi wote wa programu"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Inaruhusu programu kufuatilia na kudhibiti jinsi mfumo unazindua shughuli. Programu hasidi zinaweza kutia mfumo hatarini. Ruhusa inahitajika tu kwa usanidi, kamwe sio kwa matumizi ya kawaida."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"furushi lililotumwa limeondoa tangazo"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Inaruhusu programu kusoma data ya sasa ya matumizi ya kiwango cha chini cha betri. Huenda ikaruhusu kupata maelezo ya kina kuhusu programu unazozitumia."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"rekebisha takwimu za betri"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Inaruhusu programu kurekebisha takwimu za betri zilizokusanywa. Si ya kutumiwa na programu za kawaida."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"epua takwimu za oparesheni ya programu"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Inaruhusu programu kuepua takwimu za matumizi ya programu zilizokusanywa. Si ya kutumiwa na programu za kawaida."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"rekebisha takwimu za oparesheni ya programu"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Inaruhusu programu kurekebisha takwimu za matumizi ya programu zilizokusanywa. Si ya kutumiwa na programu za kawaida."</string>
     <string name="permlab_backup" msgid="470013022865453920">"Dhibiti kuhifadhi nakala na kurejesha kwa mfumo"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Inaruhusu mmiliki kushurutisha kwenye kusano ya kiwango cha juu ya mbinu ya ingizo. Haipaswi kuhitajika kwa programu za kawaida."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"funga kwa huduma ya ufikiaji"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Inamuruhusu mmiliki kufunga kipengee kinachojitokeza katika nyanja mbalimbali za kiwango cha juu cha huduma ya afikiaji. Hapaswi kuhitajika kwa programu za kawaida."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"omba uchunguzi kwa kugusa"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Huruhusu programu kuomba hali ya mwingiliano ambapo vipengee vilivyoguswa husemwa kwa sauti na UI inaweza kuchunguzwa kupitia ishara."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"omba ufikiaji wa wavuti ulioimarishwa"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"Imefungwa kwa huduma ya maandishi"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Inaruhusu kishikiliaji kushurutisha kusano ya kiwango cha juu ya huduma ya matini(k.m.SpellCheckerService). Haipaswi kuhitajika kwa programu za kawaida."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"funga kwa huduma ya VPN"</string>
@@ -419,9 +430,9 @@
     <string name="permlab_writeProfile" msgid="907793628777397643">"rekebisha kadi yako mwenyewe ya mawasiliano"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Inaruhusu programu kubadilisha au kuongeza taarifa ya maelezo mafupi ya kibinafsi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na taarifa ya anwani. Hii inamaanisha kuwa programu inaweza kukutambua na inaweza kutuma taarifa ya maelezo yako mafupi kwa wengine."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"soma mipasho yako wa kijamii"</string>
-    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Inaruhusu programu kufikia na kupatanisha sasisho za kijamii kutoka kwa marafiki zako. Kuwa makini wakati unashiriki taarifa -- hii inaruhusu programu kusoma mawasiliano kati yako na marafiki zako kwenye mitandao ya jamii, bila kujali usiri. Kumbuka: idhini hii haiwezi kutekelezwa kwenye mitandao yote ya jamii."</string>
+    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Huruhusu programu kufikia na kupatanisha masasisho ya kijamii kutoka kwa marafiki zako. Kuwa makini wakati unashiriki taarifa -- hii huruhusu programu kusoma mawasiliano kati yako na marafiki zako kwenye mitandao ya jamii, bila kujali usiri. Kumbuka: idhini hii haiwezi kutekelezwa kwenye mitandao yote ya jamii."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"andika kwa mipasho yako wa kijamii"</string>
-    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Inaruhusu programu kuonyesha sasisho za kijamii kutoka kwa marafiki zako. Kuwa makini wakati unashiriki taarifa -- hii inaruhusu programu kutoa ujumbe unaoweza kuonekana kuwa unatoka kwa rafiki. Kumbuka: idhini hii huenda usitekelezwe kwenye mitandao yote ya kijamii."</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Huruhusu programu kuonyesha masasisho ya kijamii kutoka kwa marafiki zako. Kuwa makini wakati unashiriki taarifa -- hii inaruhusu programu kutoa ujumbe unaoweza kuonekana kuwa unatoka kwa rafiki. Kumbuka: idhini hii huenda usitekelezwe kwenye mitandao yote ya jamii."</string>
     <string name="permlab_readCalendar" msgid="5972727560257612398">"soma matukio ya kalenda pamoja na maelezo ya siri"</string>
     <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Inaruhusu programu kusoma matukio yote ya kalenda yaliohifadhiwa kwenye kompyuta kibao yako, yakijumuisha yale ya marafiki au wafanyakazi wenza. Hii inaweza kuruhusu programu kushiriki au kuhifadhi data yako ya kaelnda, bila kujali usiri au unyeti."</string>
     <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Inaruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye simu yako, pamoja na yale ya marafiki au wafanyakazi wenza. Hii inaweza kuruhusu programu kushiriki au kuhifadhi data yako ya kalenda, bila kujali usiri au umuhimu."</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 96e03b1..374a8ef 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"พื้นที่เก็บข้อมูล"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"เข้าถึงที่เก็บข้อมูล USB"</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"เข้าถึงการ์ด SD"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"คุณลักษณะการเข้าถึง"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"คุณลักษณะที่เทคโนโลยีความช่วยเหลือสามารถร้องขอได้"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"ปิดการใช้งานหรือแก้ไขแถบสถานะ"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"อนุญาตให้แอปพลิเคชันปิดใช้งานแถบสถานะหรือเพิ่มและนำไอคอนระบบออก"</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"แถบสถานะ"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"กำหนดให้ตัวจัดการกิจกรรมอยู่ในสถานะปิดระบบ โดยไม่ได้ปิดระบบอย่างสมบูรณ์"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ป้องกันการเปลี่ยนแอปพลิเคชัน"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"ป้องกันไม่ให้ผู้ใช้สลับไปใช้แอปพลิเคชันอื่น"</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"รับข้อมูลแอปพลิเคชันปัจจุบัน"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"ช่วยให้เจ้าของสามารถดึงข้อมูลส่วนตัวเกี่ยวกับแอปพลิเคชันปัจจุบันในส่วนหน้าของหน้าจอ"</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"ตรวจสอบและควบคุมแอปพลิเคชันทั้งหมดที่เปิดใช้งาน"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"อนุญาตให้แอปพลิเคชันตรวจสอบและควบคุมวิธีการที่ระบบเปิดกิจกรรมต่างๆ แอปพลิเคชันที่เป็นอันตรายอาจทำอันตรายแก่ระบบได้อย่างสิ้นเชิง การอนุญาตนี้จำเป็นสำหรับการพัฒนาเท่านั้น ไม่ใช้สำหรับแอปพลิเคชันทั่วไปโดยเด็ดขาด"</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"ส่งการกระจายข้อมูลว่ามีการนำแพคเกจออก"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลการใช้แบตเตอรี่ที่มีพลังงานเหลือน้อยในปัจจุบัน โดยอาจอนุญาตให้แอปพลิเคชันค้นหาข้อมูลรายละเอียดว่าคุณใช้งานแอปพลิเคชันใดบ้าง"</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"แก้ไขสถิติของแบตเตอรี่"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"อนุญาตให้แอปพลิเคชันแก้ไขสถิติของแบตเตอรี่่ที่เก็บรวบรวมไว้ ไม่ใช้สำหรับแอปพลิเคชันทั่วไป"</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"เรียกคืนสถิติการทำงานของแอปพลิเคชัน"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"อนุญาตให้แอปพลิเคชันเรียกคืนสถิติการทำงานของแอปพลิเคชันที่เก็บรวบรวมไว้ ไม่ใช้สำหรับแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"แก้ไขสถิติการทำงานของแอปพลิเคชัน"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"อนุญาตให้แอปพลิเคชันแก้ไขสถิติการทำงานของแอปพลิเคชันที่เก็บรวบรวมไว้ ไม่ใช้สำหรับแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_backup" msgid="470013022865453920">"ควบคุมการสำรองและคืนค่า"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"อนุญาตให้ผู้ใช้เชื่อมโยงกับส่วนติดต่อผู้ใช้ระดับสูงสุดของวิธีการป้อนข้อมูล ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"เชื่อมโยงกับบริการการเข้าถึง"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"อนุญาตให้เจ้าของเชื่อมโยงกับส่วนติดต่อระดับบนสุดของบริการการเข้าถึง ซึ่งแอปพลิเคชันทั่วไปไม่จำเป็นต้องใช้"</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"ขอการแตะเพื่อสำรวจ"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"อนุญาตให้ผู้ถือสิทธิ์ขอโหมดโต้ตอบซึ่งจะมีเสียงพูดออกมาเมื่อรายการถูกแตะ และสามารถสำรวจ UI ได้โดยการใช้ท่าทางสัมผัส"</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"ขอการเข้าถึงเว็บที่มีประสิทธิภาพมากขึ้น"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"เชื่อมโยงกับบริการข้อความ"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"อนุญาตให้ผู้ใช้เชื่อมโยงกับส่วนติดต่อผู้ใช้ระดับสูงสุดของบริการข้อความ (เช่น บริการเครื่องตรวจตัวสะกด) ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"เชื่อมโยงกับบริการ VPN"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 95d8cf2..1ad2b97 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Imbakan"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"I-access ang imbakan na USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"I-access ang SD card."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Mga tampok ng accessibility"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Mga tampok na maaaring hilingin ng tumutulong na teknolohiya."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"huwag paganahin o baguhin ang status bar"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Pinapayagan ang app na huwag paganahin ang status bar o magdagdag at mag-alis ng mga icon ng system."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"status bar"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Inilalagay ang tagapamahala ng aktibidad sa katayuan ng pag-shutdown. Hindi nagsasagawa ng kumpletong pag-shutdown."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"pigilan ang mga paglipat ng app"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Pinipigilan ang mga user sa paglipat sa isa pang app."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"kunin ang impormasyon ng kasalukuyang app"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Pinapayagan ang may-ari na bawiin ang pribadong impormasyon tungkol sa kasalukuyang application sa foreground ng screen."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"subaybayan at kontrolin ang lahat ng paglunsad ng app"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Pinapayagan ang app na subaybayan at kontrolin kung paano naglulunsad ng mga aktibidad ang system. Maaaring ganap na ikompromiso ng nakakahamak na apps ang system. Kinakailangan lamang ang pahintulot na ito para sa pagpapabuti, hindi kailanman para sa normal na paggamit."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"magpadala ng package inalis ang broadcast"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Binibigyang-daan ang application na basahin ang kasalukuyang data sa paggamit ng mababang antas ng baterya. Maaaring bigyang-daan ang application na malaman ang detalyadong impormasyon tungkol sa kung aling apps ang ginagamit mo."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"baguhin ang mga istatistika ng baterya"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Binibigyang-daan ang app na baguhin ang mga nakolektang istatistika ng baterya. Hindi para sa paggamit ng normal na apps."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"bawiin ang mga istatistika ng pagpapagana ng app"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Binibigyang-daan ang app na bawiin ang mga nakolektang istatistika ng pagpapagana ng application. Hindi para sa paggamit ng normal na apps."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"baguhin ang mga istatistika ng pagpapatakbo ng app"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Binibigyang-daan ang app na baguhin ang mga nakolektang istatistika ng pagpapatakbo ng application. Hindi para sa paggamit ng normal na apps."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrolin ang system backup at pagbawi"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Pinapayagan ang may-hawak na sumailalim sa nangungunang interface ng pamamaraan ng pag-input. Hindi kailanman dapat na kailanganin para sa normal na apps."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"sumailalim sa isang serbisyo sa accessibility"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Binibigyang-daan ang may-ari na sumailalim sa nasa nangungunang antas na interface ng isang serbisyo sa accessibility. Hindi dapat kailanman kailanganin para sa normal na apps."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"humiling ng explore by touch"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Binibigyang-daan ang may-ari na humiling ng mode ng pakikipag-ugnayan kung saan sinasabi nang malakas ang mga napindot na item at nagagalugad ang UI sa pamamagitan ng mga galaw."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"humiling ng pinahusay na accessibility sa web"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"sumailalim sa serbisyo ng teksto"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Pinapayagan ang may-hawak na sumailalim sa nangungunang antas na interface (hal. SpellCheckerService). Hindi kailanman dapat na kailanganin para sa normal na apps."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"sumailalim sa isang serbisyo ng VPN"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 7308264..fd969da 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Depolama"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB belleğe erişin."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD karta erişin."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Erişilebilirlik özellikleri"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Engelli kullanıcılara yardımcı olan teknolojinin istekte bulunabileceği özellikler"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"durum çubuğunu devre dışı bırak veya değiştir"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Uygulamaya, durum çubuğunu devre dışı bırakma ve sistem simgelerini ekleyip kaldırma izni verir."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"durum çubuğu"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Eylem yöneticisini kapalı duruma getirir. Tam kapatma işlemi gerçekleştirmez."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"uygulama değişimlerini engelle"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Kullanıcının başka bir uygulamaya geçiş yapmasını engeller."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"geçerli uygulama bilgilerini al"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"İzin sahibine, ekranın ön planındaki geçerli uygulama hakkında gizli bilgileri alma olanağı verir."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"tüm uygulama başlatma işlemlerini izle ve denetle"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Uygulamaya, sistemin etkinlikleri nasıl başlattığını izleme ve denetleme izni verir. Kötü amaçlı uygulamalar sistemi tamamen tehlikeye atabilir. Bu izin normal kullanım için değildir, sadece geliştirme süreçlerinde kullanılır."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"paket ile kaldırılan yayını gönder"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Uygulamaya, mevcut pil kullanım verilerini alt düzeyde okuma izni verir. Uygulamanın hangi uygulamaları kullandığınızla ilgili ayrıntılı bilgi edinmesine olanak sağlayabilir."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"pil istatistiklerini değiştir"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Uygulamaya, toplanan pil kullanım istatistiklerini değiştirme izni verir. Normal uygulamaların kullanımına yönelik değildir."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"uygulama çalışma istatistiklerini al"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Uygulamaya, uygulama çalışma istatistiklerini alma izni verir. Normal uygulamaların kullanımına yönelik değildir."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"uygulama çalışma istatistiklerini değiştir"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Uygulamaya, uygulama çalışma istatistiklerini değiştirme izni verir. Normal uygulamaların kullanımına yönelik değildir."</string>
     <string name="permlab_backup" msgid="470013022865453920">"sistem yedeğini kontrol et ve geri yükle"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Cihazın sahibine, bir giriş yönteminin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"erişilebilirlik hizmetine bağlan"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"İzin sahibine bir erişilebilirlik hizmetinin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"dokunarak keşfetme isteğinde bulun"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"İzin sahibine, dokunulan öğelerin sesli okunduğu ve kullanıcı arayüzünün hareketlerle keşfedilebildiği etkileşimli mod bir isteğinde bulunma olanağı sağlar."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"genişletilmiş Web erişilebilirliği isteğinde bulun"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"kısa mesaj hizmetine bağla"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Cihazın sahibine, bir metin hizmetinin (ör. SpellCheckerService) en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerekmez."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN hizmetine bağlan"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 17460f1..1f87c46 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Зберігання"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Отрим. доступу до носія USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ до карти SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Функції доступності"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Функції, на які може подавати запит допоміжна технологія."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"вимикати чи змін. рядок стану"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Дозволяє програмі вимикати рядок стану чи додавати та видаляти піктограми системи."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"рядок стану"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Переводить диспетчер дій у стан завершення роботи. Не виконує повне завершення роботи."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"запобіг. зміні програм"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Запобігати переходу користувача до іншої програми."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"отримати інформацію про поточну програму"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Дозволяє власникові отримувати приватну інформацію про поточну програму на передньому плані екрана."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"відстежувати та контролювати запуски всіх програм"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Дозволяє програмі відстежувати та контролювати, як саме система запускає дії. Шкідливі програми можуть отримати повний контроль над системою. Цей дозвіл потрібний лише для розробки, а не для звичайного користування."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"надсил. запис про видал. пакета"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Дозволяє програмі зчитувати дані про поточний низький рівень споживання заряду акумулятора. Програма може отримувати докладну інформацію про те, якими програмами ви користуєтеся."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"змінювати статистику акумулятора"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Дозволяє програмі змінювати зібрану статистику акумулятора. Не для використання звичайними програмами."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"отримувати статистику роботи програми"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Дозволяє програмі отримувати зібрану статистику роботи програми. Не використовується звичайними програмами."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"змінювати статистику роботи програми"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Дозволяє програмі змінювати зібрану статистику роботи програми. Не використовується звичайними програмами."</string>
     <string name="permlab_backup" msgid="470013022865453920">"контр. резерв. копіюв. і відн. сист."</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Дозволяє власнику прив’язуватися до інтерфейсу верхнього рівня методу введення. Ніколи не застосовується для звичайних програм."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"прив’язуватися до служби доступності"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня служби доступності. Ніколи не застосовується для звичайних програм."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"подавати запит на дослідження дотиком"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Дозволяє подавати запит на інтерактивний режим, у якому надаються голосові підказки для елементів, яких торкається користувач, а інтерфейсом можна користуватися за допомогою жестів."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"подавати запит на покращення веб-доступності"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"прив’язати до текстової служби"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня текстової служби (напр. SpellCheckerService). Ніколи не застосовується для звичайних програм."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"прив’язуватися до служби VPN"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 148f4a8..ecd6bf9 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Dung lượng"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Truy cập bộ nhớ USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Truy cập thẻ SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Tính năng hỗ trợ truy cập"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Tính năng mà công nghệ hỗ trợ có thể yêu cầu."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"vô hiệu hóa hoặc sửa đổi thanh trạng thái"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Cho phép ứng dụng vô hiệu hóa thanh trạng thái hoặc thêm và xóa biểu tượng hệ thống."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"thanh trạng thái"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Đặt trình quản lý hoạt động sang trạng thái tắt. Không thực hiện tắt hoàn toàn."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ngăn chuyển đổi ứng dụng"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Ngăn người dùng chuyển sang ứng dụng khác."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"truy cập thông tin ứng dụng hiện tại"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Cho phép chủ sở hữu truy xuất thông tin cá nhân về ứng dụng hiện tại ở nền trước của màn hình."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"giám sát và kiểm soát tất cả hoạt động khởi chạy ứng dụng"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Cho phép ứng dụng giám sát và kiểm soát cách hệ thống khởi chạy các hoạt động. Ứng dụng độc hại hoàn toàn có thể làm tổn hại hệ thống. Quyền này chỉ cần cho mục đích phát triển, không dành cho mục đích sử dụng thông thường."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"gửi truyền phát đã xóa của gói"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Cho phép ứng dụng đọc dữ liệu sử dụng pin mức thấp hiện tại. Có thể cho phép ứng dụng biết thông tin chi tiết về ứng dụng bạn sử dụng."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"sửa đổi số liệu thống kê về pin"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Cho phép ứng dụng sửa đổi các số liệu thống kê về pin đã được thu thập. Không dành cho các ứng dụng thông thường."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"truy xuất số liệu thống kê hoạt động của ứng dụng"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Cho phép ứng dụng truy xuất số liệu thống kê hoạt động của ứng dụng đã thu thập. Không dành cho ứng dụng thông thường."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"sửa đổi số liệu thống kê hoạt động của ứng dụng"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Cho phép ứng dụng sửa đổi số liệu thống kê hoạt động của ứng dụng đã thu thập. Không dành cho ứng dụng thông thường."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kiểm soát sao lưu và khôi phục hệ thống"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của phương thức nhập. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"liên kết với dịch vụ truy cập"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ truy cập. Không cần thiết cho các ứng dụng thông thường."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"yêu cầu khám phá bằng cách chạm"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Cho phép chủ sở hữu yêu cầu chế độ tương tác mà các mục đã chạm được đọc to và có thể khám phá giao diện  người dùng qua các thao tác."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"yêu cầu cải thiện hỗ trợ truy cập web"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"liên kết với dịch vụ văn bản"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ văn bản (ví dụ: SpellCheckerService). Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"liên kết với dịch vụ VPN"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index fa43c99..a253a4c 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"存储"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"访问 USB 存储设备。"</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"访问 SD 卡。"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"辅助功能"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"辅助技术可请求的功能。"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"停用或修改状态栏"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"允许应用停用状态栏或者增删系统图标。"</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"状态栏"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"使活动管理器进入关闭状态。不执行彻底关机。"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"禁止切换应用"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"阻止用户切换到其他应用。"</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"获取当前应用的信息"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"允许应用针对目前在屏幕前台运行的应用检索相关隐私信息。"</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"监控所有应用的启动"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"允许应用监视和控制系统是如何启动活动的。恶意应用可能会完全破坏系统。此权限只有在进行开发时才需要,正常使用情况下绝不需要。"</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"发送包删除的广播"</string>
@@ -315,10 +319,12 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"允许应用读取当前电量使用情况的基础数据,此权限可让应用了解关于您使用了哪些应用的详细信息。"</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"修改电池使用统计信息"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"允许该应用修改收集到的电池统计信息。普通应用不应使用此权限。"</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"检索应用操作统计信息"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"允许该应用检索收集到的应用操作统计信息。普通应用不应使用此权限。"</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"修改应用操作统计信息"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"允许该应用修改收集到的应用操作统计信息。普通应用不应使用此权限。"</string>
     <string name="permlab_backup" msgid="470013022865453920">"控制系统备份和还原"</string>
-    <string name="permdesc_backup" msgid="6912230525140589891">"允许应用控制系统的备份和还原机制。普通应用不能使用此权限。"</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"允许应用控制系统的备份和还原机制。普通应用不应使用此权限。"</string>
     <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"确认完整备份或恢复操作"</string>
     <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"允许应用启动完整备份确认用户界面。不用于任何应用。"</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"显示未授权的窗口"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"允许用户绑定至输入法的顶级接口。普通应用绝不需要此权限。"</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"绑定至辅助服务"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"允许应用绑定至辅助服务的顶级接口。普通应用绝不需要此权限。"</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"请求触摸浏览"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"允许应用请求启用互动模式,在该模式下,设备可大声读出用户触摸的内容项,而且用户可以通过手势浏览用户界面。"</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"请求增强网页辅助功能"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"绑定至文字服务"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"允许用户绑定至文字服务(如 SpellCheckerService)的顶级接口。普通应用绝不需要此权限。"</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"绑定到 VPN 服务"</string>
@@ -393,9 +404,9 @@
     <string name="permlab_writeSettings" msgid="2226195290955224730">"修改系统设置"</string>
     <string name="permdesc_writeSettings" msgid="7775723441558907181">"允许应用修改系统的设置数据。恶意应用可能会破坏您的系统配置。"</string>
     <string name="permlab_writeSecureSettings" msgid="204676251876718288">"修改安全系统设置"</string>
-    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"允许应用修改系统的安全设置数据。普通应用不能使用此权限。"</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"允许应用修改系统的安全设置数据。普通应用不应使用此权限。"</string>
     <string name="permlab_writeGservices" msgid="2149426664226152185">"修改 Google 服务地图"</string>
-    <string name="permdesc_writeGservices" msgid="1287309437638380229">"允许应用修改 Google 服务地图。普通应用不能使用此权限。"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"允许应用修改 Google 服务地图。普通应用不应使用此权限。"</string>
     <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"开机启动"</string>
     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"允许应用在系统完成引导后立即自动启动。这样可能会延长平板电脑的启动时间,并允许应用始终运行,从而导致平板电脑总体运行速度减慢。"</string>
     <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"允许应用在系统完成引导后立即自动启动。这样可能会延长手机的启动时间,并允许应用始终运行,从而导致手机总体运行速度减慢。"</string>
@@ -494,9 +505,9 @@
     <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"直接启动 CDMA 电话设置"</string>
     <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"允许应用启动 CDMA 配置。恶意应用可能会无端启动 CDMA 配置。"</string>
     <string name="permlab_locationUpdates" msgid="7785408253364335740">"控制位置更新通知"</string>
-    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"允许应用启用/停用来自无线装置的位置更新通知。普通应用不能使用此权限。"</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"允许应用启用/停用来自无线装置的位置更新通知。普通应用不应使用此权限。"</string>
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"访问检入属性"</string>
-    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"允许应用对登记服务上传的属性拥有读取/写入权限。普通应用不能使用此权限。"</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"允许应用对登记服务上传的属性拥有读取/写入权限。普通应用不应使用此权限。"</string>
     <string name="permlab_bindGadget" msgid="776905339015863471">"选择小部件"</string>
     <string name="permdesc_bindGadget" msgid="8261326938599049290">"允许应用告知系统哪些小部件可供哪个应用使用。拥有此权限的应用可向其他应用授予对个人资料的访问权限。普通应用不应使用此权限。"</string>
     <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"修改手机状态"</string>
@@ -1222,9 +1233,9 @@
     <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD 卡已移除。请插入新的 SD 卡。"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"未找到匹配的活动。"</string>
     <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"更新组件使用情况统计"</string>
-    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"允许应用修改收集到的组件使用情况统计信息。普通应用不能使用此权限。"</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"允许应用修改收集到的组件使用情况统计信息。普通应用不应使用此权限。"</string>
     <string name="permlab_copyProtectedData" msgid="4341036311211406692">"复制内容"</string>
-    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"允许应用调用默认的容器服务,以便复制内容。普通应用不能使用此权限。"</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"允许应用调用默认的容器服务,以便复制内容。普通应用不应使用此权限。"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"更改媒体输出线路"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"允许该应用将媒体输出线路更改到其他外部设备。"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"触摸两次可进行缩放控制"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 3bfed3c..daaa5bd 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"儲存"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"存取 USB 儲存裝置。"</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"存取 SD 卡。"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"協助工具功能"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"輔助技術可要求的功能。"</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"停用或變更狀態列"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"允許應用程式停用狀態列,並可新增或移除系統圖示。"</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"狀態列"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"讓活動管理員進入關機狀態,而不執行完整的關機程序。"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"防止切換應用程式"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"防止使用者切換到其他應用程式。"</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"取得目前的應用程式資訊"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"允許應用程式針對目前在螢幕前景運作的應用程式擷取私人資訊。"</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"監視及控制所有應用程式的啟動程序"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"允許應用程式監視和控制系統啟動活動的方式。請注意,惡意應用程式可能利用此功能破壞整個系統。這個權限只有開發人員才需要,一般使用者不需使用這個權限。"</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"傳送程式已移除廣播"</string>
@@ -315,8 +319,10 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"允許應用程式讀取目前的低電量使用資料。應用程式可能藉此找到一些詳細資訊,例如您所使用的應用程式為何。"</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"修改電池使用統計資料"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"允許應用程式修改收集到的電池使用統計資料 (不建議一般應用程式使用)。"</string>
-    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"修改應用程式作業統計資料"</string>
-    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"允許應用程式修改收集到的應用程式作業統計資料 (不建議一般應用程式使用)。"</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"擷取應用程式作業統計資料"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"允許應用程式擷取收集到的應用程式作業統計資料 (不建議一般應用程式使用)。"</string>
+    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"修改應用程式操作統計資料"</string>
+    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"允許應用程式修改收集到的應用程式操作統計資料 (不建議一般應用程式使用)。"</string>
     <string name="permlab_backup" msgid="470013022865453920">"控制系統備份與還原"</string>
     <string name="permdesc_backup" msgid="6912230525140589891">"允許應用程式控制系統備份與還原機制 (不建議一般應用程式使用)。"</string>
     <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"確認完整備份或還原作業"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"允許應用程式繫結至輸入法的頂層介面 (一般應用程式不需使用)。"</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"繫結至協助工具服務"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"允許應用程式繫結至協助工具服務的頂層介面 (一般應用程式不需使用)。"</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"要求輕觸探索"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"允許應用程式要求啟用互動模式,讓裝置讀出使用者輕觸的項目,並且讓使用者透過手勢探索使用者介面。"</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"要求增強式網頁協助工具"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"繫結至文字服務"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"允許應用程式繫結至文字服務 (例如 SpellCheckerService) 的頂層介面 (一般應用程式不需使用)。"</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"繫結至 VPN 服務"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 54be6ea..9872ecf 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -225,6 +225,8 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Isitoreji"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Finyelela kwisitoreji se-USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Finyelela ikhadi le-SD."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Izici zokufinyelela"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Izici ezingacelwa ubuchwepheshe bokusiza."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"khubaza noma guqula ibha yomumo"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Ivumela insiza ukuthi yenze umudwa ochaza ngesimo ukuthi ungasebenzi noma ukufaka noma ukukhipha izithonjana zohlelo."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"umudwa ochaza ngesimo"</string>
@@ -299,6 +301,8 @@
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Ibeka imeneja yomsebenzi kwisimo sokuvala shaqa. Ayenzi ukuvala shaqa okuphelele."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"gwema ukushintsha kohlelo lokusebenza"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Igwema umsebenzisi ukuthi ashintshele kolunye uhlelo lokusebenza."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"thola ulwazi lohlelo lokusebenza lwamanje"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Ivumela umphathi ukuthi athole ulwazi oluyimfihlo mayelana nohlelo lokusebenza lwamanje ngaphambili kwesikrini."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"qapha futhi ulawule ukuqaliswa kwazo zonke izinsiza"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Ivumela insiza ukuthi ihlole futhi ilawule ukuthi isistimu iziqalisa kanjani izehlakalo. Izinzisa ezinobungozi zingensa isistimu ibe sebungozini. Lemvume idingakalela intuthuku kuphela hhay ukusetshenziswa okwejwayelekile."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"thumela iphakheji yomsakazo okhishiwe"</string>
@@ -315,6 +319,8 @@
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"Ivumela uhlelo lokusebenza ukufunda idatha yokusebenza yebhethri leleveli ephansi yamanje. Ingavumela uhlelo lokusebenza ukuthola ulwazi lemininingwane mayelana nokuthi iziphi izinhlelo zokusebenza ozisebenzisayo."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"guqula izibalo zebhetri"</string>
     <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Ivumela uhlelo lokusebenza ukuthi luguqule izibalo zebhethri eziqoqiwe. Akwenzelwe ukuthi kusetshenziswe izinhlelo zokusebenza ezijwayelekile."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"thola izibalo zokusebenza kohlelo lokusebenza"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Ivumela uhlelo lokusebenza ukuthi lithole izibalo zokusebenza kohlelo lokusebenza. Akumele kusetshenziswe izinhlelo zokusebenza ezijwayelekile."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"shintsha izinombolo zokusebenza zohlelo lokusebenza"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Ivumela uhlelo lokusebenza ukuthi lishintshe izinombolo zokusebenza kohlelo lokusebenza lokuqoqiwe. Akufanele kusetshenziswe izinhlelo zokusebenza ezijwayelekile."</string>
     <string name="permlab_backup" msgid="470013022865453920">"lawula ukusekela ngokulondoloza uhlelo bese ubuyisela esimweni"</string>
@@ -340,6 +346,11 @@
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Ivumela isimeli ukuhlanganisa uxhumano nomsebenzisi wezinga eliphezulu lendlela yokufaka. Ayisoze yadingeka kwizinhlelo ezivamile."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"hlanganisa kusevisi yokufinyeleleka"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Ivumela isibambi ukuhlanganisa uxhumo nomsebenzisi kwezinga eliphezulu lesevisi yesinqunjwana. Akusoze kwadingekela izinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_canRequestTouchExplorationMode" msgid="6094034289937541846">"cela ukuhlola ngokuthinta"</string>
+    <string name="permdesc_canRequestTouchExplorationMode" msgid="940314268922270663">"Ivumela i-hoder ukuthi icele imodi yokusebenzisana lapho izinto ezithintiwe zikhulunywa ngokumemezwa ne-UI ingahlolwa ngezimpawu."</string>
+    <string name="permlab_canRequestEnahncedWebAccessibility" msgid="1905232971331801453">"cela ukufinyelela kuwebhu okuthuthukisiwe"</string>
+    <!-- no translation found for permdesc_canRequestEnahncedWebAccessibility (4500520989321729676) -->
+    <skip />
     <string name="permlab_bindTextService" msgid="7358378401915287938">"bophezela kunsizakalo yombhalo"</string>
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lwesixhumi esibonakalayo sensizakalo yombhalo(isb. InsizakaloYokuhlolaUkubhala). Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"hlanganisa kwinsizakalo ye-VPN"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index dc921e6..0fb8a10 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1542,6 +1542,8 @@
         <enum name="KEYCODE_RO" value="217" />
         <enum name="KEYCODE_KANA" value="218" />
         <enum name="KEYCODE_ASSIST" value="219" />
+        <enum name="KEYCODE_BRIGHTNESS_DOWN" value="220" />
+        <enum name="KEYCODE_BRIGHTNESS_UP" value="221" />
     </attr>
 
     <!-- ***************************************************************** -->
@@ -2510,6 +2512,8 @@
             <flag name="flagIncludeNotImportantViews" value="0x00000002" />
             <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE} -->
             <flag name="flagRequestTouchExplorationMode" value="0x00000004" />
+            <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY} -->
+            <flag name="flagRequestEnhancedWebAccessibility" value="0x00000008" />
         </attr>
         <!-- Component name of an activity that allows the user to modify
              the settings for this service. This setting cannot be changed at runtime. -->
@@ -2960,6 +2964,9 @@
         <!-- Timeout between frames of animation in milliseconds
              {@deprecated Not used by the framework.} -->
         <attr name="animationResolution" format="integer" />
+        <!-- Defines if the associated drawables need to be mirrored when in RTL mode.
+             Default is false -->
+        <attr name="mirrorForRtl" format="boolean" />
     </declare-styleable>
 
     <declare-styleable name="SeekBar">
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 7ef501f..ccdddd8 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -277,8 +277,6 @@
     <!-- Boolean indicating whether the wifi chipset has dual frequency band support -->
     <bool translatable="false" name="config_wifi_dual_band_support">false</bool>
 
-    <!-- Boolean indicating whether the wifi chipset has p2p support -->
-    <bool translatable="false" name="config_wifi_p2p_support">false</bool>
     <!-- Device type information conforming to Annex B format in WiFi Direct specification.
          The default represents a dual-mode smartphone -->
     <string translatable="false" name="config_wifi_p2p_device_type">10-0050F204-5</string>
@@ -537,12 +535,11 @@
 
     <!-- Control the behavior when the user long presses the home button.
             0 - Nothing
-            1 - Recent apps dialog
-            2 - Recent apps view in SystemUI
+            1 - Recent apps view in SystemUI
          This needs to match the constants in
          policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
     -->
-    <integer name="config_longPressOnHomeBehavior">2</integer>
+    <integer name="config_longPressOnHomeBehavior">1</integer>
 
     <!-- Array of light sensor LUX values to define our levels for auto backlight brightness support.
          The N entries of this array define N + 1 control points as follows:
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 49b536d..0d80082 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2034,5 +2034,6 @@
   <eat-comment />
 
   <public type="attr" name="mipMap" id="0x010103cd" />
+  <public type="attr" name="mirrorForRtl" id="0x010103ce" />
 
 </resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index fa26089..22f4e2e 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -535,6 +535,11 @@
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgroupdesc_storage" product="default">Access the SD card.</string>
 
+    <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permgrouplab_accessibilityFeatures">Accessibility features</string>
+    <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permgroupdesc_accessibilityFeatures">Features that assistive technology can request.</string>
+
     <!--  Permissions -->
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -596,12 +601,12 @@
      This may result in unexpected charges. Malicious apps may cost you money by
      sending messages without your confirmation.</string>
 
-     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permlab_sendSmsNoConfirmation">send SMS messages with no confirmation</string>
-    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permdesc_sendSmsNoConfirmation">Allows the app to send SMS
-      messages. This may result in unexpected charges. Malicious apps may cost
-      you money by sending messages without your confirmation.</string>
+     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=NONE] -->
+    <string name="permlab_sendRespondViaMessageRequest">send respond-via-message events</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=NONE] -->
+    <string name="permdesc_sendRespondViaMessageRequest">Allows the app to send
+      requests to other messaging apps to handle respond-via-message events for incoming
+      calls.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_readSms">read your text messages (SMS or MMS)</string>
@@ -784,6 +789,12 @@
         another app.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_getTopActivityInfo">get current app info</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_getTopActivityInfo">Allows the holder to retrieve private information
+        about the current application in the foreground of the screen.</string>
+    
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_runSetActivityWatcher">monitor and control all app launching</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_runSetActivityWatcher">Allows the app to
@@ -929,6 +940,20 @@
         interface of an accessibility service. Should never be needed for normal apps.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_canRequestTouchExplorationMode">request explore by touch</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_canRequestTouchExplorationMode">Allows the hoder to request an
+        interaction mode in which touched items are spoken aloud and the UI can be explored
+        via gestures.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_canRequestEnahncedWebAccessibility">request enhanced web accessibility</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_canRequestEnahncedWebAccessibility">Allows the hoder to request
+        enabling of web accessibility enhancements. For example, installing scripts to make
+        app content more accessible.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_bindTextService">bind to a text service</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_bindTextService">Allows the holder to bind to the top-level
@@ -2697,16 +2722,16 @@
          service to put the device into explore by touch mode, displayed as a dialog message when
          the user selects to enables the service. (tablet). [CHAR LIMIT=NONE] -->
     <string name="enable_explore_by_touch_warning_message" product="tablet">
-            <xliff:g id="accessibility_service_name">%1$s</xliff:g> wants to enable Explore by Touch.
-            When Explore by Touch is turned on, you can hear or see descriptions of what\'s under
-            your finger or perform gestures to interact with the tablet.</string>
+        <xliff:g id="accessibility_service_name">%1$s</xliff:g> wants to enable Explore by Touch.
+        When Explore by Touch is turned on, you can hear or see descriptions of what\'s under
+        your finger or perform gestures to interact with the tablet.</string>
     <!-- Summary for a warning message about the interaction model changes after allowing an accessibility
          service to put the device into explore by touch mode, displayed as a dialog message when
          the user selects to enables the service. (default). [CHAR LIMIT=NONE] -->
     <string name="enable_explore_by_touch_warning_message" product="default">
-            <xliff:g id="accessibility_service_name">%1$s</xliff:g> wants to enable Explore by Touch.
-            When Explore by Touch is turned on, you can hear or see descriptions of what\'s under
-            your finger or perform gestures to interact with the phone.</string>
+        <xliff:g id="accessibility_service_name">%1$s</xliff:g> wants to enable Explore by Touch.
+       When Explore by Touch is turned on, you can hear or see descriptions of what\'s under
+       your finger or perform gestures to interact with the phone.</string>
 
     <!-- String used to display the date. This is the string to say something happened 1 month ago. -->
     <string name="oneMonthDurationPast">1 month ago</string>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index f489786..56c2235 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -370,6 +370,7 @@
         <item name="android:maxWidth">48dip</item>
         <item name="android:minHeight">48dip</item>
         <item name="android:maxHeight">48dip</item>
+        <item name="android:mirrorForRtl">false</item>
     </style>
 
     <style name="Widget.ProgressBar.Large">
@@ -410,6 +411,7 @@
         <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
         <item name="android:minHeight">20dip</item>
         <item name="android:maxHeight">20dip</item>
+        <item name="android:mirrorForRtl">true</item>
     </style>
 
     <style name="Widget.SeekBar">
@@ -421,6 +423,7 @@
         <item name="android:thumb">@android:drawable/seek_thumb</item>
         <item name="android:thumbOffset">8dip</item>
         <item name="android:focusable">true</item>
+        <item name="android:mirrorForRtl">true</item>
     </style>
 
     <style name="Widget.RatingBar">
@@ -430,6 +433,7 @@
         <item name="android:minHeight">57dip</item>
         <item name="android:maxHeight">57dip</item>
         <item name="android:thumb">@null</item>
+        <item name="android:mirrorForRtl">true</item>
     </style>
 
     <style name="Widget.RatingBar.Indicator">
@@ -1745,6 +1749,7 @@
         <item name="android:focusable">true</item>
         <item name="android:paddingStart">16dip</item>
         <item name="android:paddingEnd">16dip</item>
+        <item name="android:mirrorForRtl">true</item>
     </style>
 
     <style name="Widget.Holo.RatingBar" parent="Widget.RatingBar">
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 6db89d9..412d4b9 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1113,6 +1113,7 @@
   <java-symbol type="layout" name="keyguard_multi_user_selector_widget" />
   <java-symbol type="layout" name="sms_short_code_confirmation_dialog" />
   <java-symbol type="layout" name="keyguard_add_widget" />
+  <java-symbol type="layout" name="action_bar_up_container" />
 
   <java-symbol type="anim" name="slide_in_child_bottom" />
   <java-symbol type="anim" name="slide_in_right" />
@@ -1337,7 +1338,6 @@
   <java-symbol type="id" name="sliding_layout" />
   <java-symbol type="id" name="keyguard_add_widget" />
   <java-symbol type="id" name="keyguard_add_widget_view" />
-  <java-symbol type="id" name="sliding_layout" />
   <java-symbol type="id" name="multi_pane_challenge" />
   <java-symbol type="id" name="keyguard_user_selector" />
   <java-symbol type="id" name="key_enter" />
diff --git a/core/tests/ConnectivityManagerTest/AndroidManifest.xml b/core/tests/ConnectivityManagerTest/AndroidManifest.xml
index 5db7ffc..2c34d47 100644
--- a/core/tests/ConnectivityManagerTest/AndroidManifest.xml
+++ b/core/tests/ConnectivityManagerTest/AndroidManifest.xml
@@ -17,7 +17,7 @@
 <!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.android.connectivitymanagertest"
-  android:sharedUserId="com.android.uid.test">
+  android:sharedUserId="android.uid.system">
 
     <!-- We add an application tag here just so that we can indicate that
          this package needs to link against the android.test library,
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
index 245f537..463e999 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestActivity.java
@@ -60,13 +60,14 @@
 
     public static final String LOG_TAG = "ConnectivityManagerTestActivity";
     public static final int WAIT_FOR_SCAN_RESULT = 10 * 1000; //10 seconds
-    public static final int WIFI_SCAN_TIMEOUT = 50 * 1000;
-    public static final int SHORT_TIMEOUT = 5 * 1000;
-    public static final long LONG_TIMEOUT = 50 * 1000;
+    public static final int WIFI_SCAN_TIMEOUT = 50 * 1000; // 50 seconds
+    public static final int SHORT_TIMEOUT = 5 * 1000; // 5 seconds
+    public static final long LONG_TIMEOUT = 50 * 1000;  // 50 seconds
+    public static final long WIFI_CONNECTION_TIMEOUT = 5 * 60 * 1000; // 5 minutes
     // 2 minutes timer between wifi stop and start
-    public static final long  WIFI_STOP_START_INTERVAL = 2 * 60 * 1000;
+    public static final long  WIFI_STOP_START_INTERVAL = 2 * 60 * 1000; // 2 minutes
     // Set ping test timer to be 3 minutes
-    public static final long PING_TIMER = 3 * 60 *1000;
+    public static final long PING_TIMER = 3 * 60 *1000; // 3 minutes
     public static final int SUCCESS = 0;  // for Wifi tethering state change
     public static final int FAILURE = 1;
     public static final int INIT = -1;
@@ -573,7 +574,7 @@
         String ssid = config.SSID;
         config.SSID = convertToQuotedString(ssid);
 
-        //If Wifi is not enabled, enable it
+        // If Wifi is not enabled, enable it
         if (!mWifiManager.isWifiEnabled()) {
             log("Wifi is not enabled, enable it");
             mWifiManager.setWifiEnabled(true);
@@ -584,59 +585,16 @@
             }
         }
 
-        boolean foundApInScanResults = false;
-        for (int retry = 0; retry < 5; retry++) {
-            List<ScanResult> netList = mWifiManager.getScanResults();
-            if (netList != null) {
-                log("size of scan result list: " + netList.size());
-                for (int i = 0; i < netList.size(); i++) {
-                    ScanResult sr= netList.get(i);
-                    if (sr.SSID.equals(ssid)) {
-                        log("found " + ssid + " in the scan result list");
-                        log("retry: " + retry);
-                        foundApInScanResults = true;
-                        mWifiManager.connect(config,
-                                new WifiManager.ActionListener() {
-                                    public void onSuccess() {
-                                    }
-                                    public void onFailure(int reason) {
-                                        log("connect failure " + reason);
-                                    }
-                                });
-                        break;
-                   }
+        // Save network configuration and connect to network without scanning
+        mWifiManager.connect(config,
+            new WifiManager.ActionListener() {
+                public void onSuccess() {
                 }
-            }
-            if (foundApInScanResults) {
-                return true;
-            } else {
-                // Start an active scan
-                mWifiManager.startScanActive();
-                mScanResultIsAvailable = false;
-                long startTime = System.currentTimeMillis();
-                while (!mScanResultIsAvailable) {
-                    if ((System.currentTimeMillis() - startTime) > WIFI_SCAN_TIMEOUT) {
-                        log("wait for scan results timeout");
-                        return false;
-                    }
-                    // wait for the scan results to be available
-                    synchronized (this) {
-                        // wait for the scan result to be available
-                        try {
-                            this.wait(WAIT_FOR_SCAN_RESULT);
-                        } catch (InterruptedException e) {
-                            e.printStackTrace();
-                        }
-                        if ((mWifiManager.getScanResults() == null) ||
-                                (mWifiManager.getScanResults().size() <= 0)) {
-                            continue;
-                        }
-                        mScanResultIsAvailable = true;
-                    }
+                public void onFailure(int reason) {
+                    log("connect failure " + reason);
                 }
-            }
-        }
-        return false;
+            });
+        return true;
     }
 
     /*
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/ConnectivityManagerMobileTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/ConnectivityManagerMobileTest.java
index 7928822..3111489 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/ConnectivityManagerMobileTest.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/ConnectivityManagerMobileTest.java
@@ -126,7 +126,7 @@
         cmActivity.disableWifi();
 
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI,
-                State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                State.DISCONNECTED,  ConnectivityManagerTestActivity.LONG_TIMEOUT));
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
                 State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
         // Wait for 10 seconds for broadcasts to be sent out
@@ -184,7 +184,7 @@
                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
         log("wifi state is enabled");
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
         if (!mWifiOnlyFlag) {
             assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
                     State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
@@ -217,7 +217,7 @@
         assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
 
         sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
         // Disable Wifi
@@ -257,7 +257,7 @@
 
         // Wait for Wifi to be connected and mobile to be disconnected
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
         if (!mWifiOnlyFlag) {
             assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
                     State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
@@ -279,10 +279,10 @@
 
         // connect to Wifi
         assertTrue("failed to connect to " + mTestAccessPoint,
-                   cmActivity.connectToWifi(mTestAccessPoint));
+                cmActivity.connectToWifi(mTestAccessPoint));
 
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-            ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
 
         // Wait for a few seconds to avoid the state that both Mobile and Wifi is connected
         sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
@@ -418,9 +418,9 @@
 
         // Connect to Wifi
         assertTrue("failed to connect to " + mTestAccessPoint,
-                   cmActivity.connectToWifi(mTestAccessPoint));
+                cmActivity.connectToWifi(mTestAccessPoint));
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                            ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
 
         // validate state and broadcast
         if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_WIFI)) {
@@ -454,7 +454,7 @@
                 cmActivity.connectToWifi(mTestAccessPoint));
 
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
 
         try {
             Thread.sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT);
@@ -484,7 +484,7 @@
         cmActivity.setAirplaneMode(getInstrumentation().getContext(), false);
 
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                            ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
         if (!mWifiOnlyFlag) {
             assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE,
                     State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT));
@@ -505,11 +505,11 @@
         assertNotNull("SSID is null", mTestAccessPoint);
         //Connect to mTestAccessPoint
         assertTrue("failed to connect to " + mTestAccessPoint,
-                   cmActivity.connectToWifi(mTestAccessPoint));
+                cmActivity.connectToWifi(mTestAccessPoint));
         assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
                 ConnectivityManagerTestActivity.LONG_TIMEOUT));
         assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                            ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
         assertNotNull("Not associated with any AP",
                       cmActivity.mWifiManager.getConnectionInfo().getBSSID());
 
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java
index 81075ef..de0298e 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java
@@ -118,7 +118,7 @@
 
         // step 2: verify Wifi state and network state;
         assertTrue(mAct.waitForNetworkState(ConnectivityManager.TYPE_WIFI,
-                State.CONNECTED, 6 * ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                State.CONNECTED, ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
 
         // step 3: verify the current connected network is the given SSID
         assertNotNull("Wifi connection returns null", mAct.mWifiManager.getConnectionInfo());
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
index 7bfb594..53876a5 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
@@ -248,7 +248,7 @@
         assertTrue(mAct.waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
                 ConnectivityManagerTestActivity.SHORT_TIMEOUT));
         assertTrue(mAct.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
         // Run ping test to verify the data connection
         assertTrue("Wi-Fi is connected, but no data connection.", mAct.pingTest(null));
 
@@ -302,7 +302,7 @@
                     ConnectivityManagerTestActivity.SHORT_TIMEOUT));
             assertTrue("Wait for Wi-Fi connection timeout after wake up",
                     mAct.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
-                    6 * ConnectivityManagerTestActivity.LONG_TIMEOUT));
+                    ConnectivityManagerTestActivity.WIFI_CONNECTION_TIMEOUT));
             long connectionTime = System.currentTimeMillis() - startTime;
             sum += connectionTime;
             log("average reconnection time is: " + sum/(i+1));
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index 41f8536..f8b26bc 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -1241,13 +1241,6 @@
             </intent-filter>
         </activity>
 
-        <activity android:name="android.accessibilityservice.InterrogationActivity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
-            </intent-filter>
-        </activity>
-
         <activity android:name="android.animation.BasicAnimatorActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/core/tests/coretests/src/android/accessibilityservice/InterrogationActivity.java b/core/tests/coretests/src/android/accessibilityservice/InterrogationActivity.java
deleted file mode 100644
index a9f144b..0000000
--- a/core/tests/coretests/src/android/accessibilityservice/InterrogationActivity.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Copyright (C) 2011 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.accessibilityservice;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-
-import com.android.frameworks.coretests.R;
-
-/**
- * Activity for testing the accessibility APIs for "interrogation" of
- * the screen content. These APIs allow exploring the screen and
- * requesting an action to be performed on a given view from an
- * AccessiiblityService.
- */
-public class InterrogationActivity extends Activity {
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.interrogation_activity);
-
-        findViewById(R.id.button5).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                /* do nothing */
-            }
-        });
-        findViewById(R.id.button5).setOnLongClickListener(new View.OnLongClickListener() {
-            public boolean onLongClick(View v) {
-                return true;
-            }
-        });
-    }
-}
diff --git a/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java b/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java
deleted file mode 100644
index 3dc140b..0000000
--- a/core/tests/coretests/src/android/accessibilityservice/InterrogationActivityTest.java
+++ /dev/null
@@ -1,472 +0,0 @@
-/**
- * Copyright (C) 2011 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.accessibilityservice;
-
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_FOCUS;
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLEAR_FOCUS;
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_SELECT;
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLEAR_SELECTION;
-
-import android.graphics.Rect;
-import android.os.SystemClock;
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.util.Log;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityNodeInfo;
-
-import com.android.frameworks.coretests.R;
-import com.android.internal.util.Predicate;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-
-/**
- * Activity for testing the accessibility APIs for "interrogation" of
- * the screen content. These APIs allow exploring the screen and
- * requesting an action to be performed on a given view from an
- * AccessiiblityService.
- */
-public class InterrogationActivityTest
-        extends ActivityInstrumentationTestCase2<InterrogationActivity> {
-    private static final boolean DEBUG = false;
-
-    private static String LOG_TAG = "InterrogationActivityTest";
-
-    // Timeout for the accessibility state of an Activity to be fully initialized.
-    private static final int TIMEOUT_PROPAGATE_ACCESSIBILITY_EVENT_MILLIS = 5000;
-
-    // Timeout for which non getting accessibility events considers the app idle.
-    private static final long IDLE_EVENT_TIME_DELTA_MILLIS = 200;
-
-    // Timeout in which to wait for idle device.
-    private static final long GLOBAL_IDLE_DETECTION_TIMEOUT_MILLIS = 1000;
-
-    // Handle to a connection to the AccessibilityManagerService
-    private UiTestAutomationBridge mUiTestAutomationBridge;
-
-    public InterrogationActivityTest() {
-        super(InterrogationActivity.class);
-    }
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        mUiTestAutomationBridge = new UiTestAutomationBridge();
-        mUiTestAutomationBridge.connect();
-        mUiTestAutomationBridge.waitForIdle(IDLE_EVENT_TIME_DELTA_MILLIS,
-                GLOBAL_IDLE_DETECTION_TIMEOUT_MILLIS);
-        mUiTestAutomationBridge.executeCommandAndWaitForAccessibilityEvent(new Runnable() {
-                // wait for the first accessibility event
-                @Override
-                public void run() {
-                    // bring up the activity
-                    getActivity();
-                }
-            },
-            new Predicate<AccessibilityEvent>() {
-                @Override
-                public boolean apply(AccessibilityEvent event) {
-                    return (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
-                            && event.getPackageName().equals(getActivity().getPackageName()));
-                }
-            },
-            TIMEOUT_PROPAGATE_ACCESSIBILITY_EVENT_MILLIS);
-    }
-
-    @Override
-    public void tearDown() throws Exception {
-        mUiTestAutomationBridge.disconnect();
-        super.tearDown();
-    }
-
-    @LargeTest
-    public void testFindAccessibilityNodeInfoByViewId() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            AccessibilityNodeInfo button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertNotNull(button);
-            assertEquals(0, button.getChildCount());
-
-            // bounds
-            Rect bounds = new Rect();
-            button.getBoundsInParent(bounds);
-            assertEquals(0, bounds.left);
-            assertEquals(0, bounds.top);
-            assertEquals(160, bounds.right);
-            assertEquals(100, bounds.bottom);
-
-            // char sequence attributes
-            assertEquals("com.android.frameworks.coretests", button.getPackageName());
-            assertEquals("android.widget.Button", button.getClassName());
-            assertEquals("Button5", button.getText());
-            assertNull(button.getContentDescription());
-
-            // boolean attributes
-            assertTrue(button.isFocusable());
-            assertTrue(button.isClickable());
-            assertTrue(button.isEnabled());
-            assertFalse(button.isFocused());
-            assertTrue(button.isClickable());
-            assertFalse(button.isPassword());
-            assertFalse(button.isSelected());
-            assertFalse(button.isCheckable());
-            assertFalse(button.isChecked());
-
-            // actions
-            assertEquals(ACTION_FOCUS | ACTION_SELECT | ACTION_CLEAR_SELECTION,
-                button.getActions());
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testFindAccessibilityNodeInfoByViewId: "
-                        + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testFindAccessibilityNodeInfoByViewText() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // find a view by text
-            List<AccessibilityNodeInfo> buttons = mUiTestAutomationBridge
-                .findAccessibilityNodeInfosByTextInActiveWindow("butto");
-            assertEquals(9, buttons.size());
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testFindAccessibilityNodeInfoByViewText: "
-                        + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testFindAccessibilityNodeInfoByViewTextContentDescription() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // find a view by text
-            List<AccessibilityNodeInfo> buttons = mUiTestAutomationBridge
-                .findAccessibilityNodeInfosByTextInActiveWindow("contentDescription");
-            assertEquals(1, buttons.size());
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testFindAccessibilityNodeInfoByViewTextContentDescription: "
-                        + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testTraverseAllViews() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // make list of expected nodes
-            List<String> classNameAndTextList = new ArrayList<String>();
-            classNameAndTextList.add("android.widget.LinearLayout");
-            classNameAndTextList.add("android.widget.LinearLayout");
-            classNameAndTextList.add("android.widget.LinearLayout");
-            classNameAndTextList.add("android.widget.LinearLayout");
-            classNameAndTextList.add("android.widget.ButtonButton1");
-            classNameAndTextList.add("android.widget.ButtonButton2");
-            classNameAndTextList.add("android.widget.ButtonButton3");
-            classNameAndTextList.add("android.widget.ButtonButton4");
-            classNameAndTextList.add("android.widget.ButtonButton5");
-            classNameAndTextList.add("android.widget.ButtonButton6");
-            classNameAndTextList.add("android.widget.ButtonButton7");
-            classNameAndTextList.add("android.widget.ButtonButton8");
-            classNameAndTextList.add("android.widget.ButtonButton9");
-
-            AccessibilityNodeInfo root = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.root);
-            assertNotNull("We must find the existing root.", root);
-
-            Queue<AccessibilityNodeInfo> fringe = new LinkedList<AccessibilityNodeInfo>();
-            fringe.add(root);
-
-            // do a BFS traversal and check nodes
-            while (!fringe.isEmpty()) {
-                AccessibilityNodeInfo current = fringe.poll();
-
-                CharSequence className = current.getClassName();
-                CharSequence text = current.getText();
-                String receivedClassNameAndText = className.toString()
-                   + ((text != null) ? text.toString() : "");
-                String expectedClassNameAndText = classNameAndTextList.remove(0);
-
-                assertEquals("Did not get the expected node info",
-                        expectedClassNameAndText, receivedClassNameAndText);
-
-                final int childCount = current.getChildCount();
-                for (int i = 0; i < childCount; i++) {
-                    AccessibilityNodeInfo child = current.getChild(i);
-                    fringe.add(child);
-                }
-            }
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testTraverseAllViews: " + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testPerformAccessibilityActionFocus() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // find a view and make sure it is not focused
-            AccessibilityNodeInfo button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertFalse(button.isFocused());
-
-            // focus the view
-            assertTrue(button.performAction(ACTION_FOCUS));
-
-            // find the view again and make sure it is focused
-            button = mUiTestAutomationBridge
-                    .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertTrue(button.isFocused());
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testPerformAccessibilityActionFocus: " + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testPerformAccessibilityActionClearFocus() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // find a view and make sure it is not focused
-            AccessibilityNodeInfo button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertFalse(button.isFocused());
-
-            // focus the view
-            assertTrue(button.performAction(ACTION_FOCUS));
-
-            // find the view again and make sure it is focused
-            button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertTrue(button.isFocused());
-
-            // unfocus the view
-            assertTrue(button.performAction(ACTION_CLEAR_FOCUS));
-
-            // find the view again and make sure it is not focused
-            button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertFalse(button.isFocused());
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testPerformAccessibilityActionClearFocus: "
-                        + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testPerformAccessibilityActionSelect() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // find a view and make sure it is not selected
-            AccessibilityNodeInfo button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertFalse(button.isSelected());
-
-            // select the view
-            assertTrue(button.performAction(ACTION_SELECT));
-
-            // find the view again and make sure it is selected
-            button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertTrue(button.isSelected());
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testPerformAccessibilityActionSelect: " + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testPerformAccessibilityActionClearSelection() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // find a view and make sure it is not selected
-            AccessibilityNodeInfo button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertFalse(button.isSelected());
-
-            // select the view
-            assertTrue(button.performAction(ACTION_SELECT));
-
-            // find the view again and make sure it is selected
-            button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertTrue(button.isSelected());
-
-            // unselect the view
-            assertTrue(button.performAction(ACTION_CLEAR_SELECTION));
-
-            // find the view again and make sure it is not selected
-            button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertFalse(button.isSelected());
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testPerformAccessibilityActionClearSelection: "
-                        + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testAccessibilityEventGetSource() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // find a view and make sure it is not focused
-            final AccessibilityNodeInfo button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertFalse(button.isFocused());
-
-            AccessibilityEvent event = mUiTestAutomationBridge
-                    .executeCommandAndWaitForAccessibilityEvent(new Runnable() {
-                @Override
-                public void run() {
-                    // focus the view
-                    assertTrue(button.performAction(ACTION_FOCUS));
-                }
-            },
-            new Predicate<AccessibilityEvent>() {
-                @Override
-                public boolean apply(AccessibilityEvent event) {
-                    return (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED
-                            && event.getPackageName().equals(getActivity().getPackageName())
-                            && event.getText().get(0).equals(button.getText()));
-                }
-            },
-            TIMEOUT_PROPAGATE_ACCESSIBILITY_EVENT_MILLIS);
-
-            // check the last event
-            assertNotNull(event);
-
-            // check that last event source
-            AccessibilityNodeInfo source = event.getSource();
-            assertNotNull(source);
-
-            // bounds
-            Rect buttonBounds = new Rect();
-            button.getBoundsInParent(buttonBounds);
-            Rect sourceBounds = new Rect();
-            source.getBoundsInParent(sourceBounds);
-
-            assertEquals(buttonBounds.left, sourceBounds.left);
-            assertEquals(buttonBounds.right, sourceBounds.right);
-            assertEquals(buttonBounds.top, sourceBounds.top);
-            assertEquals(buttonBounds.bottom, sourceBounds.bottom);
-
-            // char sequence attributes
-            assertEquals(button.getPackageName(), source.getPackageName());
-            assertEquals(button.getClassName(), source.getClassName());
-            assertEquals(button.getText(), source.getText());
-            assertSame(button.getContentDescription(), source.getContentDescription());
-
-            // boolean attributes
-            assertSame(button.isFocusable(), source.isFocusable());
-            assertSame(button.isClickable(), source.isClickable());
-            assertSame(button.isEnabled(), source.isEnabled());
-            assertNotSame(button.isFocused(), source.isFocused());
-            assertSame(button.isLongClickable(), source.isLongClickable());
-            assertSame(button.isPassword(), source.isPassword());
-            assertSame(button.isSelected(), source.isSelected());
-            assertSame(button.isCheckable(), source.isCheckable());
-            assertSame(button.isChecked(), source.isChecked());
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testAccessibilityEventGetSource: " + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testObjectContract() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // find a view and make sure it is not focused
-            AccessibilityNodeInfo button = mUiTestAutomationBridge
-                .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.button5);
-            assertNotNull(button);
-            AccessibilityNodeInfo parent = button.getParent();
-            final int childCount = parent.getChildCount();
-            for (int i = 0; i < childCount; i++) {
-                AccessibilityNodeInfo child = parent.getChild(i);
-                assertNotNull(child);
-                if (child.equals(button)) {
-                    assertEquals("Equal objects must have same hasCode.", button.hashCode(),
-                            child.hashCode());
-                    return;
-                }
-            }
-            fail("Parent's children do not have the info whose parent is the parent.");
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testObjectContract: " + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-
-    @LargeTest
-    public void testGetRootAccessibilityNodeInfoInActiveWindow() throws Exception {
-        final long startTimeMillis = SystemClock.uptimeMillis();
-        try {
-            // get the root via the designated API
-            AccessibilityNodeInfo fetched = mUiTestAutomationBridge
-                    .getRootAccessibilityNodeInfoInActiveWindow();
-            assertNotNull(fetched);
-
-            // get the root via traversal
-            AccessibilityNodeInfo expected = mUiTestAutomationBridge
-                    .findAccessibilityNodeInfoByViewIdInActiveWindow(R.id.root);
-            while (true) {
-                AccessibilityNodeInfo parent = expected.getParent();
-                if (parent == null) {
-                    break;
-                }
-                expected = parent;
-            }
-            assertNotNull(expected);
-
-            assertEquals("The node with id \"root\" should be the root.", expected, fetched);
-        } finally {
-            if (DEBUG) {
-                final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
-                Log.i(LOG_TAG, "testGetRootAccessibilityNodeInfoInActiveWindow: "
-                        + elapsedTimeMillis + "ms");
-            }
-        }
-    }
-}
diff --git a/core/tests/coretests/src/android/provider/SettingsProviderTest.java b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
index 6edd2dc..131651a 100644
--- a/core/tests/coretests/src/android/provider/SettingsProviderTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
@@ -132,6 +132,42 @@
     }
 
     @MediumTest
+    public void testSettingsChangeForOtherUser() {
+        UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
+        ContentResolver r = getContext().getContentResolver();
+
+        // Make sure there's an owner
+        assertTrue(findUser(um, UserHandle.USER_OWNER));
+
+        // create a new user to use for testing
+        UserInfo otherUser = um.createUser("TestUser1", UserInfo.FLAG_GUEST);
+        assertTrue(otherUser != null);
+        try {
+            assertNotSame("Current calling user id should not be the new guest user",
+                    otherUser.id, UserHandle.getCallingUserId());
+
+            Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "gps");
+            Settings.Secure.putStringForUser(r,
+                    Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "network", otherUser.id);
+
+            assertEquals("gps",
+                    Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED));
+            assertEquals("network", Settings.Secure.getStringForUser(
+                    r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, otherUser.id));
+
+            assertNotSame("Current calling user id should not be the new guest user",
+                    otherUser.id, UserHandle.getCallingUserId());
+            Settings.Secure.setLocationProviderEnabledForUser(r, "network", false, otherUser.id);
+            assertEquals("", Settings.Secure.getStringForUser(
+                    r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, otherUser.id));
+
+        } finally {
+            // Tidy up
+            um.removeUser(otherUser.id);
+        }
+    }
+
+    @MediumTest
     public void testRowNumberContentUri() {
         ContentResolver r = getContext().getContentResolver();
 
diff --git a/core/tests/coretests/src/com/android/internal/util/FastXmlSerializerTest.java b/core/tests/coretests/src/com/android/internal/util/FastXmlSerializerTest.java
new file mode 100644
index 0000000..be7116d
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/util/FastXmlSerializerTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+package com.android.internal.util;
+
+import junit.framework.TestCase;
+
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * Tests for {@link FastXmlSerializer}
+ */
+public class FastXmlSerializerTest extends TestCase {
+    public void testEmptyText() throws Exception {
+        final ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+        final XmlSerializer out = new FastXmlSerializer();
+        out.setOutput(stream, "utf-8");
+        out.startDocument(null, true);
+        out.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
+
+        out.startTag(null, "string");
+        out.attribute(null, "name", "meow");
+        out.text("");
+        out.endTag(null, "string");
+
+        out.endDocument();
+
+        assertEquals("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+                + "<string name=\"meow\"></string>", stream.toString());
+    }
+}
diff --git a/core/tests/coretests/src/com/android/internal/util/IndentingPrintWriterTest.java b/core/tests/coretests/src/com/android/internal/util/IndentingPrintWriterTest.java
new file mode 100644
index 0000000..6773612
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/util/IndentingPrintWriterTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.
+ */
+
+package com.android.internal.util;
+
+import junit.framework.TestCase;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+
+/**
+ * Tests for {@link IndentingPrintWriter}.
+ */
+public class IndentingPrintWriterTest extends TestCase {
+
+    private ByteArrayOutputStream mStream;
+    private PrintWriter mWriter;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        mStream = new ByteArrayOutputStream();
+        mWriter = new PrintWriter(mStream);
+    }
+
+    public void testMultipleIndents() throws Exception {
+        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ");
+
+        pw.print("Hello");
+        pw.increaseIndent();
+        pw.println();
+        pw.print("World");
+        pw.increaseIndent();
+        pw.println();
+        pw.print("And");
+        pw.decreaseIndent();
+        pw.println();
+        pw.print("Goodbye");
+        pw.decreaseIndent();
+        pw.println();
+        pw.print("World");
+        pw.println();
+
+        pw.flush();
+        assertEquals("Hello\n  World\n    And\n  Goodbye\nWorld\n", mStream.toString());
+    }
+
+    public void testAdjustIndentAfterNewline() throws Exception {
+        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ");
+
+        pw.println("Hello");
+        pw.increaseIndent();
+        pw.println("World");
+
+        pw.flush();
+        assertEquals("Hello\n  World\n", mStream.toString());
+    }
+
+    public void testWrapping() throws Exception {
+        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "", 10);
+
+        pw.print("dog ");
+        pw.print("cat ");
+        pw.print("cow ");
+        pw.print("meow ");
+
+        pw.flush();
+        assertEquals("dog cat \ncow meow ", mStream.toString());
+    }
+
+    public void testWrappingIndented() throws Exception {
+        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "    ", 10);
+
+        pw.increaseIndent();
+        pw.print("dog ");
+        pw.print("meow ");
+        pw.print("a ");
+        pw.print("b ");
+        pw.print("cow ");
+
+        pw.flush();
+        assertEquals("    dog \n    meow \n    a b \n    cow ", mStream.toString());
+    }
+
+    public void testWrappingEmbeddedNewlines() throws Exception {
+        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
+
+        pw.increaseIndent();
+        pw.print("Lorem ipsum \ndolor sit \namet, consectetur \nadipiscing elit.");
+
+        pw.flush();
+        assertEquals("  Lorem ip\n  sum \n  dolor si\n  t \n  amet, co\n"
+                + "  nsectetu\n  r \n  adipisci\n  ng elit.\n", mStream.toString());
+    }
+
+    public void testWrappingSingleGiant() throws Exception {
+        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
+
+        pw.increaseIndent();
+        pw.print("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
+
+        pw.flush();
+        assertEquals("  Lorem ip\n  sum dolo\n  r sit am\n  et, cons\n"
+                + "  ectetur \n  adipisci\n  ng elit.\n", mStream.toString());
+    }
+
+    public void testWrappingPrefixedGiant() throws Exception {
+        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
+
+        pw.increaseIndent();
+        pw.print("foo");
+        pw.print("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
+
+        pw.flush();
+        assertEquals("  foo\n  Lorem ip\n  sum dolo\n  r sit am\n  et, cons\n"
+                + "  ectetur \n  adipisci\n  ng elit.\n", mStream.toString());
+    }
+}
diff --git a/core/tests/coretests/src/com/android/internal/util/ProcFileReaderTest.java b/core/tests/coretests/src/com/android/internal/util/ProcFileReaderTest.java
index 386a78d..a81bb4b 100644
--- a/core/tests/coretests/src/com/android/internal/util/ProcFileReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/util/ProcFileReaderTest.java
@@ -134,7 +134,7 @@
             fail("somehow read a string value?");
         } catch (IOException e) {
             // expected
-            assertTrue(e.getMessage().contains("end of stream"));
+            assertTrue(e.getMessage().contains("End of stream"));
         }
     }
 
@@ -152,6 +152,20 @@
         }
     }
 
+    public void testOptionalLongs() throws Exception {
+        final ProcFileReader reader = buildReader("123 456\n789\n");
+
+        assertEquals(123L, reader.nextLong());
+        assertEquals(456L, reader.nextOptionalLong(-1L));
+        assertEquals(-1L, reader.nextOptionalLong(-1L));
+        assertEquals(-1L, reader.nextOptionalLong(-1L));
+        assertEquals(-1L, reader.nextOptionalLong(-1L));
+        reader.finishLine();
+
+        assertEquals(789L, reader.nextOptionalLong(-1L));
+        assertEquals(-1L, reader.nextOptionalLong(-1L));
+    }
+
     private static ProcFileReader buildReader(String string) throws IOException {
         return buildReader(string, 2048);
     }
diff --git a/core/tests/coretests/src/com/android/internal/util/StateMachineTest.java b/core/tests/coretests/src/com/android/internal/util/StateMachineTest.java
index 418bbd6..2a2c24e 100644
--- a/core/tests/coretests/src/com/android/internal/util/StateMachineTest.java
+++ b/core/tests/coretests/src/com/android/internal/util/StateMachineTest.java
@@ -16,6 +16,9 @@
 
 package com.android.internal.util;
 
+import java.util.Collection;
+import java.util.Iterator;
+
 import android.os.Debug;
 import android.os.HandlerThread;
 import android.os.Looper;
@@ -58,11 +61,28 @@
         }
     }
 
+    private void dumpLogRecs(StateMachine sm) {
+        int size = sm.getLogRecSize();
+        tlog("size=" + size + " count=" + sm.getLogRecCount());
+        for (int i = 0; i < size; i++) {
+            LogRec lr = sm.getLogRec(i);
+            tlog(lr.toString());
+        }
+    }
+
+    private void dumpLogRecs(Collection<LogRec> clr) {
+        int size = clr.size();
+        tlog("size=" + size);
+        for (LogRec lr : clr) {
+            tlog(lr.toString());
+        }
+    }
+
     /**
      * Tests {@link StateMachine#quit()}.
      */
     class StateMachineQuitTest extends StateMachine {
-        Object mWaitUntilTestDone = new Object();
+        Collection<LogRec> mLogRecs;
 
         StateMachineQuitTest(String name) {
             super(name);
@@ -78,39 +98,32 @@
 
         @Override
         public void onQuitting() {
-            Log.d(TAG, "onQuitting");
+            log("onQuitting");
             addLogRec(ON_QUITTING);
+            mLogRecs = mThisSm.copyLogRecs();
             synchronized (mThisSm) {
                 mThisSm.notifyAll();
             }
-
-            // Don't leave onQuitting before the test is done as everything is cleared
-            // including the log records.
-            synchronized (mWaitUntilTestDone) {
-                try {
-                    mWaitUntilTestDone.wait();
-                } catch(InterruptedException e) {
-                }
-            }
         }
 
         class S1 extends State {
+            @Override
             public void exit() {
-                Log.d(TAG, "S1.exit");
-                addLogRec(EXIT, mS1);
+                log("S1.exit");
+                addLogRec(EXIT);
             }
             @Override
             public boolean processMessage(Message message) {
                 switch(message.what) {
                     // Sleep and assume the other messages will be queued up.
                     case TEST_CMD_1: {
-                        Log.d(TAG, "TEST_CMD_1");
+                        log("TEST_CMD_1");
                         sleep(500);
                         quit();
                         break;
                     }
                     default: {
-                        Log.d(TAG, "default what=" + message.what);
+                        log("default what=" + message.what);
                         break;
                     }
                 }
@@ -128,7 +141,7 @@
 
         StateMachineQuitTest smQuitTest = new StateMachineQuitTest("smQuitTest");
         smQuitTest.start();
-        if (smQuitTest.isDbg()) Log.d(TAG, "testStateMachineQuit E");
+        if (smQuitTest.isDbg()) tlog("testStateMachineQuit E");
 
         synchronized (smQuitTest) {
 
@@ -141,38 +154,36 @@
                 // wait for the messages to be handled
                 smQuitTest.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachineQuit: exception while waiting " + e.getMessage());
+                tloge("testStateMachineQuit: exception while waiting " + e.getMessage());
             }
         }
 
-        assertEquals(8, smQuitTest.getLogRecCount());
+        dumpLogRecs(smQuitTest.mLogRecs);
+        assertEquals(8, smQuitTest.mLogRecs.size());
 
         LogRec lr;
-
-        for (int i = 0; i < 6; i++) {
-            lr = smQuitTest.getLogRec(i);
-            assertEquals(i+1, lr.getWhat());
+        Iterator<LogRec> itr = smQuitTest.mLogRecs.iterator();
+        for (int i = 1; i <= 6; i++) {
+            lr = itr.next();
+            assertEquals(i, lr.getWhat());
             assertEquals(smQuitTest.mS1, lr.getState());
             assertEquals(smQuitTest.mS1, lr.getOriginalState());
         }
-        lr = smQuitTest.getLogRec(6);
+        lr = itr.next();
         assertEquals(EXIT, lr.getInfo());
         assertEquals(smQuitTest.mS1, lr.getState());
 
-        lr = smQuitTest.getLogRec(7);
+        lr = itr.next();
         assertEquals(ON_QUITTING, lr.getInfo());
 
-        synchronized (smQuitTest.mWaitUntilTestDone) {
-            smQuitTest.mWaitUntilTestDone.notifyAll();
-        }
-        if (smQuitTest.isDbg()) Log.d(TAG, "testStateMachineQuit X");
+        if (smQuitTest.isDbg()) tlog("testStateMachineQuit X");
     }
 
     /**
      * Tests {@link StateMachine#quitNow()}
      */
     class StateMachineQuitNowTest extends StateMachine {
-        Object mWaitUntilTestDone = new Object();
+        public Collection<LogRec> mLogRecs = null;
 
         StateMachineQuitNowTest(String name) {
             super(name);
@@ -188,39 +199,34 @@
 
         @Override
         public void onQuitting() {
-            Log.d(TAG, "onQuitting");
+            log("onQuitting");
             addLogRec(ON_QUITTING);
+            // Get a copy of the log records since we're quitting and they will disappear
+            mLogRecs = mThisSm.copyLogRecs();
+
             synchronized (mThisSm) {
                 mThisSm.notifyAll();
             }
-
-            // Don't leave onQuitting before the test is done as everything is cleared
-            // including the log records.
-            synchronized (mWaitUntilTestDone) {
-                try {
-                    mWaitUntilTestDone.wait();
-                } catch(InterruptedException e) {
-                }
-            }
         }
 
         class S1 extends State {
+            @Override
             public void exit() {
-                Log.d(TAG, "S1.exit");
-                addLogRec(EXIT, mS1);
+                log("S1.exit");
+                addLogRec(EXIT);
             }
             @Override
             public boolean processMessage(Message message) {
                 switch(message.what) {
                     // Sleep and assume the other messages will be queued up.
                     case TEST_CMD_1: {
-                        Log.d(TAG, "TEST_CMD_1");
+                        log("TEST_CMD_1");
                         sleep(500);
                         quitNow();
                         break;
                     }
                     default: {
-                        Log.d(TAG, "default what=" + message.what);
+                        log("default what=" + message.what);
                         break;
                     }
                 }
@@ -238,11 +244,11 @@
 
         StateMachineQuitNowTest smQuitNowTest = new StateMachineQuitNowTest("smQuitNowTest");
         smQuitNowTest.start();
-        if (smQuitNowTest.isDbg()) Log.d(TAG, "testStateMachineQuitNow E");
+        if (smQuitNowTest.isDbg()) tlog("testStateMachineQuitNow E");
 
         synchronized (smQuitNowTest) {
 
-            // Send 6 messages but we'll QuitNow on the first so even though
+            // Send 6 message we'll QuitNow on the first even though
             // we send 6 only one will be processed.
             for (int i = 1; i <= 6; i++) {
                 smQuitNowTest.sendMessage(smQuitNowTest.obtainMessage(i));
@@ -252,31 +258,27 @@
                 // wait for the messages to be handled
                 smQuitNowTest.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachineQuitNow: exception while waiting " + e.getMessage());
+                tloge("testStateMachineQuitNow: exception while waiting " + e.getMessage());
             }
         }
 
-        // Only three records because we executed quitNow.
-        assertEquals(3, smQuitNowTest.getLogRecCount());
+        tlog("testStateMachineQuiteNow: logRecs=" + smQuitNowTest.mLogRecs);
+        assertEquals(3, smQuitNowTest.mLogRecs.size());
 
-        LogRec lr;
-
-        lr = smQuitNowTest.getLogRec(0);
+        Iterator<LogRec> itr = smQuitNowTest.mLogRecs.iterator();
+        LogRec lr = itr.next();
         assertEquals(1, lr.getWhat());
         assertEquals(smQuitNowTest.mS1, lr.getState());
         assertEquals(smQuitNowTest.mS1, lr.getOriginalState());
 
-        lr = smQuitNowTest.getLogRec(1);
+        lr = itr.next();
         assertEquals(EXIT, lr.getInfo());
         assertEquals(smQuitNowTest.mS1, lr.getState());
 
-        lr = smQuitNowTest.getLogRec(2);
+        lr = itr.next();
         assertEquals(ON_QUITTING, lr.getInfo());
 
-        synchronized (smQuitNowTest.mWaitUntilTestDone) {
-            smQuitNowTest.mWaitUntilTestDone.notifyAll();
-        }
-        if (smQuitNowTest.isDbg()) Log.d(TAG, "testStateMachineQuitNow X");
+        if (smQuitNowTest.isDbg()) tlog("testStateMachineQuitNow X");
     }
 
     /**
@@ -303,39 +305,39 @@
             @Override
             public void enter() {
                 // Test transitions in enter on the initial state work
-                addLogRec(ENTER, mS1);
+                addLogRec(ENTER);
                 transitionTo(mS2);
-                Log.d(TAG, "S1.enter");
+                log("S1.enter");
             }
             @Override
             public void exit() {
-                // Test that message is HSM_INIT_CMD
-                addLogRec(EXIT, mS1);
-                Log.d(TAG, "S1.exit");
+                addLogRec(EXIT);
+                log("S1.exit");
             }
         }
 
         class S2 extends State {
             @Override
             public void enter() {
-                addLogRec(ENTER, mS2);
-                Log.d(TAG, "S2.enter");
+                addLogRec(ENTER);
+                log("S2.enter");
             }
             @Override
             public void exit() {
-                addLogRec(EXIT, mS2);
-                assertEquals(TEST_CMD_1, getCurrentMessage().what);
-
                 // Test transition in exit work
                 transitionTo(mS4);
-                Log.d(TAG, "S2.exit");
+
+                assertEquals(TEST_CMD_1, getCurrentMessage().what);
+                addLogRec(EXIT);
+
+                log("S2.exit");
             }
             @Override
             public boolean processMessage(Message message) {
                 // Start a transition to S3 but it will be
                 // changed to a transition to S4 in exit
                 transitionTo(mS3);
-                Log.d(TAG, "S2.processMessage");
+                log("S2.processMessage");
                 return HANDLED;
             }
         }
@@ -343,28 +345,28 @@
         class S3 extends State {
             @Override
             public void enter() {
-                addLogRec(ENTER, mS3);
-                Log.d(TAG, "S3.enter");
+                addLogRec(ENTER);
+                log("S3.enter");
             }
             @Override
             public void exit() {
-                addLogRec(EXIT, mS3);
-                Log.d(TAG, "S3.exit");
+                addLogRec(EXIT);
+                log("S3.exit");
             }
         }
 
         class S4 extends State {
             @Override
             public void enter() {
-                addLogRec(ENTER, mS4);
+                addLogRec(ENTER);
                 // Test that we can do halting in an enter/exit
                 transitionToHaltingState();
-                Log.d(TAG, "S4.enter");
+                log("S4.enter");
             }
             @Override
             public void exit() {
-                addLogRec(EXIT, mS4);
-                Log.d(TAG, "S4.exit");
+                addLogRec(EXIT);
+                log("S4.exit");
             }
         }
 
@@ -390,7 +392,7 @@
             new StateMachineEnterExitTransitionToTest("smEnterExitTranstionToTest");
         smEnterExitTranstionToTest.start();
         if (smEnterExitTranstionToTest.isDbg()) {
-            Log.d(TAG, "testStateMachineEnterExitTransitionToTest E");
+            tlog("testStateMachineEnterExitTransitionToTest E");
         }
 
         synchronized (smEnterExitTranstionToTest) {
@@ -400,13 +402,14 @@
                 // wait for the messages to be handled
                 smEnterExitTranstionToTest.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachineEnterExitTransitionToTest: exception while waiting "
+                tloge("testStateMachineEnterExitTransitionToTest: exception while waiting "
                     + e.getMessage());
             }
         }
 
-        assertEquals(smEnterExitTranstionToTest.getLogRecCount(), 9);
+        dumpLogRecs(smEnterExitTranstionToTest);
 
+        assertEquals(9, smEnterExitTranstionToTest.getLogRecCount());
         LogRec lr;
 
         lr = smEnterExitTranstionToTest.getLogRec(0);
@@ -425,29 +428,44 @@
         assertEquals(TEST_CMD_1, lr.getWhat());
         assertEquals(smEnterExitTranstionToTest.mS2, lr.getState());
         assertEquals(smEnterExitTranstionToTest.mS2, lr.getOriginalState());
+        assertEquals(smEnterExitTranstionToTest.mS3, lr.getDestState());
 
         lr = smEnterExitTranstionToTest.getLogRec(4);
-        assertEquals(EXIT, lr.getInfo());
+        assertEquals(TEST_CMD_1, lr.getWhat());
         assertEquals(smEnterExitTranstionToTest.mS2, lr.getState());
+        assertEquals(smEnterExitTranstionToTest.mS2, lr.getOriginalState());
+        assertEquals(smEnterExitTranstionToTest.mS4, lr.getDestState());
+        assertEquals(EXIT, lr.getInfo());
 
         lr = smEnterExitTranstionToTest.getLogRec(5);
+        assertEquals(TEST_CMD_1, lr.getWhat());
         assertEquals(ENTER, lr.getInfo());
         assertEquals(smEnterExitTranstionToTest.mS3, lr.getState());
+        assertEquals(smEnterExitTranstionToTest.mS3, lr.getOriginalState());
+        assertEquals(smEnterExitTranstionToTest.mS4, lr.getDestState());
 
         lr = smEnterExitTranstionToTest.getLogRec(6);
+        assertEquals(TEST_CMD_1, lr.getWhat());
         assertEquals(EXIT, lr.getInfo());
         assertEquals(smEnterExitTranstionToTest.mS3, lr.getState());
+        assertEquals(smEnterExitTranstionToTest.mS3, lr.getOriginalState());
+        assertEquals(smEnterExitTranstionToTest.mS4, lr.getDestState());
 
         lr = smEnterExitTranstionToTest.getLogRec(7);
+        assertEquals(TEST_CMD_1, lr.getWhat());
         assertEquals(ENTER, lr.getInfo());
         assertEquals(smEnterExitTranstionToTest.mS4, lr.getState());
+        assertEquals(smEnterExitTranstionToTest.mS4, lr.getOriginalState());
+        assertEquals(smEnterExitTranstionToTest.mS4, lr.getDestState());
 
         lr = smEnterExitTranstionToTest.getLogRec(8);
+        assertEquals(TEST_CMD_1, lr.getWhat());
         assertEquals(EXIT, lr.getInfo());
         assertEquals(smEnterExitTranstionToTest.mS4, lr.getState());
+        assertEquals(smEnterExitTranstionToTest.mS4, lr.getOriginalState());
 
         if (smEnterExitTranstionToTest.isDbg()) {
-            Log.d(TAG, "testStateMachineEnterExitTransitionToTest X");
+            tlog("testStateMachineEnterExitTransitionToTest X");
         }
     }
 
@@ -495,7 +513,7 @@
 
         StateMachine0 sm0 = new StateMachine0("sm0");
         sm0.start();
-        if (sm0.isDbg()) Log.d(TAG, "testStateMachine0 E");
+        if (sm0.isDbg()) tlog("testStateMachine0 E");
 
         synchronized (sm0) {
             // Send 6 messages
@@ -507,13 +525,15 @@
                 // wait for the messages to be handled
                 sm0.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachine0: exception while waiting " + e.getMessage());
+                tloge("testStateMachine0: exception while waiting " + e.getMessage());
             }
         }
 
         assertEquals(6, sm0.getLogRecCount());
         assertEquals(3, sm0.getLogRecSize());
 
+        dumpLogRecs(sm0);
+
         LogRec lr;
         lr = sm0.getLogRec(0);
         assertEquals(TEST_CMD_4, lr.getWhat());
@@ -530,7 +550,7 @@
         assertEquals(sm0.mS1, lr.getState());
         assertEquals(sm0.mS1, lr.getOriginalState());
 
-        if (sm0.isDbg()) Log.d(TAG, "testStateMachine0 X");
+        if (sm0.isDbg()) tlog("testStateMachine0 X");
     }
 
     /**
@@ -550,7 +570,7 @@
 
             // Set the initial state
             setInitialState(mS1);
-            if (DBG) Log.d(TAG, "StateMachine1: ctor X");
+            if (DBG) log("StateMachine1: ctor X");
         }
 
         class S1 extends State {
@@ -595,7 +615,7 @@
     public void testStateMachine1() throws Exception {
         StateMachine1 sm1 = new StateMachine1("sm1");
         sm1.start();
-        if (sm1.isDbg()) Log.d(TAG, "testStateMachine1 E");
+        if (sm1.isDbg()) tlog("testStateMachine1 E");
 
         synchronized (sm1) {
             // Send two messages
@@ -606,7 +626,7 @@
                 // wait for the messages to be handled
                 sm1.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachine1: exception while waiting " + e.getMessage());
+                tloge("testStateMachine1: exception while waiting " + e.getMessage());
             }
         }
 
@@ -629,7 +649,7 @@
         assertEquals(2, sm1.mEnterCount);
         assertEquals(2, sm1.mExitCount);
 
-        if (sm1.isDbg()) Log.d(TAG, "testStateMachine1 X");
+        if (sm1.isDbg()) tlog("testStateMachine1 X");
     }
 
     /**
@@ -651,7 +671,7 @@
 
             // Set the initial state
             setInitialState(mS1);
-            if (DBG) Log.d(TAG, "StateMachine2: ctor X");
+            if (DBG) log("StateMachine2: ctor X");
         }
 
         class S1 extends State {
@@ -702,7 +722,7 @@
     public void testStateMachine2() throws Exception {
         StateMachine2 sm2 = new StateMachine2("sm2");
         sm2.start();
-        if (sm2.isDbg()) Log.d(TAG, "testStateMachine2 E");
+        if (sm2.isDbg()) tlog("testStateMachine2 E");
 
         synchronized (sm2) {
             // Send two messages
@@ -713,7 +733,7 @@
                 // wait for the messages to be handled
                 sm2.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachine2: exception while waiting " + e.getMessage());
+                tloge("testStateMachine2: exception while waiting " + e.getMessage());
             }
         }
 
@@ -739,7 +759,7 @@
         assertTrue(sm2.mDidEnter);
         assertTrue(sm2.mDidExit);
 
-        if (sm2.isDbg()) Log.d(TAG, "testStateMachine2 X");
+        if (sm2.isDbg()) tlog("testStateMachine2 X");
     }
 
     /**
@@ -760,7 +780,7 @@
 
             // Set the initial state will be the child
             setInitialState(mChildState);
-            if (DBG) Log.d(TAG, "StateMachine3: ctor X");
+            if (DBG) log("StateMachine3: ctor X");
         }
 
         class ParentState extends State {
@@ -796,7 +816,7 @@
     public void testStateMachine3() throws Exception {
         StateMachine3 sm3 = new StateMachine3("sm3");
         sm3.start();
-        if (sm3.isDbg()) Log.d(TAG, "testStateMachine3 E");
+        if (sm3.isDbg()) tlog("testStateMachine3 E");
 
         synchronized (sm3) {
             // Send two messages
@@ -807,7 +827,7 @@
                 // wait for the messages to be handled
                 sm3.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachine3: exception while waiting " + e.getMessage());
+                tloge("testStateMachine3: exception while waiting " + e.getMessage());
             }
         }
 
@@ -824,7 +844,7 @@
         assertEquals(sm3.mParentState, lr.getState());
         assertEquals(sm3.mChildState, lr.getOriginalState());
 
-        if (sm3.isDbg()) Log.d(TAG, "testStateMachine3 X");
+        if (sm3.isDbg()) tlog("testStateMachine3 X");
     }
 
     /**
@@ -847,7 +867,7 @@
 
             // Set the initial state will be child 1
             setInitialState(mChildState1);
-            if (DBG) Log.d(TAG, "StateMachine4: ctor X");
+            if (DBG) log("StateMachine4: ctor X");
         }
 
         class ParentState extends State {
@@ -892,7 +912,7 @@
     public void testStateMachine4() throws Exception {
         StateMachine4 sm4 = new StateMachine4("sm4");
         sm4.start();
-        if (sm4.isDbg()) Log.d(TAG, "testStateMachine4 E");
+        if (sm4.isDbg()) tlog("testStateMachine4 E");
 
         synchronized (sm4) {
             // Send two messages
@@ -903,7 +923,7 @@
                 // wait for the messages to be handled
                 sm4.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachine4: exception while waiting " + e.getMessage());
+                tloge("testStateMachine4: exception while waiting " + e.getMessage());
             }
         }
 
@@ -921,7 +941,7 @@
         assertEquals(sm4.mParentState, lr.getState());
         assertEquals(sm4.mChildState2, lr.getOriginalState());
 
-        if (sm4.isDbg()) Log.d(TAG, "testStateMachine4 X");
+        if (sm4.isDbg()) tlog("testStateMachine4 X");
     }
 
     /**
@@ -947,7 +967,7 @@
 
             // Set the initial state will be the child
             setInitialState(mChildState1);
-            if (DBG) Log.d(TAG, "StateMachine5: ctor X");
+            if (DBG) log("StateMachine5: ctor X");
         }
 
         class ParentState1 extends State {
@@ -1187,7 +1207,7 @@
     public void testStateMachine5() throws Exception {
         StateMachine5 sm5 = new StateMachine5("sm5");
         sm5.start();
-        if (sm5.isDbg()) Log.d(TAG, "testStateMachine5 E");
+        if (sm5.isDbg()) tlog("testStateMachine5 E");
 
         synchronized (sm5) {
             // Send 6 messages
@@ -1202,7 +1222,7 @@
                 // wait for the messages to be handled
                 sm5.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachine5: exception while waiting " + e.getMessage());
+                tloge("testStateMachine5: exception while waiting " + e.getMessage());
             }
         }
 
@@ -1255,7 +1275,7 @@
         assertEquals(sm5.mParentState2, lr.getState());
         assertEquals(sm5.mParentState2, lr.getOriginalState());
 
-        if (sm5.isDbg()) Log.d(TAG, "testStateMachine5 X");
+        if (sm5.isDbg()) tlog("testStateMachine5 X");
     }
 
     /**
@@ -1274,7 +1294,7 @@
 
             // Set the initial state
             setInitialState(mS1);
-            if (DBG) Log.d(TAG, "StateMachine6: ctor X");
+            if (DBG) log("StateMachine6: ctor X");
         }
 
         class S1 extends State {
@@ -1315,7 +1335,7 @@
 
         StateMachine6 sm6 = new StateMachine6("sm6");
         sm6.start();
-        if (sm6.isDbg()) Log.d(TAG, "testStateMachine6 E");
+        if (sm6.isDbg()) tlog("testStateMachine6 E");
 
         synchronized (sm6) {
             // Send a message
@@ -1325,7 +1345,7 @@
                 // wait for the messages to be handled
                 sm6.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachine6: exception while waiting " + e.getMessage());
+                tloge("testStateMachine6: exception while waiting " + e.getMessage());
             }
         }
 
@@ -1336,11 +1356,11 @@
          */
         long arrivalTimeDiff = sm6.mArrivalTimeMsg2 - sm6.mArrivalTimeMsg1;
         long expectedDelay = DELAY_TIME - DELAY_FUDGE;
-        if (sm6.isDbg()) Log.d(TAG, "testStateMachine6: expect " + arrivalTimeDiff
+        if (sm6.isDbg()) tlog("testStateMachine6: expect " + arrivalTimeDiff
                                     + " >= " + expectedDelay);
         assertTrue(arrivalTimeDiff >= expectedDelay);
 
-        if (sm6.isDbg()) Log.d(TAG, "testStateMachine6 X");
+        if (sm6.isDbg()) tlog("testStateMachine6 X");
     }
 
     /**
@@ -1361,7 +1381,7 @@
 
             // Set the initial state
             setInitialState(mS1);
-            if (DBG) Log.d(TAG, "StateMachine7: ctor X");
+            if (DBG) log("StateMachine7: ctor X");
         }
 
         class S1 extends State {
@@ -1421,7 +1441,7 @@
 
         StateMachine7 sm7 = new StateMachine7("sm7");
         sm7.start();
-        if (sm7.isDbg()) Log.d(TAG, "testStateMachine7 E");
+        if (sm7.isDbg()) tlog("testStateMachine7 E");
 
         synchronized (sm7) {
             // Send a message
@@ -1431,7 +1451,7 @@
                 // wait for the messages to be handled
                 sm7.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachine7: exception while waiting " + e.getMessage());
+                tloge("testStateMachine7: exception while waiting " + e.getMessage());
             }
         }
 
@@ -1442,11 +1462,11 @@
          */
         long arrivalTimeDiff = sm7.mArrivalTimeMsg3 - sm7.mArrivalTimeMsg2;
         long expectedDelay = sm7.SM7_DELAY_TIME - SM7_DELAY_FUDGE;
-        if (sm7.isDbg()) Log.d(TAG, "testStateMachine7: expect " + arrivalTimeDiff
+        if (sm7.isDbg()) tlog("testStateMachine7: expect " + arrivalTimeDiff
                                     + " >= " + expectedDelay);
         assertTrue(arrivalTimeDiff >= expectedDelay);
 
-        if (sm7.isDbg()) Log.d(TAG, "testStateMachine7 X");
+        if (sm7.isDbg()) tlog("testStateMachine7 X");
     }
 
     /**
@@ -1494,9 +1514,9 @@
     @SmallTest
     public void testStateMachineUnhandledMessage() throws Exception {
 
-        StateMachineUnhandledMessage sm = new StateMachineUnhandledMessage("sm");
+        StateMachineUnhandledMessage sm = new StateMachineUnhandledMessage("smUnhandledMessage");
         sm.start();
-        if (sm.isDbg()) Log.d(TAG, "testStateMachineUnhandledMessage E");
+        if (sm.isDbg()) tlog("testStateMachineUnhandledMessage E");
 
         synchronized (sm) {
             // Send 2 messages
@@ -1508,15 +1528,15 @@
                 // wait for the messages to be handled
                 sm.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachineUnhandledMessage: exception while waiting "
+                tloge("testStateMachineUnhandledMessage: exception while waiting "
                         + e.getMessage());
             }
         }
 
-        assertEquals(sm.getLogRecCount(), 2);
+        assertEquals(2, sm.getLogRecSize());
         assertEquals(2, sm.mUnhandledMessageCount);
 
-        if (sm.isDbg()) Log.d(TAG, "testStateMachineUnhandledMessage X");
+        if (sm.isDbg()) tlog("testStateMachineUnhandledMessage X");
     }
 
     /**
@@ -1569,7 +1589,7 @@
 
     @MediumTest
     public void testStateMachineSharedThread() throws Exception {
-        if (DBG) Log.d(TAG, "testStateMachineSharedThread E");
+        if (DBG) tlog("testStateMachineSharedThread E");
 
         // Create and start the handler thread
         HandlerThread smThread = new HandlerThread("testStateMachineSharedThread");
@@ -1578,7 +1598,8 @@
         // Create the state machines
         StateMachineSharedThread sms[] = new StateMachineSharedThread[10];
         for (int i = 0; i < sms.length; i++) {
-            sms[i] = new StateMachineSharedThread("sm", smThread.getLooper(), sms.length);
+            sms[i] = new StateMachineSharedThread("smSharedThread",
+                        smThread.getLooper(), sms.length);
             sms[i].start();
         }
 
@@ -1594,14 +1615,14 @@
             try {
                 waitObject.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testStateMachineSharedThread: exception while waiting "
+                tloge("testStateMachineSharedThread: exception while waiting "
                         + e.getMessage());
             }
         }
 
         for (StateMachineSharedThread sm : sms) {
-            assertEquals(sm.getLogRecCount(), 4);
-            for (int i = 0; i < sm.getLogRecCount(); i++) {
+            assertEquals(4, sm.getLogRecCount());
+            for (int i = 0; i < sm.getLogRecSize(); i++) {
                 LogRec lr = sm.getLogRec(i);
                 assertEquals(i+1, lr.getWhat());
                 assertEquals(sm.mS1, lr.getState());
@@ -1609,12 +1630,168 @@
             }
         }
 
-        if (DBG) Log.d(TAG, "testStateMachineSharedThread X");
+        if (DBG) tlog("testStateMachineSharedThread X");
+    }
+
+    static class Hsm1 extends StateMachine {
+        private static final String HSM1_TAG = "hsm1";
+
+        public static final int CMD_1 = 1;
+        public static final int CMD_2 = 2;
+        public static final int CMD_3 = 3;
+        public static final int CMD_4 = 4;
+        public static final int CMD_5 = 5;
+
+        public static Hsm1 makeHsm1() {
+            Log.d(HSM1_TAG, "makeHsm1 E");
+            Hsm1 sm = new Hsm1(HSM1_TAG);
+            sm.start();
+            Log.d(HSM1_TAG, "makeHsm1 X");
+            return sm;
+        }
+
+        Hsm1(String name) {
+            super(name);
+            log("ctor E");
+
+            // Add states, use indentation to show hierarchy
+            addState(mP1);
+                addState(mS1, mP1);
+                addState(mS2, mP1);
+            addState(mP2);
+
+            // Set the initial state
+            setInitialState(mS1);
+            log("ctor X");
+        }
+
+        class P1 extends State {
+            @Override
+            public void enter() {
+                log("P1.enter");
+            }
+            @Override
+            public void exit() {
+                log("P1.exit");
+            }
+            @Override
+            public boolean processMessage(Message message) {
+                boolean retVal;
+                log("P1.processMessage what=" + message.what);
+                switch(message.what) {
+                case CMD_2:
+                    // CMD_2 will arrive in mS2 before CMD_3
+                    sendMessage(CMD_3);
+                    deferMessage(message);
+                    transitionTo(mS2);
+                    retVal = true;
+                    break;
+                default:
+                    // Any message we don't understand in this state invokes unhandledMessage
+                    retVal = false;
+                    break;
+                }
+                return retVal;
+            }
+        }
+
+        class S1 extends State {
+            @Override
+            public void enter() {
+                log("S1.enter");
+            }
+            @Override
+            public void exit() {
+                log("S1.exit");
+            }
+            @Override
+            public boolean processMessage(Message message) {
+                log("S1.processMessage what=" + message.what);
+                if (message.what == CMD_1) {
+                    // Transition to ourself to show that enter/exit is called
+                    transitionTo(mS1);
+                    return HANDLED;
+                } else {
+                    // Let parent process all other messages
+                    return NOT_HANDLED;
+                }
+            }
+        }
+
+        class S2 extends State {
+            @Override
+            public void enter() {
+                log("S2.enter");
+            }
+            @Override
+            public void exit() {
+                log("S2.exit");
+            }
+            @Override
+            public boolean processMessage(Message message) {
+                boolean retVal;
+                log("S2.processMessage what=" + message.what);
+                switch(message.what) {
+                case(CMD_2):
+                    sendMessage(CMD_4);
+                    retVal = true;
+                    break;
+                case(CMD_3):
+                    deferMessage(message);
+                    transitionTo(mP2);
+                    retVal = true;
+                    break;
+                default:
+                    retVal = false;
+                    break;
+                }
+                return retVal;
+            }
+        }
+
+        class P2 extends State {
+            @Override
+            public void enter() {
+                log("P2.enter");
+                sendMessage(CMD_5);
+            }
+            @Override
+            public void exit() {
+                log("P2.exit");
+            }
+            @Override
+            public boolean processMessage(Message message) {
+                log("P2.processMessage what=" + message.what);
+                switch(message.what) {
+                case(CMD_3):
+                    break;
+                case(CMD_4):
+                    break;
+                case(CMD_5):
+                    transitionToHaltingState();
+                    break;
+                }
+                return HANDLED;
+            }
+        }
+
+        @Override
+        protected void onHalting() {
+            log("halting");
+            synchronized (this) {
+                this.notifyAll();
+            }
+        }
+
+        P1 mP1 = new P1();
+        S1 mS1 = new S1();
+        S2 mS2 = new S2();
+        P2 mP2 = new P2();
     }
 
     @MediumTest
     public void testHsm1() throws Exception {
-        if (DBG) Log.d(TAG, "testHsm1 E");
+        if (DBG) tlog("testHsm1 E");
 
         Hsm1 sm = Hsm1.makeHsm1();
 
@@ -1627,11 +1804,14 @@
             try {
                 sm.wait();
             } catch (InterruptedException e) {
-                Log.e(TAG, "testHsm1: exception while waiting " + e.getMessage());
+                tloge("testHsm1: exception while waiting " + e.getMessage());
             }
         }
 
+        dumpLogRecs(sm);
+
         assertEquals(7, sm.getLogRecCount());
+
         LogRec lr = sm.getLogRec(0);
         assertEquals(Hsm1.CMD_1, lr.getWhat());
         assertEquals(sm.mS1, lr.getState());
@@ -1667,162 +1847,14 @@
         assertEquals(sm.mP2, lr.getState());
         assertEquals(sm.mP2, lr.getOriginalState());
 
-        if (DBG) Log.d(TAG, "testStateMachineSharedThread X");
-    }
-}
-
-class Hsm1 extends StateMachine {
-    private static final String TAG = "hsm1";
-
-    public static final int CMD_1 = 1;
-    public static final int CMD_2 = 2;
-    public static final int CMD_3 = 3;
-    public static final int CMD_4 = 4;
-    public static final int CMD_5 = 5;
-
-    public static Hsm1 makeHsm1() {
-        Log.d(TAG, "makeHsm1 E");
-        Hsm1 sm = new Hsm1("hsm1");
-        sm.start();
-        Log.d(TAG, "makeHsm1 X");
-        return sm;
+        if (DBG) tlog("testStateMachineSharedThread X");
     }
 
-    Hsm1(String name) {
-        super(name);
-        Log.d(TAG, "ctor E");
-
-        // Add states, use indentation to show hierarchy
-        addState(mP1);
-            addState(mS1, mP1);
-            addState(mS2, mP1);
-        addState(mP2);
-
-        // Set the initial state
-        setInitialState(mS1);
-        Log.d(TAG, "ctor X");
+    private void tlog(String s) {
+        Log.d(TAG, s);
     }
 
-    class P1 extends State {
-        @Override
-        public void enter() {
-            Log.d(TAG, "P1.enter");
-        }
-        @Override
-        public void exit() {
-            Log.d(TAG, "P1.exit");
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            boolean retVal;
-            Log.d(TAG, "P1.processMessage what=" + message.what);
-            switch(message.what) {
-            case CMD_2:
-                // CMD_2 will arrive in mS2 before CMD_3
-                sendMessage(CMD_3);
-                deferMessage(message);
-                transitionTo(mS2);
-                retVal = true;
-                break;
-            default:
-                // Any message we don't understand in this state invokes unhandledMessage
-                retVal = false;
-                break;
-            }
-            return retVal;
-        }
+    private void tloge(String s) {
+        Log.e(TAG, s);
     }
-
-    class S1 extends State {
-        @Override
-        public void enter() {
-            Log.d(TAG, "S1.enter");
-        }
-        @Override
-        public void exit() {
-            Log.d(TAG, "S1.exit");
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            Log.d(TAG, "S1.processMessage what=" + message.what);
-            if (message.what == CMD_1) {
-                // Transition to ourself to show that enter/exit is called
-                transitionTo(mS1);
-                return HANDLED;
-            } else {
-                // Let parent process all other messages
-                return NOT_HANDLED;
-            }
-        }
-    }
-
-    class S2 extends State {
-        @Override
-        public void enter() {
-            Log.d(TAG, "S2.enter");
-        }
-        @Override
-        public void exit() {
-            Log.d(TAG, "S2.exit");
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            boolean retVal;
-            Log.d(TAG, "S2.processMessage what=" + message.what);
-            switch(message.what) {
-            case(CMD_2):
-                sendMessage(CMD_4);
-                retVal = true;
-                break;
-            case(CMD_3):
-                deferMessage(message);
-                transitionTo(mP2);
-                retVal = true;
-                break;
-            default:
-                retVal = false;
-                break;
-            }
-            return retVal;
-        }
-    }
-
-    class P2 extends State {
-        @Override
-        public void enter() {
-            Log.d(TAG, "P2.enter");
-            sendMessage(CMD_5);
-        }
-        @Override
-        public void exit() {
-            Log.d(TAG, "P2.exit");
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            Log.d(TAG, "P2.processMessage what=" + message.what);
-            switch(message.what) {
-            case(CMD_3):
-                break;
-            case(CMD_4):
-                break;
-            case(CMD_5):
-                transitionToHaltingState();
-                break;
-            }
-            return HANDLED;
-        }
-    }
-
-    @Override
-    protected void onHalting() {
-        Log.d(TAG, "halting");
-        synchronized (this) {
-            this.notifyAll();
-        }
-    }
-
-    P1 mP1 = new P1();
-    S1 mS1 = new S1();
-    S2 mS2 = new S2();
-    P2 mP2 = new P2();
 }
diff --git a/core/tests/inputmethodtests/Android.mk b/core/tests/inputmethodtests/Android.mk
new file mode 100644
index 0000000..4631e65
--- /dev/null
+++ b/core/tests/inputmethodtests/Android.mk
@@ -0,0 +1,18 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := tests
+
+# Include all test java files.
+LOCAL_SRC_FILES := \
+	$(call all-java-files-under, src)
+
+LOCAL_DX_FLAGS := --core-library
+LOCAL_STATIC_JAVA_LIBRARIES := core-tests android-common frameworks-core-util-lib
+LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_PACKAGE_NAME := FrameworksCoreInputMethodTests
+
+LOCAL_CERTIFICATE := platform
+
+include $(BUILD_PACKAGE)
diff --git a/core/tests/inputmethodtests/AndroidManifest.xml b/core/tests/inputmethodtests/AndroidManifest.xml
new file mode 100644
index 0000000..7f0b1aa
--- /dev/null
+++ b/core/tests/inputmethodtests/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          android:installLocation="internalOnly"
+          package="com.android.frameworks.coretests.inputmethod"
+          android:sharedUserId="android.uid.system">
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+            android:targetPackage="com.android.frameworks.coretests.inputmethod"
+            android:label="Frameworks InputMethod Core Tests" />
+
+</manifest>
diff --git a/core/tests/inputmethodtests/run_core_inputmethod_test.sh b/core/tests/inputmethodtests/run_core_inputmethod_test.sh
new file mode 100755
index 0000000..5e123ec
--- /dev/null
+++ b/core/tests/inputmethodtests/run_core_inputmethod_test.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+while [[ $# -gt 0 ]]; do
+  case "$1" in
+  --rebuild ) echo Rebuild && rebuild=true;;
+  * ) com_opts+=($1);;
+  esac
+  shift
+done
+
+if [[ -z $ANDROID_PRODUCT_OUT && $rebuilld == true ]]; then
+  echo You must lunch before running this test.
+  exit 0
+fi
+
+if [[ $rebuild == true ]]; then
+  make -j4 FrameworksCoreInputMethodTests
+  TESTAPP=${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreInputMethodTests.apk
+  COMMAND="adb install -r $TESTAPP"
+  echo $COMMAND
+  $COMMAND
+fi
+
+adb shell am instrument -w -e class android.os.InputMethodTest com.android.frameworks.coretests.inputmethod/android.test.InstrumentationTestRunner
diff --git a/core/tests/inputmethodtests/src/android/os/InputMethodTest.java b/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
new file mode 100644
index 0000000..0a2b50c
--- /dev/null
+++ b/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
@@ -0,0 +1,158 @@
+/*
+ * 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.
+ */
+
+package android.os;
+
+import com.android.internal.inputmethod.InputMethodUtils;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodSubtype;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class InputMethodTest extends InstrumentationTestCase {
+    private static final boolean IS_AUX = true;
+    private static final boolean IS_DEFAULT = true;
+    private static final boolean IS_AUTO = true;
+
+    @SmallTest
+    public void testDefaultEnabledImesWithDefaultVoiceIme() throws Exception {
+        final Context context = getInstrumentation().getTargetContext();
+        final ArrayList<InputMethodInfo> imis = new ArrayList<InputMethodInfo>();
+        imis.add(createDefaultAutoDummyVoiceIme());
+        imis.add(createNonDefaultAutoDummyVoiceIme0());
+        imis.add(createNonDefaultAutoDummyVoiceIme1());
+        imis.add(createNonDefaultDummyVoiceIme2());
+        imis.add(createDefaultDummyEnUSKeyboardIme());
+        imis.add(createNonDefaultDummyJaJPKeyboardIme());
+        final ArrayList<InputMethodInfo> enabledImis = InputMethodUtils.getDefaultEnabledImes(
+                context, true, imis);
+        assertEquals(2, enabledImis.size());
+        for (int i = 0; i < enabledImis.size(); ++i) {
+            final InputMethodInfo imi = enabledImis.get(0);
+            // "DummyDefaultAutoVoiceIme" and "DummyDefaultEnKeyboardIme"
+            if (imi.getPackageName().equals("DummyDefaultAutoVoiceIme")
+                    || imi.getPackageName().equals("DummyDefaultEnKeyboardIme")) {
+                continue;
+            } else {
+                fail("Invalid enabled subtype.");
+            }
+        }
+    }
+
+    @SmallTest
+    public void testDefaultEnabledImesWithOutDefaultVoiceIme() throws Exception {
+        final Context context = getInstrumentation().getTargetContext();
+        final ArrayList<InputMethodInfo> imis = new ArrayList<InputMethodInfo>();
+        imis.add(createNonDefaultAutoDummyVoiceIme0());
+        imis.add(createNonDefaultAutoDummyVoiceIme1());
+        imis.add(createNonDefaultDummyVoiceIme2());
+        imis.add(createDefaultDummyEnUSKeyboardIme());
+        imis.add(createNonDefaultDummyJaJPKeyboardIme());
+        final ArrayList<InputMethodInfo> enabledImis = InputMethodUtils.getDefaultEnabledImes(
+                context, true, imis);
+        assertEquals(3, enabledImis.size());
+        for (int i = 0; i < enabledImis.size(); ++i) {
+            final InputMethodInfo imi = enabledImis.get(0);
+            // "DummyNonDefaultAutoVoiceIme0", "DummyNonDefaultAutoVoiceIme1" and
+            // "DummyDefaultEnKeyboardIme"
+            if (imi.getPackageName().equals("DummyNonDefaultAutoVoiceIme0")
+                    || imi.getPackageName().equals("DummyNonDefaultAutoVoiceIme1")
+                    || imi.getPackageName().equals("DummyDefaultEnKeyboardIme")) {
+                continue;
+            } else {
+                fail("Invalid enabled subtype.");
+            }
+        }
+    }
+
+    private static InputMethodInfo createDummyInputMethodInfo(String packageName, String name,
+            CharSequence label, boolean isAuxIme, boolean isDefault,
+            List<InputMethodSubtype> subtypes) {
+        final ResolveInfo ri = new ResolveInfo();
+        final ServiceInfo si = new ServiceInfo();
+        final ApplicationInfo ai = new ApplicationInfo();
+        ai.packageName = packageName;
+        ai.enabled = true;
+        ai.flags |= ApplicationInfo.FLAG_SYSTEM;
+        si.applicationInfo = ai;
+        si.enabled = true;
+        si.packageName = packageName;
+        si.name = name;
+        si.exported = true;
+        si.nonLocalizedLabel = label;
+        ri.serviceInfo = si;
+        return new InputMethodInfo(ri, isAuxIme, "", subtypes, 1, isDefault);
+    }
+
+    private static InputMethodSubtype createDummyInputMethodSubtype(String locale, String mode,
+            boolean isAuxiliary, boolean overridesImplicitlyEnabledSubtype) {
+        return new InputMethodSubtype(0, 0, locale, mode, "", isAuxiliary,
+                overridesImplicitlyEnabledSubtype);
+    }
+
+    private static InputMethodInfo createDefaultAutoDummyVoiceIme() {
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO));
+        subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO));
+        return createDummyInputMethodInfo("DummyDefaultAutoVoiceIme", "dummy.voice0",
+                "DummyVoice0", IS_AUX, IS_DEFAULT, subtypes);
+    }
+
+    private static InputMethodInfo createNonDefaultAutoDummyVoiceIme0() {
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO));
+        subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO));
+        return createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme0", "dummy.voice1",
+                "DummyVoice1", IS_AUX, !IS_DEFAULT, subtypes);
+    }
+
+    private static InputMethodInfo createNonDefaultAutoDummyVoiceIme1() {
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        subtypes.add(createDummyInputMethodSubtype("auto", "voice", IS_AUX, IS_AUTO));
+        subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO));
+        return createDummyInputMethodInfo("DummyNonDefaultAutoVoiceIme1", "dummy.voice2",
+                "DummyVoice2", IS_AUX, !IS_DEFAULT, subtypes);
+    }
+
+    private static InputMethodInfo createNonDefaultDummyVoiceIme2() {
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        subtypes.add(createDummyInputMethodSubtype("en_US", "voice", IS_AUX, !IS_AUTO));
+        return createDummyInputMethodInfo("DummyNonDefaultVoiceIme2", "dummy.voice3",
+                "DummyVoice3", IS_AUX, !IS_DEFAULT, subtypes);
+    }
+
+    private static InputMethodInfo createDefaultDummyEnUSKeyboardIme() {
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        subtypes.add(createDummyInputMethodSubtype("en_US", "keyboard", !IS_AUX, !IS_AUTO));
+        return createDummyInputMethodInfo("DummyDefaultEnKeyboardIme", "dummy.keyboard0",
+                "DummyKeyboard0", !IS_AUX, IS_DEFAULT, subtypes);
+    }
+
+    private static InputMethodInfo createNonDefaultDummyJaJPKeyboardIme() {
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        subtypes.add(createDummyInputMethodSubtype("ja_JP", "keyboard", !IS_AUX, !IS_AUTO));
+        return createDummyInputMethodInfo("DummyNonDefaultJaJPKeyboardIme", "dummy.keyboard1",
+                "DummyKeyboard1", !IS_AUX, !IS_DEFAULT, subtypes);
+    }
+}
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 83ecdd9..cf04b5c 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -106,6 +106,10 @@
         <group gid="net_bw_acct" />
     </permission>
 
+    <permission name="android.permission.LOOP_RADIO" >
+        <group gid="loop_radio" />
+    </permission>
+
     <!-- ================================================================== -->
     <!-- ================================================================== -->
     <!-- ================================================================== -->
diff --git a/data/keyboards/Generic.kl b/data/keyboards/Generic.kl
index 225c11a..1413319 100644
--- a/data/keyboards/Generic.kl
+++ b/data/keyboards/Generic.kl
@@ -243,8 +243,8 @@
 # key 221 "KEY_SHOP"
 # key 222 "KEY_ALTERASE"
 # key 223 "KEY_CANCEL"
-# key 224 "KEY_BRIGHTNESSDOWN"
-# key 225 "KEY_BRIGHTNESSUP"
+key 224   BRIGHTNESS_DOWN
+key 225   BRIGHTNESS_UP
 key 226   HEADSETHOOK
 
 key 256   BUTTON_1
@@ -404,6 +404,9 @@
 # key 503 KEY_BRL_DOT7
 # key 504 KEY_BRL_DOT8
 
+# Keys defined by HID usages
+key usage 0x0c006F BRIGHTNESS_UP
+key usage 0x0c0070 BRIGHTNESS_DOWN
 
 # Joystick and game controller axes.
 # Axes that are not mapped will be assigned generic axis numbers by the input subsystem.
diff --git a/data/keyboards/Vendor_05ac_Product_0239.kl b/data/keyboards/Vendor_05ac_Product_0239.kl
index 6bd3753..b0c358e 100644
--- a/data/keyboards/Vendor_05ac_Product_0239.kl
+++ b/data/keyboards/Vendor_05ac_Product_0239.kl
@@ -112,8 +112,8 @@
 key 164   MEDIA_PLAY_PAUSE
 key 165   MEDIA_PREVIOUS
 # key 204  show gadgets
-# key 224  reduce brightness
-# key 225  increase brightness
+key 224   BRIGHTNESS_DOWN
+key 225   BRIGHTNESS_UP
 # key 229  blank special function on F5
 # key 230  blank special function on F6
 key 464   FUNCTION
diff --git a/docs/downloads/training/BitmapFun.zip b/docs/downloads/training/BitmapFun.zip
index 882ce03..b5fd88b 100644
--- a/docs/downloads/training/BitmapFun.zip
+++ b/docs/downloads/training/BitmapFun.zip
Binary files differ
diff --git a/docs/html-intl/es/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/es/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..08a42dd
--- /dev/null
+++ b/docs/html-intl/es/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=Cómo controlar el nivel de batería y el estado de carga
+parent.title=Cómo optimizar la duración de la batería
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Cómo determinar y controlar el tipo de conector y el estado de la conexión
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#DetermineChargeState">Cómo determinar el estado de carga actual</a></li>
+  <li><a href="#MonitorChargeState">Cómo supervisar los cambios en el estado de carga</a></li>
+  <li><a href="#CurrentLevel">Cómo determinar el nivel de batería actual</a></li>
+  <li><a href="#MonitorLevel">Cómo supervisar cambios importantes en el nivel de batería</a></li>
+</ol>
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>Al modificar la frecuencia de las actualizaciones en segundo plano para reducir el efecto de las mismas en la duración de la batería, te recomendamos que comiences por comprobar el estado de carga y el nivel actual de la batería.</p>
+
+<p>El impacto derivado de actualizar aplicaciones en la duración de la batería varía en función del nivel de batería y del estado de carga del dispositivo, mientras que es insignificante cuando este está conectado a la corriente. Por ello, en la mayoría de los casos, puedes maximizar la frecuencia de actualización cuando el dispositivo esté conectado a un cargador. Por el contrario, si el dispositivo está en proceso de descarga, disminuir la frecuencia de actualización te permitirá aumentar la duración de la batería.</p>
+
+<p>Del mismo modo, puedes comprobar el nivel de carga de la batería y reducir la frecuencia de las actualizaciones o incluso detenerlas cuando la batería esté a punto de agotarse.</p>
+
+
+<h2 id="DetermineChargeState">Cómo determinar el estado de carga actual</h2> 
+ 
+<p>En primer lugar, te recomendamos que determines el estado de carga actual. {@link android.os.BatteryManager} envía los detalles de carga y de la batería en un {@link android.content.Intent} persistente que incluye el estado de carga.</p>
+
+<p>Se trata de un intento persistente, por lo que no es necesario registrar un {@link android.content.BroadcastReceiver}. Para ello, solo tienes que ejecutar {@code registerReceiver} transmitiendo {@code null} como el receptor (como se muestra en el siguiente fragmento). A continuación, se devuelve el intento de estado actual de la batería. Puedes transmitir un objeto {@link android.content.BroadcastReceiver} real, pero hablaremos sobre las actualizaciones en otra sección, por lo que no es necesario ahora.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>Puedes extraer el estado de carga actual y, si el dispositivo está cargando, puedes saber también si se está usando un cargador de corriente alterna o USB:<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>Normalmente, debes maximizar la frecuencia de las actualizaciones en segundo plano si el dispositivo está conectado a un cargador de corriente alterna, disminuir esa frecuencia si se utiliza un cargador USB y reducirla aún más si la batería se está descargando.</p>
+
+
+<h2 id="MonitorChargeState">Cómo supervisar los cambios en el estado de carga</h2> 
+
+<p>Modificar el estado de carga es tan fácil como conectar el dispositivo a un enchufe o USB. Por ello, es importante que supervises el estado de carga por si se producen cambios y modifiques la frecuencia de actualización según corresponda.</p>
+
+<p>{@link android.os.BatteryManager} emite una acción siempre que el dispositivo se conecta o desconecta de la corriente. Es importante recibir estos eventos aunque la aplicación no esté en ejecución (especialmente porque estos eventos pueden afectar a la frecuencia con la que inicias tu aplicación para actualizarla en segundo plano), por lo que debes registrar un {@link android.content.BroadcastReceiver} en tu archivo de manifiesto para detectar ambos eventos definiendo {@link android.content.Intent#ACTION_POWER_CONNECTED} y {@link android.content.Intent#ACTION_POWER_DISCONNECTED} en un filtro de intentos.</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>En la implementación de {@link android.content.BroadcastReceiver} asociada, puedes extraer el método y el estado de carga actual como se describe en el paso anterior.</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">Cómo determinar el nivel de batería actual</h2> 
+
+<p>En algunos casos, también es útil determinar el nivel de batería actual. Puedes disminuir la frecuencia de las actualizaciones en segundo plano si el nivel de carga de la batería es inferior a un valor determinado.</p>
+
+<p>Puedes consultar la carga actual de la batería extrayendo el nivel actual de la batería y subir a partir del intento de estado de batería, como se muestra a continuación:</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">Cómo supervisar cambios importantes en el nivel de batería</h2> 
+
+<p>No puedes controlar el estado de la batería de forma continua fácilmente, pero tampoco es necesario.</p>
+
+<p>En términos generales, el impacto sobre la batería derivado de controlar continuamente el nivel de batería es mayor que el comportamiento habitual de la aplicación. Por ello, te recomendamos que supervises únicamente los cambios en el nivel de batería más significativos, especialmente cuando el dispositivo tenga poca batería o acabe de cargarse.</p>
+
+<p>El fragmento de manifiesto que aparece a continuación se ha extraído del elemento de filtro de intento de un receptor de emisión. El receptor detecta {@link android.content.Intent#ACTION_BATTERY_LOW} y {@link android.content.Intent#ACTION_BATTERY_OKAY} y se activa cuando el nivel de batería del dispositivo es bajo o cuando se sale de un estado bajo de batería.</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>Cuando la batería esté a punto de agotarse, te recomendamos que inhabilites las actualizaciones en segundo plano. Si el teléfono se apaga antes de poder utilizar las aplicaciones, no importa que tengan los datos actualizados.</p>
+
+<p>En muchos casos, el hecho de cargar un dispositivo coincide con la acción de utilizar un conector. En la próxima sección, hablaremos sobre cómo determinar el estado de conexión actual y cómo supervisar los cambios que se produzcan al conectar el dispositivo.</p>
+
diff --git a/docs/html-intl/es/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/es/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..2a5ff12
--- /dev/null
+++ b/docs/html-intl/es/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=Cómo determinar y controlar el estado de la conectividad
+parent.title=Cómo optimizar la duración de la batería
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Cómo determinar y controlar el tipo de conector y el estado de la conexión
+previous.link=docking-monitoring.html
+next.title=Cómo manipular los receptores de emisión bajo demanda
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#DetermineConnection">Cómo determinar si tienes conexión a Internet</a></li>
+  <li><a href="#DetermineType">Cómo determinar el tipo de conexión a Internet</a></li>
+  <li><a href="#MonitorChanges">Cómo supervisar los cambios en la conectividad</a></li>
+</ol>
+
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Algunos de los usos más comunes para las alarmas con repetición y los servicios en segundo plano es programar actualizaciones regulares de los datos de aplicaciones a partir de recursos de Internet, almacenar datos en la memoria caché o ejecutar descargas a largo plazo. Sin embargo, si no estás conectado a Internet o la conexión es demasiado débil para completar la descarga, ¿para qué activar el dispositivo y programar la actualización?</p>
+
+<p>Puedes utilizar {@link android.net.ConnectivityManager} para comprobar si estás conectado a Internet y, en ese caso, el tipo de conexión que estás utilizando.</p>
+
+
+<h2 id="DetermineConnection">Cómo determinar si tienes conexión a Internet</h2> 
+ 
+<p>No es necesario programar una actualización basada en un recurso de Internet si no estás conectado. En el fragmento que aparece a continuación, se muestra cómo utilizar {@link android.net.ConnectivityManager} para consultar la red activa y determinar si hay conexión a Internet.</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">Cómo determinar el tipo de conexión a Internet</h2> 
+
+<p>También puedes determinar el tipo de conexión a Internet que hay disponible.</p>
+
+<p>El dispositivo se puede conectar a Internet a través de conexiones Ethernet, Wi-Fi, WiMAX y de datos móviles. Al consultar el tipo de red activa, como se muestra a continuación, puedes modificar la frecuencia de actualización en función del ancho de banda disponible.</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>El coste de las conexiones de datos móviles suele ser superior al de las conexiones Wi-Fi, por lo que en la mayoría de los casos, la frecuencia de actualización de tu aplicación debería ser menor si utilizas conexiones móviles. Del mismo modo, las descargas grandes deberían cancelarse hasta que estés conectado a una red Wi-Fi.</p>
+
+<p>Cuando hayas inhabilitado las actualizaciones, es importante que detectes si se hay cambios en la conectividad para poder reanudarlas cuando se haya establecido una conexión a Internet.</p>
+
+
+<h2 id="MonitorChanges">Cómo supervisar los cambios en la conectividad</h2> 
+
+<p>{@link android.net.ConnectivityManager} emite la acción {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) cuando se han modificado los detalles de la conectividad. Puedes registrar un receptor de emisión en el archivo de manifiesto para detectar estos cambios y reanudar (o cancelar) las actualizaciones en segundo plano según corresponda.</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>Los cambios en la conectividad de un dispositivo pueden ser muy frecuentes (esta emisión se activa siempre que cambias de una conexión de datos móviles a una conexión Wi-Fi). Como resultado, te recomendamos que supervises esta emisión únicamente cuando hayas cancelado anteriormente las actualizaciones o las descargas para reanudarlas. Normalmente, basta con comprobar la conexión a Internet antes de iniciar una actualización y, si no hay ninguna, cancelar el resto de actualizaciones hasta que se restablezca la conexión.</p>
+
+<p>Esta técnica requiere que alternes receptores de emisión que hayas declarado en el archivo de manifiesto, que se describe en la próxima sección.</p>
diff --git a/docs/html-intl/es/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/es/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..d612281
--- /dev/null
+++ b/docs/html-intl/es/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=Cómo determinar y controlar el tipo de conector y el estado de la conexión
+parent.title=Cómo optimizar la duración de la batería
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Cómo controlar el nivel de batería y el estado de carga
+previous.link=battery-monitoring.html
+next.title=Cómo determinar y controlar el estado de la conectividad
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#CurrentDockState">Cómo solicitar el foco de audio</a></li>
+  <li><a href="#DockType">Cómo determinar el tipo de conector actual</a></li>
+  <li><a href="#MonitorDockState">Cómo supervisar los cambios en el tipo de conector o en el estado del mismo</a></li>
+</ol>
+
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Los dispositivos Android se pueden conectar a distintos tipos de conectores. Por ejemplo, se puede utilizar conectores para coche o domésticos y tanto digitales como analógicos. Normalmente, el estado del conector está vinculado al estado de carga, ya que muchos conectores cargan el dispositivo mientras está conectado.</p>
+
+<p>El modo en el que el estado del conector del teléfono afecta a la frecuencia de actualización depende de tu aplicación. Puedes aumentar la frecuencia de actualización de una aplicación sobre noticias cuando el dispositivo esté conectado a un conector de escritorio o inhabilitar las actualizaciones completamente si está conectado a un conector de coche. Por el contrario, puedes maximizar las actualizaciones si el dispositivo está conectado a un conector de coche y tu servicio en segundo plano se actualiza con el estado del tráfico.</p>
+
+<p>El estado del conector se emite también como un {@link android.content.Intent} persistente, lo que te permite consultar si el dispositivo está conectado o no y, si lo está, determinar el tipo de conector.</p>
+
+
+<h2 id="CurrentDockState">Cómo determinar el estado de conexión actual</h2> 
+ 
+<p>La información sobre el estado del conector se incluye como información adicional en una emisión persistente de la acción {@link android.content.Intent#ACTION_DOCK_EVENT}. Por ello, no es necesario registrar un {@link android.content.BroadcastReceiver}. Solo tienes que ejecutar {@link android.content.Context#registerReceiver registerReceiver()} transmitiendo {@code null} como el receptor de emisión, como se muestra en el fragmento de código que aparece a continuación.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>Puedes extraer el estado actual de la conexión de la información adicional de {@code EXTRA_DOCK_STATE}:<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">Cómo determinar el tipo de conector actual</h2> 
+
+<p>Si un dispositivo está insertado en un conector, se puede conectar a cualquiera de estos cuatro tipos de conectores: 
+<ul><li>coche,</li>
+<li>escritorio,</li>
+<li>escritorio de gama baja (analógico),</li>
+<li>escritorio de gama alta (digital).</li></ul></p>
+
+<p>Ten en cuenta que las últimas dos opciones se introdujeron en Android únicamente en el nivel 11 del API. Por ello, te recomendamos que compruebes las tres opciones solo cuando te interese más el tipo de conector que si se trata de un conector digital o analógico:</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">Cómo supervisar los cambios en el tipo de conector o en el estado del mismo</h2> 
+
+<p>Cuando el dispositivo está conectado a un conector o desconectado del mismo, se emite la acción {@link android.content.Intent#ACTION_DOCK_EVENT}. Para controlar los cambios que se produzcan en el estado del conector del dispositivo, solo tienes que registrar un receptor de emisión en el archivo de manifiesto de la aplicación, como se muestra en el fragmento que aparece a continuación:</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>Puedes extraer el estado y el tipo de conector en la implementación del receptor con las mismas técnicas que se han descrito en el paso anterior.</p>
diff --git a/docs/html-intl/es/training/monitoring-device-state/index.jd b/docs/html-intl/es/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..bf6b1c1
--- /dev/null
+++ b/docs/html-intl/es/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=Cómo optimizar la duración de la batería
+
+trainingnavtop=true
+startpage=true
+next.title=Cómo controlar el nivel de batería y el estado de carga
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Dependencias y requisitos previos</h2> 
+<ul>
+  <li>Android 2.0 (nivel 5 del API) o superior</li>
+  <li>Experiencia con <a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a></li>
+</ul>
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">Servicios</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Uno de los objetivos de tu aplicación debe ser limitar su impacto en la duración de la batería del dispositivo en el que esté instalada. Después de leer estas secciones, podrás desarrollar aplicaciones que optimizarán el uso de la batería en función del estado del dispositivo en el que estén instaladas.</p>
+
+<p>Al tomar medidas como inhabilitar las actualizaciones de servicios en segundo plano o disminuir la frecuencia de dichas actualizaciones cuando el nivel de batería sea bajo, puedes garantizar que se minimice el impacto de tu aplicación en la duración de la batería sin afectar a la experiencia del usuario.</p>
+
+<h2>Secciones</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">Cómo controlar el nivel de batería y el estado de carga</a></b></dt>
+  <dd>Obtén más información sobre cómo determinar y controlar el nivel de batería actual y los cambios en el estado de carga para modificar la frecuencia de actualizaciones en segundo plano de tu aplicación.</dd>
+
+  <dt><b><a href="docking-monitoring.html">Cómo determinar y controlar el tipo de conector y el estado de la conexión</a></b></dt>
+  <dd>La frecuencia de actualización óptima puede variar en función de cómo se utilice el dispositivo en el que está instalada la aplicación. Obtén más información sobre cómo determinar y controlar cuándo el dispositivo está conectado a algún sistema de acoplamiento u otra conexión.</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">Cómo determinar y controlar el estado de la conectividad</a></b></dt>
+  <dd>Si no tienes conexión a Internet, no puedes actualizar tu aplicación a partir de una fuente online. Obtén más información sobre cómo comprobar el estado de la conectividad para modificar la frecuencia de actualización en segundo plano de tu aplicación. También puedes obtener más información sobre cómo comprobar la conectividad móvil o Wi-Fi antes de iniciar operaciones que requieran un nivel elevado de ancho de banda.</dd>
+
+  <dt><b><a href="manifest-receivers.html">Cómo manipular los receptores de emisión bajo demanda</a></b></dt>
+  <dd>Los receptores de emisión que declaras en el archivo de manifiesto se pueden alternar durante la ejecución para inhabilitar los que no son necesarios debido al estado actual del dispositivo. Obtén más información sobre cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento y cómo posponer acciones hasta que el dispositivo se encuentre en un estado concreto.</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html-intl/es/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/es/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..a90468e
--- /dev/null
+++ b/docs/html-intl/es/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=Cómo manipular los receptores de emisión bajo demanda
+parent.title=Cómo optimizar la duración de la batería
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Cómo determinar y controlar el estado de la conectividad
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#ToggleReceivers">Cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento</a></li>
+</ol>
+
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
+</ul>
+
+</div> 
+</div>
+
+<p>La forma más sencilla de controlar los cambios en el estado del dispositivo es crear un {@link android.content.BroadcastReceiver} para cada estado que vayas a controlar y registrar cada uno de ellos en el archivo de manifiesto de tu aplicación. A continuación, en cada uno de esos receptores solo tienes que volver a programar las alarmas recurrentes en función del estado actual del dispositivo.</p>
+
+<p>Un efecto secundario de este método es que tu aplicación activará el dispositivo siempre que uno de los receptores se active (probablemente, con más frecuencia de la necesaria).</p>
+
+<p>Te recomendamos que inhabilites o habilites los receptores de emisión en el momento de la ejecución. De este modo, puedes utilizar los receptores que hayas declarado en el archivo de manifiesto como alarmas pasivas que se activan mediante los eventos del sistema solo cuando es necesario.</p>
+ 
+
+<h2 id="ToggleReceivers">Cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento </h2> 
+ 
+<p>Se puede utilizar el {@link android.content.pm.PackageManager} para alternar el estado habilitado en cualquier componente definido en el archivo de manifiesto, incluidos los receptores de emisión que quieras habilitar o inhabilitar, como se muestra en el fragmento que aparece a continuación:</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>Al utilizar esta técnica, si determinas que la conectividad se ha perdido, puedes inhabilitar todos los receptores excepto el receptor de cambio de conectividad. Por el contrario, cuando estés conectado, puedes dejar de detectar cambios de conectividad y solo comprobar si tienes conexión antes de realizar una actualización y de volver a programar una alarma de actualización recurrente.</p>
+
+<p>Puedes utilizar la misma técnica para posponer una descarga que requiera un nivel de ancho de banda superior para completarse. Solo tienes que habilitar un receptor de emisión que detecte los cambios de conectividad y que inicie la descarga solo cuando estés conectado a una red Wi-Fi.</p>
diff --git a/docs/html-intl/es/training/multiscreen/adaptui.jd b/docs/html-intl/es/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..61f0735
--- /dev/null
+++ b/docs/html-intl/es/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=Cómo implementar interfaces de usuario adaptables
+parent.title=Cómo diseñar aplicaciones para varias pantallas
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Cómo admitir varias densidades de pantalla
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>En esta sección puedes aprender:</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">Cómo determinar el diseño actual</a></li>
+  <li><a href="#TaskReactToLayout">Cómo reaccionar en función del diseño actual</a></li>
+  <li><a href="#TaskReuseFrag">Cómo volver a utilizar fragmentos en otras actividades</a></li>
+  <li><a href="#TaskHandleConfigChanges">Cómo gestionar los cambios en la configuración de la pantalla</a></li>
+</ol>
+
+<h2>También puedes consultar:</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Cómo admitir tablets y dispositivos móviles</a></li>
+</ul>
+ 
+<h2>¡Pruébalo!</h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>En función del diseño actual de tu aplicación, la interfaz puede variar. Por ejemplo, si tu aplicación está en modo de panel dual, haz clic en un elemento del panel izquierdo para que aparezca en el panel de la derecha. Asimismo, si está en modo de panel único, el contenido debería aparecer por sí mismo (en otra actividad).</p>
+
+
+<h2 id="TaskDetermineCurLayout">Cómo determinar el diseño actual</h2>
+
+<p>Dado que la implementación de cada diseño variará en cierta medida, probablemente una de las primeras cosas que tendrás que hacer será determinar el diseño que el usuario puede ver en ese momento. Por ejemplo, puedes determinar si el usuario utiliza el modo de "panel único" o de "panel dual". Para ello, puedes consultar si una vista determinada existe y es visible:</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>Ten en cuenta que este código consulta la disponibilidad del panel del "artículo", lo que es mucho más flexible que incluir una consulta para un diseño determinado.</p>
+
+<p>Otro ejemplo de cómo puedes adaptar la existencia de diferentes componentes es comprobar su disponibilidad antes de realizar una operación relacionada con los mismos. Por ejemplo, en la aplicación de ejemplo News Reader, hay un botón que abre un menú, pero ese botón solo aparece en las versiones anteriores a Android 3.0 (porque  <PH>{@link android.app.ActionBar}</PH> en el nivel 11 del API y en niveles superiores). Por tanto, para añadir el detector de eventos para este botón, puedes hacer lo siguiente:</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">Cómo reaccionar en función del diseño actual</h2>
+
+<p>El resultado de algunas acciones puede variar en función del diseño actual. Por ejemplo, en el ejemplo de News Reader, al hacer clic en un encabezado de la lista se abrirá el artículo del panel situado a la derecha si la interfaz de usuario está en modo de panel dual, pero se iniciará una actividad independiente si esta está en modo de panel único:</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>De igual modo, si la aplicación está en modo de panel dual, debe configurar la barra de acción con pestañas para la navegación, mientras que si la aplicación está en modo de panel único, debe configurar la navegación con un widget giratorio. Por tanto, el código debe comprobar también cuál es el caso adecuado:</p>
+
+<pre>
+final String CATEGORIES[] = { "Top Stories", "Politics", "Economy", "Technology" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">Cómo volver a utilizar fragmentos en otras actividades</h2>
+
+<p>Un patrón recurrente a la hora de diseñar para distintas pantallas es utilizar una parte de la interfaz que se implementa como un panel en algunas configuraciones de pantalla y como actividad independiente en otras. Por ejemplo, en el ejemplo de News Reader, el texto del artículo de noticias se presenta en el panel de la derecha en las pantallas grandes, pero es una actividad independiente en las pantallas más pequeñas.</p>
+
+<p>En otros casos similares, puedes evitar la duplicación de código reutilizando la misma <PH>{@link android.app.Fragment}</PH> en distintas actividades. Por ejemplo, <code>ArticleFragment</code> se utiliza en el diseño de panel dual:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>A continuación, se vuelve a utilizar (sin diseño) en el diseño de actividad para pantallas más pequeñas (<code>ArticleActivity</code>):</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>Evidentemente, esto tiene el mismo efecto que declarar el fragmento en un diseño XML. Sin embargo, en este caso, un diseño XML sería un trabajo innecesario porque el fragmento del artículo es el único componente de esta actividad.</p>
+
+<p>Un punto muy importante que debes tener en cuenta al diseñar tus fragmentos es no crear un acoplamiento fuerte para una actividad determinada. Para ello, normalmente puedes definir una interfaz que resuma todas las formas en las que tiene que interactuar el fragmento con su actividad principal y, a continuación, la actividad principal implementa esa interfaz:</p>
+
+<p>Por ejemplo, ese es precisamente el objetivo del <code>HeadlinesFragment</code> de la aplicación News Reader:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>A continuación, cuando el usuario selecciona un encabezado, el fragmento notifica el detector especificado por la actividad principal (en lugar de notificar una actividad predefinida específica):</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p>Si quieres obtener más información sobre esta técnica, puedes consultar la guía sobre <a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">Cómo admitir tablets y dispositivos móviles</a>.</p>
+
+
+<h2 id="TaskHandleConfigChanges">Cómo gestionar los cambios en la configuración de la pantalla</h2>
+
+<p>Si utilizas actividades independientes para implementar partes individuales de tu interfaz, debes tener en cuenta que es posible que tengas que reaccionar ante determinados cambios en la configuración (como un cambio de rotación) para mantener la homogeneidad de tu interfaz.</p>
+
+<p>Por ejemplo, en un tablet de 7" que utilice Android 3.0 o una versión superior, el ejemplo de News Reader utiliza una actividad independiente para mostrar el artículo de noticias en el modo vertical, pero utiliza el diseño de panel dual en el modo horizontal.</p>
+
+<p>Esto significa que cuando el usuario utiliza el modo vertical y está consultando un artículo, tienes que detectar que la orientación ha cambiado al modo horizontal y reaccionar de forma adecuada finalizando la actividad. A continuación, debes volver a la actividad principal para que el contenido pueda mostrarse en el diseño de panel dual:</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html-intl/es/training/multiscreen/index.jd b/docs/html-intl/es/training/multiscreen/index.jd
new file mode 100644
index 0000000..0a1461b
--- /dev/null
+++ b/docs/html-intl/es/training/multiscreen/index.jd
@@ -0,0 +1,63 @@
+page.title=Cómo diseñar aplicaciones para varias pantallas
+trainingnavtop=true
+startpage=true
+next.title=Cómo admitir varios tamaños de pantalla
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>Dependencias y requisitos previos</h2> 
+
+<ul>
+  <li>Android 1.6 o superior (Android 2.1 o superior para la aplicación de ejemplo)</li>
+  <li>Conocimiento básico de <a
+href="http://developer.android.com/guide/components/activities.html">Actividades</a> y <a href="http://developer.android.com/guide/components/fragments.html">Fragmentos</a></li>
+  <li>Experiencia en el desarrollo de una <a
+href="http://developer.android.com/guide/topics/ui/index.html">Interfaz de usuario</a> de Android</li>
+  <li>Algunas funciones requieren el uso de la <a
+href="{@docRoot}tools/extras/support-library.html">biblioteca de compatibilidad</a></li>
+</ul>
+
+<h2>También puedes consultar:</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
+</ul>
+ 
+<h2>¡Pruébalo!</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>Android se utiliza en cientos de dispositivos con diferentes tamaños de pantalla, desde pequeños teléfonos hasta enormes televisores. Por ello, es importante que diseñes tu aplicación para que sea compatible con todos los tamaños de pantalla y esté disponible para el mayor número de usuarios posible.</p>
+
+<p>Sin embargo, no es suficiente con que tu aplicación sea compatible con diferentes dispositivos. Cada tamaño de pantalla ofrece diferentes posibilidades y retos para la interacción del usuario. Por ello, para satisfacer completamente a tus usuarios e impresionarlos, tu aplicación debe ir más allá de simplemente <em>admitir</em> varias pantallas: debe <em>optimizar</em> la experiencia de usuario para cada configuración de pantalla.</p>
+
+<p>En esta sección se explica cómo implementar una interfaz de usuario que esté optimizada para diferentes configuraciones de pantalla.</p>
+
+<p>El código que aparece en cada sección se ha extraído de una aplicación de ejemplo para explicar las prácticas recomendadas a la hora de optimizar tu aplicación para varias pantallas. Puedes descargar el ejemplo (situado a la derecha) y utilizarlo como fuente de código reutilizable para tu propia aplicación.</p>
+
+<p class="note"><strong>Nota:</strong> en esta sección y en el ejemplo correspondiente, se utiliza la <a
+href="{@docRoot}tools/extras/support-library.html">biblioteca de compatibilidad</a> para poder usar las API de <PH>{@link android.app.Fragment}</PH> en versiones anteriores a Android 3.0. Debes descargar y la biblioteca y añadirla a tu aplicación para poder utilizar todas las API que se indican en esta sección.</p>
+ 
+
+<h2>Secciones</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">Cómo admitir varios tamaños de pantalla</a></b></dt> 
+    <dd>En esta sección se explica cómo crear diseños que se adapten a diferentes tamaños de pantalla (mediante dimensiones flexibles para vistas, <PH>{@link android.widget.RelativeLayout}</PH>, calificadores de orientación y tamaño de pantalla, filtros de alias y mapas de bits de la clase NinePatch).</dd> 
+ 
+  <dt><b><a href="screendensities.html">Cómo admitir varias densidades de pantalla</a></b></dt> 
+    <dd>En esta sección se explica cómo admitir pantallas con diferentes densidades de píxeles (mediante píxeles independientes de la densidad y mapas de bits adecuados a cada densidad).</dd> 
+ 
+  <dt><b><a href="adaptui.html">Cómo implementar interfaces de usuario adaptables</a></b></dt> 
+    <dd>En esta sección se explica cómo implementar tu interfaz de usuario para que se adapte a varias combinaciones de densidad o de tamaño de pantalla (detección de tiempo de ejecución del diseño activo, cómo reaccionar en función del diseño actual y cómo administrar los cambios en la configuración de la pantalla).</dd> 
+</dl> 
diff --git a/docs/html-intl/es/training/multiscreen/screendensities.jd b/docs/html-intl/es/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..0edb89f
--- /dev/null
+++ b/docs/html-intl/es/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=Cómo admitir varias densidades de pantalla
+parent.title=Cómo diseñar aplicaciones para varias pantallas
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Cómo admitir varios tamaños de pantalla
+previous.link=screensizes.html
+next.title=Cómo implementar interfaces de usuario adaptables
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#TaskUseDP">Cómo utilizar píxeles independientes de la densidad</a></li>
+  <li><a href="#TaskProvideAltBmp">Cómo proporcionar mapas de bits alternativos</a></li>
+</ol>
+
+<h2>También puedes consultar:</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Directrices para diseñar iconos</a></li>
+</ul>
+
+<h2>¡Pruébalo!</h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>En esta sección se explica cómo proporcionar diferentes recursos y utilizar unidades de medida de resolución independiente para admitir diferentes densidades de pantalla.</p>
+
+<h2 id="TaskUseDP">Cómo utilizar píxeles independientes de la densidad</h2>
+
+<p>Un error común que debes evitar al crear tus diseños es utilizar píxeles absolutos para definir distancias o tamaños. Definir dimensiones de diseño mediante píxeles es problemático porque cada pantalla tiene densidades de píxeles diferentes, por lo que es posible que el mismo número de píxeles corresponda a varios tamaños físicos en distintos dispositivos. Por tanto, al especificar dimensiones, debes utilizar siempre unidades <code>dp</code> o <code>sp</code>. <code>dp</code> es un píxel independiente de la densidad que corresponde al tamaño físico de un píxel a 160 dpi. <code>sp</code> es la misma unidad de base, pero aumentada en función del tamaño de letra preferido por el usuario (se trata de un píxel independiente de la escala). Por tanto, debes utilizar esta unidad de medida para definir el tamaño de letra (pero no para tamaños de diseños).</p>
+
+<p>Por ejemplo, al especificar un espacio entre dos vistas, debes utilizar <code>dp</code> en lugar de <code>px</code>:</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>Al especificar el tamaño de letra, debes usar siempre <code>sp</code>:</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">Cómo proporcionar mapas de bits alternativos</h2>
+
+<p>Dado que Android se ejecuta en dispositivos con diferentes densidades de pantalla, siempre debes proporcionar tus recursos de mapas de bits adaptados a los conjuntos de densidades generalizados: baja, media, alta y muy alta. De este modo, podrás conseguir un rendimiento y una calidad gráfica óptimos en todas las densidades de pantalla.</p>
+
+<p>Para generar estas imágenes, debes empezar con tu recurso genérico en formato vectorial y generar las imágenes para cada densidad con la siguiente escala de tamaños:</p>
+
+<p><ul>
+  <li><code>xhdpi</code>: 2,0
+  <li><code>hdpi</code>: 1,5
+  <li><code>mdpi</code>: 1.0 (base)
+  <li><code>ldpi</code>: 0,75
+</ul></p>
+
+<p>Esto significa que si generas una imagen de 200 x 200 para dispositivos <code>xhdpi</code>, debes generar el mismo recurso en 150 x 150 para <code>hdpi</code>, en 100 x 100 para <code>mdpi</code> y, por último, una imagen de 75 x 75 para dispositivos <code>ldpi</code>.</p>
+
+<p>A continuación, sitúa los archivos de imagen generados en el subdirectorio adecuado en <code>res/</code> y el sistema seleccionará el archivo correspondiente automáticamente en función de la densidad de la pantalla del dispositivo en el que se esté ejecutando la aplicación:</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>Por tanto, cada vez que hagas referencia a <code>&#64;drawable/awesomeimage</code>, el sistema seleccionará el mapa de bits adecuado en función de los puntos por pulgada de la pantalla.</p>
+
+<p>Para consultar más sugerencias y directrices sobre cómo crear recursos de iconos para tu aplicación, consulta la sección <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Directrices para diseñar iconos</a>.</p>
+
diff --git a/docs/html-intl/es/training/multiscreen/screensizes.jd b/docs/html-intl/es/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..9a971d1
--- /dev/null
+++ b/docs/html-intl/es/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=Cómo admitir varios tamaños de pantalla
+parent.title=Cómo diseñar aplicaciones para varias pantallas
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Cómo admitir varias densidades de pantalla
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">Cómo utilizar los valores "wrap_content" y "match_parent"</a></li>
+  <li><a href="#TaskUseRelativeLayout">Cómo utilizar RelativeLayout</a></li>
+  <li><a href="#TaskUseSizeQuali">Cómo utilizar calificadores de tamaño</a></li>
+  <li><a href="#TaskUseSWQuali">Cómo utilizar el calificador de ancho más pequeño</a></li>
+  <li><a href="#TaskUseAliasFilters">Cómo utilizar alias de diseño</a></li>
+  <li><a href="#TaskUseOriQuali">Cómo utilizar calificadores de orientación</a></li>
+  <li><a href="#TaskUse9Patch">Cómo utilizar mapas de bits de la clase NinePatch</a></li>
+</ol>
+
+<h2>También puedes consultar:</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
+</ul>
+
+<h2>¡Pruébalo!</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>En esta sección se explica cómo admitir varios tamaños de pantalla. Para ello, sigue estos pasos:</p>
+<ul> 
+  <li>Asegúrate de que el diseño se haya ajustado correctamente al tamaño de la pantalla.</li> 
+  <li>Configura la pantalla con el diseño de interfaz adecuado.</li> 
+  <li>Asegúrate de aplicar el diseño adecuado a la pantalla correspondiente.</li>
+  <li>Utiliza el mapa de bits con la escala adecuada.</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">Cómo utilizar los valores "wrap_content" y "match_parent"</h2> 
+
+<p>Para garantizar que el diseño es flexible y que se adapta a varios tamaños de pantalla, debes utilizar los valores <code>"wrap_content"</code> y <code>"match_parent"</code> para la altura y el ancho de algunos componentes de la vista. Si utilizas <code>"wrap_content"</code>, el ancho o la altura de la vista se establece en el tamaño mínimo necesario para adaptar el contenido a esta vista, mientras que <code>"match_parent"</code> (también conocido como <code>"fill_parent"</code> antes del nivel 8 del API) provoca que el componente se amplíe hasta coincidir con el tamaño de la vista principal.</p>
+
+<p>Al utilizar los valores de tamaño <code>"wrap_content"</code> y <code>"match_parent"</code> en lugar de los tamaños predefinidos, las vistas pueden utilizar únicamente el espacio requerido para esa vista o ampliarse hasta rellenar el espacio disponible respectivamente. Por ejemplo:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>Observa cómo se utilizan en el ejemplo los valores <code>"wrap_content"</code> y <code>"match_parent"</code> para los tamaños de los componentes en lugar de dimensiones específicas. Esto permite que el diseño se adapte correctamente a diferentes tamaños y orientaciones de la pantalla.</p>
+
+<p>Por ejemplo, esta es la apariencia del diseño en modo horizontal y vertical. Ten en cuenta que los tamaños de los componentes se adaptan automáticamente a la altura y al ancho:</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>Figura 1.</strong> La aplicación de ejemplo News Reader en modo vertical (izquierda) y horizontal (derecha)</p>
+
+
+<h2 id="TaskUseRelativeLayout">Cómo utilizar RelativeLayout</h2> 
+
+<p>Puedes crear diseños de un cierto nivel de complejidad con instancias anidadas de <PH>{@link android.widget.LinearLayout}</PH> y combinaciones de los valores de tamaño <code>"wrap_content"</code> y <code>"match_parent"</code>. Sin embargo, <PH>{@link android.widget.LinearLayout}</PH> no te permite controlar con precisión las relaciones espaciales de las vistas secundarias; las vistas de <PH>{@link android.widget.LinearLayout}</PH> simplemente se alinean en paralelo. Si quieres orientar las vistas secundarias de una forma que no sea una línea recta, a menudo la mejor solución es utilizar <PH>{@link android.widget.RelativeLayout}</PH>que te permite especificar el diseño según las relaciones espaciales entre los componentes. Por ejemplo, puedes alinear una vista secundaria en el lateral izquierdo y otra vista en el lateral derecho de la pantalla.</p>
+
+<p>Por ejemplo:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>La figura 2 indica cómo se muestra este diseño en una pantalla QVGA.</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>Figura 2.</strong> Captura de pantalla de una pantalla QVGA (pantalla pequeña)</p>
+
+<p>La figura 3 indica cómo se muestra este diseño en una pantalla más grande.</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>Figura 3.</strong> Captura de pantalla de una pantalla WSVGA (pantalla grande)</p>
+
+<p>Ten en cuenta que aunque el tamaño de los componentes es diferente, las relaciones espaciales se mantienen según se ha especificado con <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p>
+
+ 
+<h2 id="TaskUseSizeQuali">Cómo utilizar calificadores de tamaño</h2> 
+
+<p>Hay mucha diferencia entre un diseño flexible y un diseño relativo como el que se ha utilizado en las secciones anteriores. Aunque ambos diseños se adaptan a diferentes pantalla estirando el espacio dentro de los componentes y alrededor de los mismos, puede que no ofrezcan la mejor experiencia de usuario para cada tamaño de pantalla. Por tanto, tu aplicación no solo debe implementar los diseños flexibles, sino que también debe ofrecer varios diseños alternativos para diferentes configuraciones de pantalla. Para ello, se utilizan <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">calificadores de configuración</a>, que permiten que el tiempo de ejecución seleccione el recurso adecuado en función de la configuración actual del dispositivo (por ejemplo, un diseño diferente para diferentes tamaños de pantalla).</p>
+
+<p>Por ejemplo, muchas aplicaciones implementan el patrón de "panel dual" para pantallas grandes (la aplicación mostraría una lista de elementos en un panel y el contenido en otro panel). Aunque los tablets y las televisiones son lo suficientemente grandes como para que los dos paneles aparezcan simultáneamente en la pantalla, las pantallas de los teléfonos tienen que mostrarlos por separado. Para implementar estos diseños, puedes utilizar los siguientes archivos:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, diseño de panel único (predeterminado):
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>, diseño de panel dual:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>Observa el calificador <code>large</code> en el nombre de directorio del segundo diseño. Este diseño se seleccionará en dispositivos con pantallas clasificadas como grandes (por ejemplo, tablets de 7" y superiores). El otro diseño (sin calificadores) se seleccionará en el caso de dispositivos más pequeños.</p>
+
+
+<h2 id="TaskUseSWQuali">Cómo utilizar el calificador de ancho mínimo</h2>
+
+<p>Una de las dificultades a las que se enfrentaron los desarrolladores con los dispositivos Android anteriores a la versión 3.2 fue el contenedor de tamaño de pantalla "grande". Algunos ejemplos de este tipo de dispositivo son el tablet Dell Streak, el tablet Galaxy Tab original y los tablets de 7" en general. Sin embargo, es posible que muchas aplicaciones quieran mostrar varios diseños para diferentes dispositivos de esta categoría (por ejemplo, para dispositivos de 5" y de 7"), aunque todos estos dispositivos se consideren de pantalla grande. Por esta razón, Android introdujo el calificador de "ancho mínimo" (entre otros) en Android 3.2.</p>
+
+<p>Este calificador te permite mostrar contenido en pantallas que tengan un ancho mínimo determinado en píxeles independientes de la densidad. Por ejemplo, el tablet típico de 7" tiene un ancho mínimo de 600 dp, por lo que si quieres que la interfaz de usuario sea de panel dual en esta pantalla (y una única lista en pantallas más pequeñas), puedes utilizar los mismos dos diseños de la sección anterior para los diseños de panel único y de panel dual, solo que en lugar de utilizar el calificador de tamaño <code>large</code>, debes utilizar <code>sw600dp</code> para indicar que el diseño de panel dual se utiliza con las pantallas cuyo ancho mínimo sea de 600 dp:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, diseño de panel único (predeterminado):
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>, diseño de panel dual:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>Esto significa que los dispositivos cuyo ancho mínimo sea igual o superior a 600 dp utilizarán el diseño <code>layout-sw600dp/main.xml</code> (panel dual), mientras que las pantallas más pequeñas utilizarán el diseño <code>layout/main.xml</code> (panel único).</p>
+
+<p>No obstante, esto no funcionará en los dispositivos anteriores a Android 3.2 porque no reconocen <code>sw600dp</code> como calificador de tamaño, por lo que también tendrás que seguir utilizando el calificador <code>large</code>. Por tanto, debes tener un archivo con el nombre <code>res/layout-large/main.xml</code> idéntico a <code>res/layout-sw600dp/main.xml</code>. En la siguiente sección, obtendrás información sobre una técnica que te permite evitar que se dupliquen los archivos de diseños.</p>
+
+
+<h2 id="TaskUseAliasFilters">Cómo utilizar alias de diseño</h2> 
+
+<p>El calificador de ancho mínimo solo está disponible en Android 3.2 o superior. Por tanto, tendrás que seguir utilizando los contenedores de tamaño abstractos (pequeño, normal, grande y extragrande) para que sean compatibles con versiones anteriores. Por ejemplo, si quieres que tu interfaz de usuario sea de panel único en teléfonos pero multipanel en tablets de 7", televisiones y otros dispositivos grandes, tendrás que utilizar los siguientes archivos:</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> diseño de panel único,</li>
+<li><code>res/layout-large:</code> diseño multipanel,</li>
+<li><code>res/layout-sw600dp:</code> diseño multipanel.</li>
+</ul></p>
+
+<p>Los dos últimos archivos son idénticos porque uno de ellos se utilizará con dispositivos Android 3.2 y el otro con tablets y televisiones que utilicen versiones anteriores de Android.</p>
+
+<p>Para evitar la duplicación del mismo archivo para tablets y televisiones (así como todos los problemas que esto conlleva), puedes utilizar archivos alias. Por ejemplo, puedes establecer los siguientes diseños:</p>
+
+<ul>
+<li><code>res/layout/main.xml</code>: diseño de panel único,</li>
+<li><code>res/layout/main_twopanes.xml</code>: diseño de panel dual.</li>
+</ul>
+
+<p>Añade estos dos archivos:</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>Estos dos últimos archivos tienen el mismo contenido, pero en realidad no definen el diseño. Solo configuran <PH>{@code main}</PH> para que sea un alias de <PH>{@code main_twopanes}</PH>. Como los archivos tienen selectores <code>large</code> y <code>sw600dp</code>, se aplican a tablets y a televisiones independientemente de la versión de Android (las televisiones y los tablets anteriores a la versión 3.2 utilizarán
+<PH>{@code large}</PH>y las televisiones y los tablets posteriores a la versión 3.2 utilizarán <code>sw600dp</code>).</p>
+
+
+<h2 id="TaskUseOriQuali">Cómo utilizar calificadores de orientación</h2> 
+
+<p>Aunque algunos diseños se pueden utilizar tanto en modo horizontal como vertical, la mayoría de ellos pueden beneficiarse de los ajustes. A continuación, se indica cómo se comporta el diseño según cada tamaño y orientación de la pantalla en la aplicación de ejemplo News Reader:</p>
+
+<p><ul>
+<li><b>pantalla pequeña, vertical:</b> panel único con logotipo,</li>
+<li><b>pantalla pequeña, horizontal:</b> panel único con logotipo,</li>
+<li><b>tablet de 7", vertical:</b> panel único con barra de acciones,</li>
+<li><b>tablet de 7", horizontal:</b> panel dual ancho con barra de acciones,</li>
+<li><b>tablet de 10", vertical:</b> panel dual estrecho con barra de acciones,</li>
+<li><b>tablet de 10", horizontal:</b> panel dual ancho con barra de acciones,</li>
+<li><b>televisión, horizontal:</b> panel dual ancho con barra de acciones.</li>
+</ul></p>
+
+<p>Cada uno de estos diseños se establecen en un archivo XML en el directorio <code>res/layout/</code>. Para definir posteriormente las diferentes configuraciones de pantalla, la aplicación utiliza alias de diseño para asignarlos a cada configuración:</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>Una vez que se hayan definido todos los diseños posibles, solo se debe asignar el diseño adecuado a cada configuración a través de calificadores de configuración. Ahora ya puedes utilizar la técnica de los alias de diseño:</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">Cómo utilizar mapas de bits de la clase NinePatch</h2>
+
+<p>Admitir diferentes tamaños de pantalla normalmente implica que las fuentes de imagen también deben poder adaptarse a varios tamaños. Por ejemplo, un fondo de botón debe adaptarse a cualquier forma de botón a la que se aplique.</p>
+
+<p>Si utilizas imágenes sencillas en componentes que pueden cambiar de tamaño, observarás rápidamente que los resultados no es que sean precisamente impresionantes, ya que las imágenes se estirarán o estrecharán. La solución es utilizar mapas de bits de la clase NinePatch, que son archivos PNG con un formato especial que indican las áreas que se pueden y no se pueden estirar.</p>
+
+<p>Por tanto, al diseñar mapas de bits que se vayan a utilizar en componentes con tamaño variable, utiliza siempre mapas de bits de la clase NinePatch. Para convertir un mapa de bits en uno de la clase NinePatch, puedes empezar con una imagen normal (consulta la figura 4, que se ha ampliado cuatro veces para obtener una mayor claridad).</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>Figura 4.</strong> <code>button.png</code></p>
+
+<p>A continuación, puedes pasar a la utilidad <ode
+href="{@docRoot}tools/help/draw9patch.html"><code>draw9patch</code></a> del SDK (que se localiza en el directorio <code>tools/</code>) en la que puedes marcar las áreas que se deben estirar dibujando píxeles a lo largo de los bordes superior e izquierdo. También puedes marcar el área que debe incluir el contenido dibujando píxeles a lo largo de los bordes inferior y derecho, como se muestra en la figura 5.</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>Figura 5.</strong> <code>button.9.png</code></p>
+
+<p>Observa los píxeles de color negro situados junto a los bordes. Los que aparecen en los bordes superior e izquierdo indican los lugares en los que se puede estirar la imagen, mientras que los que aparecen en los bordes inferior y derecho indican dónde se debe situar el contenido.</p>
+
+<p>Además, observa la extensión <code>.9.png</code>. Debes utilizar esta extensión, ya que, de este modo, el marco detecta que se trata de una imagen de la clase NinePatch, en lugar de una imagen PNG normal.</p>
+
+<p>Cuando aplicas este fondo a un componente (definiendo <code>android:background="&#64;drawable/button"</code>), el marco estira la imagen de forma adecuada para adaptarla al botón, como se muestra en varios tamaños de la figura 6.</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>Figura 6.</strong> Botón que utiliza la clase NinePatch <code>button.9.png</code> en varios tamaños</p>
+
diff --git a/docs/html-intl/ja/guide/publishing/app-signing.jd b/docs/html-intl/ja/guide/publishing/app-signing.jd
new file mode 100644
index 0000000..2d2acfa
--- /dev/null
+++ b/docs/html-intl/ja/guide/publishing/app-signing.jd
@@ -0,0 +1,336 @@
+page.title=アプリケーションへの署名
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>署名の概略</h2>
+
+<ul>
+<li>Android アプリケーションはすべて<em>署名する必要がある</em></a></li>
+<li>自己署名キーで署名可能</li>
+<li>アプリケーションの署名方法は重要です。このドキュメントをよくお読みください</li>
+<li>開発プロセスの初期段階で署名戦略を決定します</li>
+</ul>
+
+<h2>このドキュメントの内容</h2>
+
+<ol>
+<li><a href="#overview">概要</a></li>
+<li><a href="#strategies">署名戦略</a></li>
+<li><a href="#setup">署名の基本設定</a></li>
+<li><a href="#debugmode">デバッグ モードでの署名</a></li>
+<li><a href="#releasemode">公開リリースへの署名</a>
+    <ol>
+    <li><a href="#releasecompile">リリース向けのコンパイル</a></li>
+    <li><a href="#cert">適切な秘密鍵の取得</a></li>
+    <li><a href="#signapp">アプリケーションの署名</a></li>
+    <li><a href="#ExportWizard">Eclipse ADT によるコンパイルと署名</a></li>
+    </ol>
+</li>
+<li><a href="#secure-key">秘密鍵のセキュリティ設定</a></li>
+
+</ol>
+
+<h2>関連項目</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/versioning.html">アプリケーションのバージョニング</a></li>
+<li><a href="{@docRoot}tools/publishing/preparing.html">公開の準備</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>このドキュメントでは、Android アプリケーションを携帯端末ユーザーに公開する前に署名する方法について説明します。</p>
+
+<h2 id="overview">概要</h2>
+
+<p>Android システムでは、インストールするすべてのアプリケーションに対してデジタル署名されて証明書を必要とします。この証明書の秘密鍵は、アプリケーションのデベロッパーが所持するものです。Android システムは証明書をアプリケーションの作成者の識別手段、およびアプリケーション間の信頼関係の確立手段として使用します。証明書は、ユーザーがどのアプリケーションをインストールできるかを制御するものではありません。証明書は認証機関によって署名される必要はありません。通常の Android アプリケーションは自己署名証明書を使用して正常に機能します。</p>
+
+<p>Android アプリケーションの署名について、次の点を理解することが重要です:</p>
+
+<ul>
+  <li>すべてのアプリケーションは<em>署名される必要があります</em>。署名されていないアプリケーションはシステムにインストールされません。</li>
+  <li>アプリケーションの署名に、自己署名証明書を使用できます。認証機関は不要です。</li>
+  <li>アプリケーションをエンド ユーザーにリリースする準備ができたら、適切な秘密鍵を使用してアプリケーションに署名する必要があります。SDK ツールで生成されたデバッグ キーで署名されたアプリケーションは、公開できません。 
+  </li>
+  <li>システムが署名証明書の有効期限を確認するのは、インストール時のみです。アプリケーションのインストール後に署名者証明書が期限切れになった場合、アプリケーションは正常な動作を継続します。</li>
+  <li>標準ツールである Keytool と Jarsigner を使用してキーを生成し、アプリケーションの .apk ファイルに署名できます。</li>
+</ul>
+
+<p>Android システムは、適切に署名されていないアプリケーションをインストールせず、実行もしません。この規則は、実際のデバイスでもエミュレータでも、Android システムが実行されるすべての状況で適用されます。このため、エミュレータまたはデバイス上で実行またはデバッグする前に、アプリケーションの署名を設定する必要があります。</p>
+
+<p>Android SDK ツールは、デバッグ時のアプリケーション署名を支援します。「ADT Plugin for Eclipse」と「Ant ビルド ツール」では両方とも、<em>デバッグ モード</em>と<em>リリース モード</em>の 2 種類の署名モードを利用できます。 
+
+<ul>
+<li>開発およびテスト中は、デバッグ モードでコンパイルできます。デバッグ モードでは、ビルド ツールは JDK に付属の Keytool ユーティリティを使用して、キーストアとキーを既知のエイリアスとパスワードで作成します。コンパイルのたびに、ツールはデバッグ キーを使用してアプリケーションの .apk ファイルに署名します。パスワードは既知のものなので、コンパイルのたびにツールにキーストア/キー パスワードを入力する必要はありません。</li>
+
+<li>アプリケーションをリリースする準備ができたら、リリース モードでコンパイルして、.apk に<span style="color:red">秘密鍵</span>で署名する必要があります。次の 2 通りの方法があります:
+  <ul>
+    <li>Keytool と Jarsigner をコマンド ラインで使用する方法。このアプローチでは、まずアプリケーションを<em>署名されていない</em> .apk にコンパイルします。次に、Jarsigner(または類似のツール)を使用して秘密鍵で .apk に手動で署名します。適切な秘密鍵を所持していない場合は、Keytool を手動で実行して独自のキーストア/キーを生成し、Jarsigner でアプリケーションに署名できます。</li>
+    <li>ADT Export Wizard を使用する方法。ADT プラグイン搭載の Eclipse を使用して開発している場合、Export Wizard を使用してアプリケーションをコンパイルし、秘密鍵を生成して(必要な場合)、.apk に署名できます。この作業をすべて Export Wizard を使用して 1 つのプロセスで実行できます。
+    </li>
+  </ul>
+</li>
+</ul>
+
+<h2 id="strategies">署名戦略</h2>
+
+<p>アプリケーションの署名は、開発アプローチに一部影響します。特に、複数のアプリケーションをリリースする予定の場合、高い影響を与えます。 </p>
+
+<p>一般に、すべてのデベロッパーに推奨される戦略は、アプリケーションの予期される使用期間を通じて同じ証明書ですべてのアプリケーションに署名することです。このようにするには、複数の理由があります: </p>
+
+<ul>
+<li>アプリケーションのアップグレード - アプリケーションのアップグレードをリリースするとき、ユーザーが新バージョンにシームレスにアップグレードできるように、アップグレードされたアプリケーションにも同じ証明書で署名します。システムがアプリケーションのアップデートをインストールする際は、新バージョンの証明書のいずれかが旧バージョンの証明書と一致する場合、システムがアップデートを許可します。一致する証明書を使用せずに署名する場合は、アプリケーションに別のパッケージ名を割り当てる必要があります。この場合、新しいバージョンがまったく新しいアプリケーションとしてインストールされます。 </li>
+
+<li>アプリケーションのモジュール性 - Android システムでは、アプリケーションが要求する場合、同じ証明書で署名されたアプリケーションを同じプロセスで実行できます。これにより、システムはこれらを単一のアプリケーションとして取り扱います。このようにすればアプリケーションをモジュールとして配備でき、ユーザーは必要に応じて各モジュールを個別に更新できます。</li>
+
+<li>許可によるコード/データ共有 - Android システムでは、署名ベースの権限付与を実施しているため、アプリケーションは指定された証明書で署名されている別のアプリケーションに機能を提供できます。同じ証明書で複数のアプリケーションに署名し、署名に基づいた権限のチェックを行うことで、アプリケーションはコードとデータを安全な方法で共有できます。 </li>
+
+</ul>
+
+<p>署名戦略を決定する際のもう 1 つの重要な検討事項として、アプリケーションの署名に使用するキーの有効期間の設定方法があります。</p>
+
+<ul>
+<li>アプリケーションのアップグレードをサポートするには、キーの有効期間は、アプリケーションの予定される試用期間以上である必要があります。有効期間は、25年以上であることが推奨されます。キーの有効期間が切れた場合、ユーザーはアプリケーションの新バージョンにシームレスにアップグレードできなくなります。</li>
+
+<li>同じキーで複数の異なるアプリケーションに署名する場合、キーの有効期間が、今後のアプリケーション スイートに追加される依存アプリケーションを含め、<em>すべてのアプリケーションのすべてのバージョンの</em>予定される使用期間を超えることを確認してください。 </li>
+
+<li>アプリケーションを Android マーケットに公開する予定の場合、アプリケーションの署名に使用するキーの有効期間を、2033 年 10 月 22 日以降の期限に設定する必要があります。マーケット サーバーは、新バージョンが公開されたときにユーザーがマーケット アプリケーションをシームレスにアップグレードできるよう、この要件を義務付けています。 </li>
+</ul>
+
+<p>アプリケーションの設計時にこれらの点を考慮し、アプリケーションの署名に<a href="#cert">適切な証明書</a>を使用してください。 </p>
+
+<h2 id="setup">署名の基本設定</h2>
+
+<p>キーストアとデバッグ キーの生成をサポートするため、SDK ビルド ツールで Keytool を使用できることを初めに確認してください。たいていの場合、「JAVA_HOME」環境変数を設定して適切な JDK を参照させることで、SDK ビルド ツールで Keytool を認識できます。または、JDK バージョンの Keytool を PATH 変数に追加しても認識できます。</p>
+
+<p>Linux バージョンに付属されている GNU Java コンパイラで開発している場合は、gcj バージョンではなく、JDK バージョンの Keytool を使用していることを確認してください。Keytool が既に PATH に指定されている場合は、<code>/usr/bin/keytool</code> の symlink を指していることがあります。この場合は、symlink ターゲットが JDK の Keytool を指していることを確認してください。</p>
+
+<p>アプリケーションを公開する場合は、Jarsigner ツールをコンピュータで使用できるようにする必要があります。Jarsigner と Keytool の両方が JDK によって提供されます。 </p>
+
+<h2 id="debugmode">デバッグ モードでの署名</h2>
+
+<p>Android ビルド ツールにはデバッグ署名モードがあり、アプリケーションの開発とデバッグがスムーズに行えます。また、.apk をエミュレータまたはデバイスにインストールする際の、署名に対する Android システム要件を満たします。デバッグモードでは、SDK ツールは Keytool を呼び出してデバッグ キーストアとキーを作成します。</p>
+
+<p>SDK ツールは事前に指定された名前とパスワードを使用してデバッグ キーストア/キーを作成します。</p>
+<ul>
+<li>キーストア名 – 「debug.keystore」</li>
+<li>キーストアのパスワード – 「android」</li>
+<li>キーのエイリアス – 「androiddebugkey」</li>
+<li>キーのパスワード – 「android」</li>
+<li>CN – 「CN=Android Debug,O=Android,C=US」</li>
+</ul></p>
+
+<p>必要に応じて、デバッグ キーストア/キーの場所および名前を変更できます。また、自分で作成したデバッグ キーストア/キーを指定することもできます。Eclipse/ADT で、[[]<strong>ウィンドウ(Windows)</strong>] &gt; [[]<strong>設定(Prefs)</strong>] &gt; [[]<strong>Android</strong>] &gt; [[]<strong>ビルド(Build)</strong>] を選択します。ただし、自分で作成したデバッグ キーストア/キーは、デフォルトのデバッグ キー(上述)と同じキーストア/キー名とパスワードを使用する必要があります。</p>
+
+<p class="note"><strong>注:</strong> デバッグ証明書で署名した場合は、アプリケーションを<em>公開できません</em>。</p>
+
+<h3>Eclipse ユーザー</h3>
+
+<p>Eclipse/ADT で開発し、Keytool を上記のように設定してある場合は、デバッグモードにおける署名はデフォルトで有効になっています。アプリケーションを実行またはデバッグするときに、ADT は .apk にデバッグ証明書で署名し、エミュレータにインストールします。ADT が Keytool にアクセスできる場合は、ユーザーは特に操作する必要はありません。</p>
+
+<h3>Ant ユーザー</h3>
+
+<p>Ant を使用して .apk ファイルを構築する場合、デバッグ署名モードは <code>debug</code> オプションを使用することで有効になります(<code>android</code> ツールで生成された <code>build.xml</code> ファイルを使用していることが前提となります)。<code>ant debug</code> を実行してアプリケーションをコンパイルする際、ビルド スクリプトはキーストア/キーを生成し、.apk に署名します。ユーザーは操作する必要はありません。詳細は、<a href="{@docRoot}guide/developing/other-ide.html#DebugMode">その他の統合開発環境での開発: デバッグモードにおけるビルド </a> をお読みください。</p>
+
+
+<h3 id="debugexpiry">デバッグ証明書の有効期限</h3>
+
+<p>デバッグ モード(Eclipse/ADT と Ant ビルドのデフォルト)でのアプリケーション署名に使用した自己署名証明書には、作成日から 365 日の有効期限が設定されます。</p>
+
+<p>証明書の期限が切れると、ビルド エラーが発生します。Ant ビルドでは、エラーは次のようになります:</p>
+
+<pre>debug:
+[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
+[exec] Debug Certificate expired on 8/4/08 3:43 PM</pre>
+
+<p>Eclipse/ADT では、Android コンソールに同様のエラーが表示されます。</p>
+
+<p>この問題を解決するには、<code>debug.keystore</code> ファイルを削除します。AVD のデフォルトの格納場所は、OS X と Linux の場合は <code>~/.android/avd</code>、Windows XP の場合は <code>C:\Documents and Settings\<user>\.android\</code>、Windows Vista の場合は <code>C:\Users\<user>\.android\</code> です。</p>
+
+
+<p>次にビルドを行うと、ビルド ツールは新しいキーストアとデバッグ キーを再度生成します。</p>
+
+<p>開発コンピュータがグレゴリオ暦以外のロケールを使用している場合、ビルド ツールが誤って期限切れのデバッグ証明書を生成することがあります。このため、アプリケーションをコンパイルしようとするとエラーが発生します。解決策については、トラブルシューティング トピックの <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">ビルド ツールが期限切れのデバッグ証明書を生成するため、アプリケーションがコンパイルできない</a> をご覧ください。 </p>
+
+
+<h2 id="releasemode">公開リリースへの署名</h2>
+
+<p>アプリケーションを他のユーザーに公開する準備ができたら、次のことを行う必要があります:</p>
+<ol>
+  <li>アプリケーションをリリース モードでコンパイルする</li>
+  <li>適切な秘密鍵を取得する</li>
+  <li>アプリケーションに秘密鍵で署名する</li>
+</ol>
+
+<p>以下のセクションでは、これらの手順を実行する方法について説明します。</p>
+
+<p>ADT プラグイン搭載の Eclipse を使用している場合、これらの手順を実行する代わりに Export Wizard を使用して .apk をコンパイルして秘密鍵で署名できます。Export Wizard では、処理過程で新しいキーストアと秘密鍵の生成も可能です。<a href="#ExportWizard">Eclipse ADT によるコンパイルと署名</a>を参考にコンパイルを行ってください。</p>
+
+
+<h3 id="releasecompile">リリース向けのコンパイル</h3>
+
+<p>アプリケーションのリリースを準備するには、リリース モードでコンパイルする必要があります。リリース モードでは、Android ビルド ツールはアプリケーションを通常どおりにコンパイルしますが、デバッグ キーで署名しません。</p>
+
+<p class="warning"><strong>注:</strong> 署名されていないアプリケーション、またはデバッグ キーで署名されたアプリケーションはリリースできません。</p>
+
+<h4>Eclipse ユーザー</h4>
+
+<p><em>署名されていない</em> .apk ファイルを Eclipse からエクスポートするには、パッケージ エクスプローラー(Package Explorer)でプロジェクトを右クリックして、[[]<strong>Android ツール(Android Tools)</strong>] &gt; [[]<strong>署名されていないアプリケーション パッケージのエクスポート(Export Unsigned Application Package)</strong>] を選択します。次に、署名されていない .apk ファイルの場所を指定します(または、<code>AndroidManifest.xml</code> ファイルを Eclipse で開き、[[]<em>概要(Overview)</em>] タブを開いて [[]<strong>署名されていない .apk のエクスポート(Export an unsigned .apk)</strong>] をクリックします)。</p>
+
+<p>Export Wizard では、コンパイルと署名の手順を一緒に処理できます。<a href="#ExportWizard">Eclipse ADT によるコンパイルと署名</a>をご覧ください。</p>
+
+<h4>Ant ユーザー</h4>
+
+<p>Ant を使用している場合は、必要な作業は Ant コマンドでビルド ターゲットとして「release」を指定するだけです。たとえば、Ant を build.xml ファイルがあるディレクトリから実行している場合、コマンドは次のようになります:</p>
+
+<pre>$ ant release</pre>
+
+<p>ビルド スクリプトは、アプリケーション .apk を署名せずにコンパイルします。</p>
+
+
+<h3 id="cert">適切な秘密鍵の取得</h3>
+
+<p>アプリケーションの署名を準備するには、まず署名に使用する適切な秘密鍵があることを確認することが必要です。適切な秘密鍵とは、次の条件を満たすものです:</p>
+
+<ul>
+<li>自分が所有している。</li>
+<li>アプリケーションで識別される、個人、法人、または組織の実体を表す。</li>
+<li>アプリケーションまたはアプリケーション スイートの予期される使用期間を超える有効期間を持っている。有効期間として、25 年以上を推奨します。 
+<p>アプリケーションを Android マーケットに公開する予定の場合、2033 年 10 月 22 日までの有効期間が必要です。有効期間がこの日付以前に期限切れになるキーで署名されたアプリケーションは、アップロードできません。 
+</p></li>
+<li>Android SDK ツールで生成されたデバッグ キーではない。 </li>
+</ul>
+
+<p>自己署名されたキーを使用できます。適切なキーがない場合、Keytool を使用して生成する必要があります。<a href="#setup">基本設定</a>で説明した手順に従って、Keytool を使用できるようにしてください。</p>
+
+<p>Keytool で自己署名キーを生成するには、<code>keytool</code> コマンドを使用して以下に示すオプション(および、必要に応じてその他のオプション)を渡します。 </p>
+
+<p class="warning"><strong>注:</strong> Keytool を実行する前に、<a href="#secure-key">秘密鍵のセキュリティ設定</a>を読んで、キーのセキュリティを確保する方法と、自分とユーザーにとってセキュリティ確保が重要な理由を理解してください。特に、自分のキーを生成する場合、キーストアとキーの両方に強力なパスワードを選択する必要があります。</p>
+
+<table>
+<tr>
+<th>Keytool のオプション</th>
+<th>説明</th>
+</tr>
+<tr>
+<td><code>-genkey</code></td><td>キー ペアを生成します(公開キーと秘密鍵)。</td>
+</tr>
+<tr>
+<td><code>-v</code></td><td>詳しいメッセージを出力する。</td>
+</tr>
+<tr>
+<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>秘密鍵を含むキーストアの名前。</td>
+</tr>
+<tr>
+<td><code>-storepass &lt;password&gt;</code></td><td><p>キーストアのパスワード。</p><p>セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Keytool からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。</p></td>
+</tr>
+<tr>
+<td><code>-alias &lt;alias_name&gt;</code></td><td>キーのエイリアス。</td>
+</tr>
+<tr>
+<td><code>-keyalg &lt;alg&gt;</code></td><td>キーの生成時に使用する暗号化アルゴリズム。DSA と RSA の 2 つをサポートしています。</td>
+</tr>
+<tr>
+<td><code>-dname &lt;name&gt;</code></td><td><p>キーの作成者を識別する、識別名。値は、自己署名証明書の発行者およびサブジェクト フィールドとして使用されます。 </p><p>このオプションはコマンド ラインで指定する必要はありません。指定しなかった場合、Jarsigner からそれぞれの識別名フィールド(CN、OU など)の入力が求められます。</p></td>
+</tr>
+<tr>
+<td><code>-validity &lt;valdays&gt;</code></td><td><p>キーの有効期間(日数)。 </p><p><strong>注:</strong> 10000 以上の値を推奨します。</p></td>
+</tr>
+<tr>
+<td><code>-keypass &lt;password&gt;</code></td><td><p>キーのパスワード。</p>
+<p>セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Keytool からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。</p></td>
+</tr>
+</table>
+
+
+<p>秘密鍵を生成する Keytool コマンドの例を示します。</p>
+
+<pre>$ keytool -genkey -v -keystore my-release-key.keystore 
+-alias alias_name -keyalg RSA -validity 10000</pre>
+
+<p>上記のコマンド例を実行すると、Keytool からキーストアとキーのパスワードと、キーの識別名フィールドの指定が求められます。キーストアが <code>my-release-key.keystore</code> というファイルとして生成されます。キーストアとキーは、入力したパスワードで保護されます。キーストアには 1 つのキーが含まれ、10000 日間有効です。エイリアスは、後で使用する名前で、アプリケーションに署名するときにこのキーストアを参照する名前です。 </p>
+
+<p>Keytool の詳細は <a
+href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security">http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security</a> のドキュメント(英語のみ)をご覧ください。</p>
+
+
+<h3 id="signapp">アプリケーションの署名</h3>
+
+<p>リリースする .apk に実際に署名する準備ができたら、Jarsigner ツールを使用して署名できます。<a href="#setup">基本設定</a>で説明したように、Jarsigner をコンピュータで使用できることを確認してください。また、秘密鍵を含むキーストアがあることも確認してください。</p>
+
+<p>アプリケーションに署名するには、Jarsigner を実行して、アプリケーションの .apk と、.apk の署名に使用する秘密鍵を含むキーストアの両方を参照します。以下の表では、使用できるオプションを示します。 <p>
+
+<table>
+<tr>
+<th>Jarsigner のオプション</th>
+<th>説明</th>
+</tr>
+<tr>
+<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>秘密鍵を含むキーストアの名前。</td>
+</tr>
+<tr>
+<td><code>-verbose</code></td><td>詳しいメッセージを出力する。</td>
+</tr>
+<tr>
+<td><code>-storepass &lt;password&gt;</code></td><td><p>キーストアのパスワード。 </p><p>セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Jarsigner からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。</p></td>
+</tr>
+<tr>
+<td><code>-keypass &lt;password&gt;</code></td><td><p>秘密鍵のパスワード。 </p><p>セキュリティ上の注意として、安全なコンピュータで作業している場合を除き、このオプションをコマンド ラインに指定しないでください。指定しなかった場合、Jarsigner からパスワードの入力が求められます。このため、パスワードはシェルの履歴に記録されません。</p></td>
+</tr>
+</table>
+
+<p>Jarsigner を使用して <code>my_application.apk</code> というアプリケーション パッケージに署名する例を、上記で作成したキーストアを使用して示します。 
+</p>
+
+<pre>$ jarsigner -verbose -keystore my-release-key.keystore 
+my_application.apk alias_name</pre>
+
+<p>上記のコマンドを実行すると、Jarsigner からキーストアとキーのパスワードの入力が求められます。.apk がその場で変更され、.apk は署名されます。.apk に別のキーで複数回署名できます。</p>
+
+<p>.apk が署名されたことを確認するには、次のようなコマンドを使用できます:</p>
+
+<pre>$ jarsigner -verify my_signed.apk</pre>
+
+<p>.apk が適切に署名されると、Jarsigner から「jar verified」と出力されます。詳細情報が必要な場合は、次のコマンドを使用できます。</p>
+
+<pre>$ jarsigner -verify -verbose my_application.apk</pre>
+
+<p>または、次のコマンドを使用します。</p>
+
+<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
+
+<p>上記の <code>-certs</code> オプションが付加されたコマンドでは、「CN=」行が出力され、キーの作成者が示されます。</p>
+
+<p class="note"><strong>注:</strong> 「CN=Android Debug」と出力される場合、.apk が Android SDK によって生成されたデバッグ キーで署名されたことを示しています。アプリケーションをリリースする予定の場合は、デバッグ キーではなく秘密鍵で署名する必要があります。</p>
+
+<p>Jarsigner の詳細は <a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security">http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security</a> のドキュメント(英語のみ)をご覧ください。</p>
+
+
+<h3 id="ExportWizard">Eclipse ADT によるコンパイルと署名</h3>
+
+<p>ADT 搭載 Eclipse を使用している場合、Export Wizard を使用して<em>署名済み</em> .apk をエクスポートできます(必要に応じて、新しいキーストアを作成することもできます)。Export Wizard は、Keytool と Jarsigner のすべての処理を、コマンド ラインを使用せず、グラフィカル ユーザー インターフェースで署名を実行できます。Export Wizard は Keytool と Jarsigner の両方を使用するため、上記の<a href=#setup">署名の基本設定</a>の条件を満たすコンピュータで使用できます。</p>
+
+<p>署名された .apk を作成するには、パッケージ エクスプローラー(Package Explorer)でプロジェクトを右クリックして、<strong>[[]Android ツール(Android Tools)] &gt; [[]署名済みアプリケーション パッケージのエクスポート(Export Signed Application Package)]</strong> を選択します(または、<code>AndroidManifest.xml</code> ファイルを Eclipse で開き、[[]<em>概要(Overview)</em>] タブを開いて [[]<strong>Export Wizard を使用する(Use the Export Wizard)</strong>] をクリックします)。表示されたウィンドウには、アプリケーションのエクスポート中に見つかったエラーが表示されます。エラーが見つからなかった場合は Export Wizard で処理を続行します。.apk に署名する秘密鍵の選択や、新しいキーストアと秘密鍵の作成など、アプリケーション署名のプロセスを手順を追って実行できます。</p>
+
+<p>Export Wizard が完了すると、配布可能な署名済み .apk が作成されています。</p>
+
+
+<h2 id="secure-key">秘密鍵のセキュリティ設定</h2>
+
+<p>秘密鍵のセキュリティ設定は、作成者とユーザーの両者にとって重要です。他人にキーを使用させたり、第三者が見つけて使用できるような安全ではない場所にキーストアとキーを放置したりすると、作成者とユーザー間の信頼が損なわれます。 </p>
+
+<p>他者が許可を得ずにキーを取得した場合、その人物はアプリケーションに署名して配布し、本物のアプリケーションを故意に置き換えたり破損させたりすることができます。このような人物は、身元を詐称してアプリケーションに署名して配布し、その他のアプリケーションまたはシステム自体を攻撃したり、ユーザー データを破損させたり盗み出したりすることもあります。 </p>
+
+<p>キーの有効期限が切れるまで、秘密鍵のセキュリティを常に適切に維持できるかは、デベロッパーとしての評価を左右します。キーを安全に保つためのヒントをいくつか紹介します。 </p>
+
+<ul>
+<li>キーストアとキーに強力なパスワードを選択します。</li>
+<li>Keytool でキーを生成するとき、<em></em>コマンド ラインで <code>-storepass</code> および <code>-keypass</code> オプションを指定しないようにします。指定すると、パスワードがシェル履歴に記録され、コンピュータのすべてのユーザーがアクセスできるようになります。</li>
+<li>同様に、Jarsigner でアプリケーションに署名するとき、<em></em>コマンド ラインで <code>-storepass</code> と <code>-keypass</code> オプションを指定しないようにします。 </li>
+<li>秘密鍵を誰にも与えたり貸したりせず、不正なユーザーにキーストアとキーのパスワードを知られないようにします。</li>
+</ul>
+
+<p>一般的には、キーの生成、使用、保管に関して常識的な注意を払っていれば、セキュリティを確保することができます。 </p>
\ No newline at end of file
diff --git a/docs/html-intl/ja/guide/publishing/preparing.jd b/docs/html-intl/ja/guide/publishing/preparing.jd
new file mode 100644
index 0000000..c7a2950
--- /dev/null
+++ b/docs/html-intl/ja/guide/publishing/preparing.jd
@@ -0,0 +1,158 @@
+page.title=公開の準備
+@jd:body
+
+<!--
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href=""></a></li>
+</ol>
+
+</div>
+</div>
+-->
+
+<p>アプリケーションの公開とは、アプリケーションをテストして適切にパッケージし、Android 搭載の携帯端末のユーザーが利用できる状態にすることです。</p>
+
+<p>アプリケーションを公開して Android 搭載デバイスにインストールするには、いくつかの作業を行ってアプリケーションの準備を整える必要があります。このドキュメントでは、アプリケーションのリリースを成功させるための準備における、重要なチェックポイントを説明しています。
+</p>
+
+<p>アプリケーションを Android マーケットに公開する場合は、アプリケーションの具体的な準備要件について <a
+href="{@docRoot}tools/publishing/publishing.html#market">Android マーケットでの公開</a> もご覧ください。 </p>
+
+<p>アプリケーションを公開する方法の一般的な情報については、<a href="{@docRoot}tools/publishing/publishing.html">Publishing Your Applications</a> のドキュメントをご覧ください。 </p>
+
+<div class="special">
+
+<p>アプリケーションのリリースを準備する前の作業:</p>
+
+<ol>
+<li>アプリケーションを実際のデバイスで徹底的にテストする </li>
+<li>アプリケーションへのエンド ユーザー ライセンス契約の追加を検討する</li>
+<li>アプリケーションのマニフェストにアイコンとラベルを指定する</li>
+<li>ロギングとデバッグを無効にして、データとファイルをクリーンアップする</li>
+</ol>
+
+<p>アプリケーションの最終コンパイルを実行する前の作業:</p>
+
+<ol start="5">
+<li>アプリケーションでバージョン管理を行う</li>
+<li>適切な暗号化キーを取得する</li>
+<li>アプリケーションが MapView 要素を使用している場合は、Maps API キーに登録する</li>
+</ol>
+
+<p><em>アプリケーションのコンパイル</em></p>
+<p>アプリケーションをコンパイルした後の作業:</p>
+<ol start="8">
+<li>アプリケーションに署名する</li>
+<li>コンパイルしたアプリケーションをテストする</li>
+</ol>
+</div>
+
+<h2 id="releaseready">アプリケーションのリリースを準備する前の作業</h2>
+
+<h3 id="test">1. アプリケーションを実際のデバイスで徹底的にテストする</h3>
+
+<p>アプリケーションをできる限り広範に徹底的にテストすることが重要です。この作業を支援するため、Android では多数のテスト用クラスとツールを用意しています。{@link android.app.Instrumentation Instrumentation} を使用して JUnit およびその他のテスト ケースを実行できます。また、<a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a> などのテスティング ツールを使用できます。  </p>
+
+<ul>
+<li>ユーザーがアプリケーションを正常に実行できるようにするため、アプリケーションが実行されると予想されるタイプの携帯端末の実機を入手してください。実際のデバイスで、実際のネットワーク条件の下でアプリケーションをテストします。アプリケーションを実際のデバイスでテストすることは非常に重要です。これによって、作成したユーザー インターフェース要素のサイズが正しく(特にタッチスクリーン UI の場合)、アプリケーションのパフォーマンスと電池効率が適正であることを確認できるからです。</li>
+
+<li>アプリケーションの対象とするタイプの携帯端末が手に入らない場合は、<code>-dpi</code>、<code>-device</code>、<code>-scale</code>、<code>-netspeed</code>、<code>-netdelay</code>、<code>-cpu-delay</code> などのエミュレータ オプションを使用して、エミュレータの画面、ネットワーク パフォーマンス、その他の属性をモデル化して可能な限り対象デバイスに適応させることができます。このようにして、アプリケーションの UI とパフォーマンスをテストできます。ただし、公開する前にアプリケーションを実際の対象デバイスでテストすることを強く推奨します。 </li>
+
+<li>アプリケーションが <a href="http://www.t-mobileg1.com/">T-Mobile G1</a> デバイスを対象としている場合、UI が画面の向き変更に対応しているか確認してください。 </li>
+</ul>
+
+<h3 id="eula">2. アプリケーションへのエンドユーザー ライセンス契約の追加を検討する</h3>
+
+<p>個人、組織、知的財産を保護するため、アプリケーションのエンドユーザー ライセンス契約(EULA)を付加することを推奨します。 
+
+<h3 id="iconlabel">3. アプリケーションのマニフェストにアイコンとラベルを指定する</h3>
+
+<p>アプリケーションのマニフェストに指定するアイコンとラベルは、アプリケーションのアイコンと名前としてユーザーに表示されるため、重要な要素です。アイコンとラベルは、デバイスの [[]ホーム] 画面や、[[]アプリケーションの管理]、[[]マイダウンロード] などに表示されます。また、公開サービスによってアイコンとラベルがユーザーに表示される可能性もあります。 </p>
+
+<p>アイコンとラベルを指定するには、<code>android:icon</code> と <code>android:label</code> 属性をマニフェストの <code>&lt;application&gt;</code> 要素に定義します。 </p>
+
+<p>アイコンのデザインについては、組み込みの Android アプリケーションのスタイルとできるだけ統一感を持たせてください。</p>
+
+<h3 id="logging">4. ロギングとデバッグを無効にして、データとファイルをクリーンアップする</h3>
+
+<p>リリース時にはデバッグ機能を無効にし、デバッグおよびその他の不要なデータ/ファイルをアプリケーション プロジェクトから削除してください。</p>
+<ul>
+<li><code>android:debuggable="true"</code> 属性をマニフェストの <code>&lt;application&gt;</code> 要素から削除します。</li>
+<li>ログ ファイル、バックアップ ファイル、およびその他の不要なファイルをアプリケーション プロジェクトから削除します。</li>
+<li>個人的または自分専用のデータがないか確認し、必要に応じて削除します。</li>
+<li>ソース コード内に {@link android.util.Log} メソッドへの呼び出しがある場合は、無効にします。</li>
+</ul>
+
+<h2 id="finalcompile">アプリケーションの最終コンパイルを実行する前の作業</h2>
+
+<h3 id="versionapp">5. アプリケーションでバージョン管理を行う</h3>
+
+<p>アプリケーションをコンパイルする前に、アプリケーションにバージョン番号を定義しておく必要があります。定義するには、アプリケーションのマニフェスト ファイルの <code>&lt;manifest&gt;</code> 要素の <code>android:versionCode</code> と <code>android:versionName</code> 属性の両方に適切な値を指定します。バージョン番号の設定は、全体的なアプリケーションアップグレードの計画を考慮して、慎重に検討してください。 </p>
+
+<p>これまでにリリースしたバージョンがある場合、最新のアプリケーションのバージョン番号を旧バージョンから増加させる必要があります。アプリケーションのマニフェスト ファイルの <code>&lt;manifest&gt;</code> 要素の <code>android:versionCode</code> と <code>android:versionName</code> 属性の両方を適切な値を使用して増加する必要があります。 </p>
+
+<p>アプリケーションのバージョン情報を定義する方法は、<a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a>をご覧ください。</p>
+
+<h3 id="cryptokey">6. 適切な暗号化キーを取得する</h3>
+
+<p>ここまで準備作業をすべて読んで実行していれば、アプリケーションはコンパイルされ、署名の準備ができています。.apk の内部では、アプリケーションは適切にバージョン管理されており、上記のように余分なファイルや非公開データは削除されています。 </p>
+
+<p>アプリケーションに署名する前に、適切な非公開キーがあることを確認する必要があります。非公開キーを取得(または生成)する方法については、<a href="{@docRoot}tools/publishing/app-signing.html#cert">適切な非公開キーの取得</a>をご覧ください。</p>
+
+<p>適切な非公開キーを取得(または生成)したら、キーを使用して次の手順を実行します:</p>
+
+<ul>
+<li>アプリケーションが MapView 要素を使用している場合は、Maps API キー(以下をご覧ください)に登録します。</li>
+<li>以降の準備プロセスで、リリースするアプリケーションに署名します。</li>
+</ul>
+
+<h3 id="mapsApiKey">7. アプリケーションが MapView 要素を使用している場合は、Maps API キーに登録する</h3>
+
+<div class="sidebox-wrapper">
+<div class="sidebox"><p>
+Maps API キーを取得する方法は、<a
+href="http://code.google.com/android/add-ons/google-apis/mapkey.html">Maps API キーの取得(英語のみ)</a>
+をご覧ください。</p>
+</div>
+</div>
+
+<p>アプリケーションが Mapview 要素を使用する場合、アプリケーションを Google Maps サービスで登録し、Maps API キーを取得する必要があります。その後、MapView で Google Maps からデータを取得できるようになります。この処理を行うため、Maps サービスに署名証明書の MD5 フィンガープリントを提出します。 </p>
+
+<p>開発中は、SDK ツールが生成したデバッグ キーを登録して一時的な Maps API キーを取得できます。ただし、アプリケーションを公開する前には、非公開キーに基づく新しい Maps API キーで登録する必要があります。 </p>
+
+<p>アプリケーションが MapView 要素を使用する場合、次の点を理解することが重要です:</p>
+
+<ol>
+<li>アプリケーションをリリース用にコンパイルする前に、Maps API キーを取得する必要があります。<em></em>このキーを、アプリケーションのレイアウト ファイルにある各 MapView 要素の、<code>android:apiKey</code> という特殊な属性に追加する必要があるからです。MapView オブジェクトをコードから直接インスタンス化している場合は、Maps API キーをコンストラクタのパラメータとして渡す必要があります。
+</li>
+<li>アプリケーションの MapView 要素が参照する Maps API キーは Google Maps 内で登録され、アプリケーションの署名に使用される証明書に登録される必要があります。これはアプリケーションを公開する際に特に重要です。MapView 要素は、アプリケーションの署名に使用されるリリース証明書に登録されるキーを参照する必要があります。  </li>
+<li>SDK ツールが生成したデバッグ証明書を登録して一時的な Maps API キーを取得している場合、リリース証明書を登録して新しい Maps API キーを取得する<em>必要があります</em>。また、MapView 要素を変更して、デバッグ証明書と関連付けられたキーではなく、新しいキーを参照させることも忘れないでください。このようにしないと、MapView 要素には Maps データをダウンロードする許可が与えられません。 </li>
+<li>アプリケーションの署名に使用する非公開キーを変更するには、Google Maps サービスから新しい Maps API キーを取得する<em>必要があります</em>。新しい Maps API キーを取得してすべての MapView 要素に適用してください。以前のキーを参照する MapView 要素には、Maps データをダウンロードする許可が与えられません。 </li>
+</ol>
+
+<p>署名と非公開キーについては、<a
+href="{@docRoot}tools/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。</p>
+
+
+<h2 id="compile">アプリケーションのコンパイル</h2>
+
+<p>前述のセクションで説明したアプリケーションの準備ができたら、アプリケーションをリリース用にコンパイルできます。 </p>
+
+<h2 id="post-compile">アプリケーションをコンパイルした後の作業</h2>
+
+<h3 id="signapp">8. アプリケーションに署名する</h3>
+
+<p>非公開キーを使用してアプリケーションに署名します。アプリケーションに正しく署名することは、非常に重要です。詳細は、<a href="{@docRoot}tools/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。 </p>
+
+<h3 id="testapp">9. コンパイルして署名したアプリケーションのテスト</h3>
+
+<p>コンパイルしたアプリケーションをリリースする前に、対象とする携帯端末(および可能ならば対象ネットワーク)上で徹底的にテストする必要があります。特に、UI 部分の MapView 要素がマップ データを正常に受信していることを確認してください。正常に受信していない場合、<a href="#mapsApiKey">Maps API キーに登録する</a>に戻って問題を解決してください。アプリケーションがサーバー側サービスを正しく利用できること、指定データまたは使用データを正しく処理できること、そして認証要件を正常に処理できることも確認してください。  </p>
+
+<p>これらのテストが完了したら、アプリケーションを携帯端末ユーザーに公開する準備が整ったと言えるでしょう。</p>
+
+
diff --git a/docs/html-intl/ja/guide/publishing/versioning.jd b/docs/html-intl/ja/guide/publishing/versioning.jd
new file mode 100644
index 0000000..1928610
--- /dev/null
+++ b/docs/html-intl/ja/guide/publishing/versioning.jd
@@ -0,0 +1,100 @@
+page.title=アプリケーションのバージョニング
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>バージョン管理の概略</h2>
+
+<ul>
+<li>アプリケーションにはバージョンを設定する必要がある<em></em></a></li>
+<li>バージョンは、アプリケーションのマニフェスト ファイルで設定する</li>
+<li>アプリケーションのバージョン管理方法は、ユーザーのアップグレード方法に影響 </li>
+<li>開発プロセスの初期段階で、今後のリリースの検討事項を含めて、バージョン管理戦略を決定します</li>
+</ul>
+
+<h2>このドキュメントの内容</h2>
+
+<ol>
+<li><a href="#appversion">アプリケーションのバージョンの設定</a></li>
+<li><a href="#minsdkversion">最小システム API バージョンの指定</a>
+</ol>
+
+
+<h2>関連項目</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/preparing.html">公開の準備</a></li>
+<li><a href="{@docRoot}tools/publishing/publishing.html#market">Android マーケットでの公開</a></li>
+<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>バージョン管理のコンポーネントは、アプリケーションのアップグレード及びメンテナンスの計画を立てるのに重要です。 </p>
+
+<ul>
+<li>ユーザーは、デバイスにインストールされたアプリケーション バージョンと、インストールが可能なアップグレード バージョンについて、特定の情報が必要です。 </li>
+<li>スイートとして公開されたその他のアプリケーションなどでは、アプリケーションのバージョンをシステムに問い合わせて、互換性と依存関係を確認する必要があります。</li>
+<li>アプリケーションを公開するサービスでは、アプリケーションにバージョンを問い合わせて、バージョンをユーザーに表示できるようにする必要があります。公開サービスでは、互換性を確認してアップグレードとダウングレードの関係を確立するために、アプリケーション バージョンを確認する必要があります。</li>
+</ul>
+
+<p>Android システム自体は、アップグレードや互換性の制約の実施などのために、アプリケーション バージョン情報をアプリケーションに対して<em>確認することはありません</em>。代わりに、アプリケーションにおけるバージョン制約はユーザーまたはアプリケーション自体によって完全に実施されます。 </p>
+
+<p>Android システムが確認を行うのは、アプリケーションによってマニフェストの <code>minSdkVersion</code> 属性に指定されたシステム バージョン互換性です。<em></em>この属性によりアプリケーションは互換性を持つ最小システム API を指定できます。詳細は、<a href="#minsdkversion">最小システム API バージョンの指定</a>をご覧ください。
+
+<h2 id="appversioning">アプリケーションのバージョンの設定</h2>
+<p>アプリケーションのバージョン情報を定義するには、アプリケーションのマニフェスト ファイルで属性を設定します。2 つの属性を使用でき、常にこの両方に値を定義することが推奨されています: </p>
+
+<ul>
+<li><code>android:versionCode</code> - アプリケーション コードのバージョンを他のバージョンと相対的に示す整数値。 
+
+<p>この値は整数なので、その他のアプリケーションはプログラムでバージョンの値を評価して関係を確認できます(たとえば、このバージョンがアップグレードかダウングレードなのか、など)。任意の整数値を設定できますが、アプリケーションの後続のリリースでは、現在より大きな値を使用するようにしてください。システムではこのバージョン管理の基準を強制しませんが、後継リリースの値を増加させることは標準的です。 </p>
+
+<p>通常、アプリケーションの最初のバージョンの versionCode を 1 に設定してリリースし、その後は各リリースについて、リリースがメジャー リリースであってもマイナー リリースであっても、値を単調増加させます。これは、<code>android:versionCode</code> の値は、ユーザーに表示されるアプリケーション リリース バージョンと類似している必要性はないことを意味します。以下の <code>android:versionName</code> をご覧ください。アプリケーションと公開サービスでは、このバージョンの値はユーザーには表示されません。</p>
+</li>
+<li><code>android:versionName</code> - アプリケーション コードのリリース バージョンを表す文字列値で、ユーザーに表示される値です。 
+<p>値は文字列なので、アプリケーション バージョンを「&lt;major&gt;.&lt;minor&gt;.&lt;point&gt;」といった文字列や、その他のタイプの絶対的または相対的バージョン ID として記述できます。 </p>
+
+<p><code>android:versionCode</code> の場合と同様に、システムではこの値をアプリケーションでユーザーに表示する以外の目的で内部的に利用することはありません。公開サービスでは、ユーザーに表示するために <code>android:versionName</code> 値を取り出す可能性もあります。</p>
+</li>
+</ul>
+
+<p>これらのバージョン属性の両方をマニフェスト ファイルの <code>&lt;manifest&gt;</code> 要素で定義します。 </p>
+
+<p>ここに、<code>&lt;manifest&gt;</code> 要素の <code>android:versionCode</code> と <code>android:versionName</code> 属性を示すマニフェストの例を示します。 </p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.example.package.name"
+      android:versionCode="2"
+      android:versionName="1.1"&gt;
+    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
+        ...
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+<p>この例では、<code>android:versionCode</code> 値は現在の .apk がこのアプリケーション コードの 2 番目のリリースを含んでいることを表し、これは <code>android:codeName</code> 文字列が示すようにマイナー後継リリースであることを示します。 </p>
+
+<p>Android フレームワークには、アプリケーションがシステムに別のアプリケーションのバージョン情報を問い合わせる API が用意されています。バージョン情報を取得するため、アプリケーションは {@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)} 
+method of {@link android.content.pm.PackageManager PackageManager}. </p> を使用します。
+
+<h2 id="minsdkversion">最小システム API バージョンの指定</h2>
+
+<p>アプリケーションが最低でも Android プラットフォームの特定のバージョンを必要とする場合、このバージョンを API レベルの ID としてアプリケーションのマニフェスト ファイルに指定できます。このようにすると、互換性のあるバージョンの Android システムを実行しているデバイスにのみアプリケーションをインストールできるようになります。 </p>
+
+<p>最小システム バージョンをマニフェストに指定するには、次の属性を使用します: </p>
+
+<ul>
+<li><code>android:minSdkVersion</code> - Android プラットフォームのコード バージョンに対応する整数値。 
+<p>アプリケーションのインストールを準備する際に、システムはこの属性の値を確認して、システム バージョンと比較します。<code>android:minSdkVersion</code> 値がシステム バージョンよりも大きい場合、システムはアプリケーションのインストールを中止します。 </p>
+
+<p>この属性をマニフェストに指定しない場合、システムではアプリケーションがすべてのプラットフォーム バージョンと互換性があると仮定します。</p></li>
+</ul>
+
+<p>アプリケーションに最小プラットフォーム バージョンを指定するには、<code>&lt;uses-sdk&gt;</code> 要素を <code>&lt;manifest&gt;</code> の子として追加し、<code>android:minSdkVersion</code> を属性として定義します。 </p>
+
+<p>詳細は、<a href="{@docRoot}about/versions/android-1.1.html">Android System Image 1.1 Version Notes</a> もご覧ください。</p>
diff --git a/docs/html-intl/ja/guide/topics/fundamentals.jd b/docs/html-intl/ja/guide/topics/fundamentals.jd
new file mode 100644
index 0000000..cf9f7dd
--- /dev/null
+++ b/docs/html-intl/ja/guide/topics/fundamentals.jd
@@ -0,0 +1,922 @@
+page.title=開発の基礎
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>主なクラス</h2>
+<ol>
+<li>{@link android.app.Activity}</li>
+<li>{@link android.app.Service}</li>
+<li>{@link android.content.BroadcastReceiver}</li>
+<li>{@link android.content.ContentProvider}</li>
+<li>{@link android.content.Intent}</li>
+</ol>
+
+<h2>このドキュメントの内容</h2>
+<ol>
+<li><a href="#appcomp">アプリケーションのコンポーネント</a>
+  <ol>
+    <li><a href="#actcomp">コンポーネントのアクティブ化: インテント</a></li>
+    <li><a href="#endcomp">コンポーネントの終了</a></li>
+    <li><a href="#manfile">マニフェスト ファイル</a></li>
+    <li><a href="#ifilters">インテント フィルタ</a></li>
+  </ol></li>
+<li><a href="#acttask">アクティビティとタスク</a>
+  <ol>
+    <li><a href="#afftask">親和性と新しいタスク</a></li>
+    <li><a href="#lmodes">起動モード</a></li>
+    <li><a href="#clearstack">スタックのクリア</a></li>
+    <li><a href="#starttask">タスクの開始</a></li>
+  </ol></li>
+<li><a href="#procthread">プロセスとスレッド</a>
+  <ol>
+    <li><a href="#procs">プロセス</a></li>
+    <li><a href="#threads">スレッド</a></li>
+    <li><a href="#rpc">リモート プロシージャ コール</a></li>
+    <li><a href="#tsafe">スレッドセーフなメソッド</a></li>
+  </ol></li>
+<li><a href="#lcycles">コンポーネントのライフサイクル</a>
+  <ol>
+    <li><a href="#actlife">アクティビティのライフサイクル</a></li>
+    <li><a href="#servlife">サービスのライフサイクル</a></li>
+    <li><a href="#broadlife">ブロードキャスト レシーバのライフサイクル</a></li>
+    <li><a href="#proclife">プロセスとライフサイクル</a></li>
+  </ol></li>
+</ol>
+</div>
+</div>
+
+<p>
+Android アプリケーションはすべて Java プログラミング言語で記述します。コンパイル済みの Java コード(およびそのアプリケーションに必要なすべてのデータやリソース ファイル)は、<a href="{@docRoot}tools/aapt.html"><code>aapt</code> ツール</a>を使用して Android パッケージにバンドルします。Android パッケージは、拡張子が {@code .apk} のアーカイブ ファイルです。<i></i>ユーザーは、このファイルをデバイスにダウンロードして利用します。つまり、Android パッケージは、アプリケーションをモバイル デバイスに配布およびインストールするための媒体として機能します。1 つの {@code .apk} ファイルに含まれているすべてのコードが、1 つのアプリケーションと見なされます。<i></i>
+</p>
+
+<p>
+各 Android アプリケーションは、以下に示すさまざまな方法で他のアプリケーションから隔離されています:
+</p>
+
+<ul>
+<li>すべてのアプリケーションは、デフォルトではそのアプリケーション個別の Linux プロセスで実行されます。Android は、アプリケーション コードの実行が必要になったときにプロセスを開始し、その必要がなくなって他のアプリケーションからシステム リソースを要求されたときにプロセスを終了します。</li>
+
+<li>プロセスごとに専用の Java 仮想マシン(VM)が割り当てられるため、アプリケーション コードは他のアプリケーションから隔離された状態で実行されます。</li>
+
+<li>デフォルトでは、アプリケーションごとに固有の Linux ユーザー ID が割り当てられます。権限が設定されているため、アプリケーションのファイルはそのユーザーからしか認識できず、そのアプリケーション自体からのみ利用できます。ただし、ファイルを他のアプリケーションにエクスポートすることは可能です。</li>
+</ul>
+
+<p>
+2 つのアプリケーションで同じユーザー ID を共有することもできます。その場合は、それぞれのアプリケーションのファイルを相互に認識できます。システム リソースを節約するため、同じ ID のアプリケーションで同じ VM を共有し、同じ Linux プロセスで実行することも可能です。
+</p>
+
+
+<h2 id="appcomp">アプリケーションのコンポーネント</h2>
+
+<p>
+Android の大きな特長の 1 つは、許可されていれば、あるアプリケーションから別のアプリケーションの要素を利用できる点です。たとえば、開発中のアプリケーションで画像の一覧をスクロール表示したい場合、他のアプリケーションで開発済みの適切なスクローラがあり、その利用が許可されていれば、独自に開発しなくてもそのスクローラを利用できます。アプリケーションに他のアプリケーションのコードを組み込んだり、リンクを設定したりする必要はありません。必要になった時点で、他のアプリケーションの一部分を開始するだけです。
+</p>
+
+<p>
+この仕組みが機能するには、アプリケーション プロセスの一部分を必要に応じて開始でき、その部分の Java オブジェクトをインスタンス化できなくてはなりません。そのため、Android アプリケーションには、他のシステムで動作するアプリケーションでよく使用されるような、アプリケーション全体にアクセスするための単一のエントリ ポイント(たとえば {@code main()} 関数)はありません。代わりに、システムが必要に応じてインスタンス化して実行できるコンポーネントで構成されます。<i></i>コンポーネントには以下の 4 つのタイプがあります:
+</p>
+
+<dl>
+
+<dt><b>アクティビティ</b></dt>
+<dd>アクティビティは、ユーザーが 1 つの操作を集中的に行うための視覚的なユーザー インターフェースを表します。<i></i>たとえば、ユーザーが選択できるメニュー アイテムの一覧を表示するアクティビティや、写真をキャプション付きで表示するアクティビティなどが考えられます。SMS アプリケーションなら、あるアクティビティでメッセージを送信する連絡先の一覧を表示し、別のアクティビティで選択した連絡先へのメッセージを入力し、その他のアクティビティで古いメッセージを参照したり設定を変更したりできます。これらのアクティビティを組み合わせて全体としてのユーザー インターフェースを形成しますが、それぞれのアクティビティは相互に独立しています。各アクティビティは、{@link android.app.Activity} 基本クラスのサブクラスとして実装されます。  
+
+<p>
+アプリケーションは、1 つのアクティビティで構成することも、上記のSMS アプリケーションのように複数のアクティビティで構成することもできます。どのようなアクティビティがいくつ必要になるかは、アプリケーションやその設計に応じて異なります。通常は、アクティビティのうちのいずれかを最初のアクティビティとして指定し、ユーザーがアプリケーションを起動したときに表示します。あるアクティビティから別のアクティビティに移動するには、現在のアクティビティから次のアクティビティを開始します。  
+</p>
+
+<p>
+各アクティビティには、それを表示するためのデフォルトのウィンドウが割り当てられます。通常はウィンドウを画面全体に表示しますが、画面より小さいウィンドウを他のウィンドウの前面に表示することもできます。アクティビティに、新たなウィンドウを追加することも可能です。たとえば、アクティビティの途中でユーザーの応答を要求するポップアップ ダイアログを表示したり、ユーザーが画面上の特定のアイテムを選択したときに別ウィンドウで重要な情報を表示したりできます。
+</p>
+
+<p>
+ウィンドウの視覚的なコンテンツは、ビュー({@link android.view.View} 基本クラスの派生オブジェクト)の階層として提供されます。各ビューは、ウィンドウ内の特定の矩形領域を制御します。親ビューは、その子となるビューで構成され、それらの子ビューのレイアウトを決定します。リーフ ビュー(階層の最下位に位置するビュー)は、そのビューが制御する矩形領域に表示され、その領域でのユーザーのアクションに対して応答します。つまり、ビューはアクティビティとユーザーが対話する場所です。たとえば、ビューに小さな画像を表示し、ユーザーがその画像をタップしたら何らかのアクションを開始することもできます。Android には、ボタン、テキスト フィールド、スクロール バー、メニュー アイテム、チェックボックスなど、さまざまなビューがあらかじめ用意されています。
+</p>
+
+<p>
+ビューの階層は、<code>{@link android.app.Activity#setContentView Activity.setContentView()}</code> メソッドを使用してアクティビティのウィンドウ内に配置します。コンテンツ ビューは、階層のルートとなる View オブジェクトです<i></i>(ビューおよびその階層について詳しくは<a href="{@docRoot}guide/topics/ui/index.html">User Interface</a> のドキュメントをご覧ください)。
+</p>
+
+<p><dt><b>サービス</b></dt>
+<dd>サービスは、視覚的なユーザー インターフェースを持たず、バックグラウンドにおいて明確な終了期限がなくで実行されます。<i></i>たとえば、ユーザーが他の操作をしている間 BGM を再生するサービス、ネットワーク経由でデータをフェッチするサービス、何かを計算してその結果をアクティビティに提供するサービスなどが考えられます。各サービスは、{@link android.app.Service} 基本クラスの拡張です。
+
+<p>
+典型的な例としては、プレイリストの曲を再生するメディア プレーヤーが挙げられます。プレーヤー アプリケーションは、ユーザーが曲を選んで再生するための 1 つ以上のアクティビティで構成することが予想されますが、ユーザーはプレーヤーを離れて別の操作に移った後も曲を聞いていたいと考えられることから、曲の再生自体をアクティビティで処理するわけにはいきません。音楽の再生を続けるには、メディア プレーヤー アクティビティから、バックグラウンドで実行するサービスを開始します。音楽再生サービスは、それを開始したアクティビティが画面上に見えなくなった後もそのまま実行されます。
+</p>
+
+<p> 
+また、実行中のサービスに接続(バインド)することもできます(実行されていない場合はそのサービスを開始することも可能です)。接続中は、サービスが公開しているインターフェースを使ってサービスと対話できます。音楽再生サービスであれは、このインターフェースを使って一時停止、巻き戻し、停止、再生の再開などの操作を実行できるようにします。
+</p>
+
+<p>
+アクティビティや他のコンポーネントと同様に、サービスもアプリケーション プロセスのメイン スレッドで実行します。したがって、サービスによって他のコンポーネントやユーザー インターフェースの実行を妨げられることはなく、時間がかかるタスク(たとえば曲の再生)については、通常は別のスレッドを生成して処理します。詳しくは、<a href="#procthread">プロセスとスレッド</a>をご覧ください。
+</p></dd>
+
+<dt><b>ブロードキャスト レシーバ</b></dt>
+<dd>ブロードキャスト レシーバは、ブロードキャストの連絡を受信してそれに対処するだけのコンポーネントです。<i></i>ブロードキャストの多くが元々はシステム コードで、たとえばタイム ゾーンが変更されたこと、電池の残量が少なくなったこと、写真が撮影されたこと、ユーザーが言語設定を変更したことなどを連絡するために使用します。アプリケーションでも、たとえば何らかのデータがデバイスにダウンロードされて利用できるようになったことを、他のアプリケーションにブロードキャストで知らせることができます。
+
+<p>
+アプリケーションでは、重要と思われるすべての連絡に応答できるよう、ブロードキャスト レシーバをいくつでも設定できます。すべてのレシーバは、{@link android.content.BroadcastReceiver} 基本クラスの拡張です。
+</p>
+
+<p>
+ブロードキャスト レシーバがユーザー インターフェースを表示することはありません。ただし、受信した情報への応答としてアクティビティを開始したり、{@link android.app.NotificationManager} を使用してユーザーにアラートを送信したりすることはあります。通知の際には、バックライトを点滅させる、バイブレーションを起動する、音を鳴らすなど、さまざまな方法でユーザーの注意を喚起できます。通常は、ステータス バーに永続アイコンを表示し、ユーザーがこれを開いてメッセージを取得できるようにします。 
+</p></dd>
+
+<dt><b>コンテンツ プロバイダ</b></dt>
+<dd>コンテンツ プロバイダは、アプリケーションのデータを他のアプリケーションでも利用できるようにします。<i></i>データは、ファイル システムや SQLite データベースなど、一般に利用できる方法で格納されていれば使用できます。コンテンツ プロバイダは、{@link android.content.ContentProvider} 基本クラスの拡張です。プロバイダが制御する型のデータを、他のアプリケーションから取得および格納するための標準メソッド セットを実装しています。ただし、これらのメソッドをアプリケーションから直接呼び出すことはできません。代わりに、{@link android.content.ContentResolver} オブジェクトのメソッドを呼び出します。ContentResolver は、すべてのプロバイダと通信でき、プロバイダと連携して関係のあるすべてのプロセス間通信を管理します。 
+
+<p>
+コンテンツ プロバイダの使用方法について詳しくは、<a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>のドキュメントをご覧ください。
+</p></dd>
+
+</dl>
+
+<p>
+Android では、特定のコンポーネントで処理すべきリクエストがあると、そのコンポーネントのアプリケーション プロセスが実行中かどうかを確認(必要に応じてプロセスを開始)し、そのコンポーネントの適切なインスタンスが利用可能かどうかを確認(必要に応じてインスタンスを作成)します。  
+</p>
+
+
+<h3 id="actcomp">コンポーネントのアクティブ化: インテント</h3> 
+
+<p>
+コンテンツ プロバイダは、ContentResolver からのリクエストの対象になるとアクティブ化されます。それ以外の 3 つのコンポーネント(アクティビティ、サービス、ブロードキャスト レシーバ)は、インテントと呼ばれる非同期メッセージによってアクティブ化されます。<i></i>インテントは、メッセージのコンテンツを保持する {@link android.content.Intent} オブジェクトです。アクティビティやサービスの場合の Intent オブジェクトの主な役割は、リクエストされているアクションを指名し、その対象となるデータの URI を指定することです。たとえば、ユーザーに画像を表示するためのリクエストや、ユーザーにテキストを編集させるリクエストをアクティビティに伝達できます。ブロードキャスト レシーバの場合は、Intent オブジェクトがこれから通知を行うアクションを指名します。たとえば、カメラのボタンが押されたことを、関係のあるブロードキャスト レシーバに通知できます。
+</p>
+
+<p>
+以下に示すように、コンポーネントのタイプごとに別々のアクティブ化メソッドが用意されています: 
+</p>
+
+<ul>
+
+<li>アクティビティを起動する(または何か新しい処理を実行させる)には、Intent オブジェクトを <code>{@link android.content.Context#startActivity 
+Context.startActivity()}</code> または <code>{@link 
+android.app.Activity#startActivityForResult 
+Activity.startActivityForResult()}</code> に渡します。応答アクティビティで <code>{@link android.app.Activity#getIntent getIntent()}</code> メソッドを呼び出すと、最初にそのアクティビティが起動されたときのインテントの内容を確認できます。Android によってアクティビティの <code>{@link 
+android.app.Activity#onNewIntent onNewIntent()}</code> メソッドが呼び出され、アクティビティが後続のインテントに渡されます。
+
+<p>
+多くの場合、アクティビティから次のアクティビティを開始します。開始するアクティビティから結果が返される場合は、{@code startActivity()} ではなく {@code startActivityForResult()} を呼び出します。たとえば、ユーザーに写真を選択させるアクティビティを開始する場合は、ユーザーによって選択された写真が返されるかもしれません。結果は、呼び出し側のアクティビティの <code>{@link android.app.Activity#onActivityResult 
+onActivityResult()}</code> メソッドに渡した Intent オブジェクトで返されます。
+</p>
+</li>
+
+<li><p>サービスを開始する(または実行中のサービスに新しい指示を与える)には、<code>{@link 
+android.content.Context#startService Context.startService()}</code> に Intent オブジェクトを渡します。Android により、サービスの <code>{@link android.app.Service#onStart 
+onStart()}</code> メソッドが呼び出されて Intent オブジェクトが渡されます。</p>
+
+<p>
+同様に、インテントを <code>{@link 
+android.content.Context#bindService Context.bindService()}</code> に渡すと、呼び出し側のコンポーネントと対象となるサービスの間の継続中の接続を確立できます。サービスは、<code>{@link android.app.Service#onBind onBind()}</code> 呼び出しで Intent オブジェクトを受け取ります(サービスがまだ開始されていない場合は、必要に応じて {@code bindService()} で開始できます)。たとえば、上で例に挙げた音楽再生サービスとの接続を確立するアクティビティを使用して、ユーザーが再生を操作するための手段(ユーザー インターフェース)を提供できます。アクティビティで {@code bindService()} を呼び出して接続を確立してから、サービスに定義されているメソッドを呼び出して再生を操作します。
+</p>
+
+<p>
+サービスのバインドについては、後ほど<a href="#rpc">リモート プロシージャ コール</a>のセクションで詳しく説明します。
+</p>
+</li>
+
+<li><p>アプリケーションでブロードキャストを開始するには、<code>{@link 
+android.content.Context#sendBroadcast(Intent) Context.sendBroadcast()}</code>、<code>{@link android.content.Context#sendOrderedBroadcast(Intent, String) 
+Context.sendOrderedBroadcast()}</code>、<code>{@link 
+android.content.Context#sendStickyBroadcast Context.sendStickyBroadcast()}</code> などのメソッドのいずれかのバリエーションに Intent オブジェクトを渡します。Android によって <code>{@link 
+android.content.BroadcastReceiver#onReceive onReceive()}</code> メソッドが呼び出され、関係のあるすべてのブロードキャスト レシーバにインテントが配信されます。</p></li>
+
+</ul>
+
+<p>
+インテント メッセージについて詳しくは、<a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> をご覧ください。
+</p>
+
+
+<h3 id="endcomp">コンポーネントの終了</h3>
+
+<p>
+コンテンツ プロバイダは、ContentResolver からのリクエストに応答している間のみアクティブになります。ブロードキャスト レシーバは、ブロードキャスト メッセージに応答している間のみアクティブになります。つまり、これらのコンポーネントを明示的に終了させる必要はありません。
+</p>
+
+<p>
+一方、アクティビティはユーザー インターフェースを提供します。長い時間をかけてユーザーと会話するためのものであり、待機状態の間も、会話が続いてきる限りはアクティブなままになっている可能性があります。同様に、サービスも長い間実行されたままになる可能性があります。Android には、アクティビティとサービスを以下のような規則的な方法で終了させるためのメソッドが用意されています:
+</p>
+
+<ul>
+<li>アクティビティを終了させるには、その <code>{@link android.app.Activity#finish finish()}</code> メソッドを呼び出します。あるアクティビティから {@code startActivityForResult()} で開始した別のアクティビティは、<code>{@link android.app.Activity#finishActivity finishActivity()}</code> を呼び出して終了させることができます。</li>
+
+<li>サービスは、その <code>{@link android.app.Service#stopSelf stopSelf()}</code> メソッドを呼び出すか、<code>{@link android.content.Context#stopService Context.stopService()}</code> を呼び出すことで停止できます。</li>
+</ul>
+
+<p>
+コンポーネントが、既に利用されていない場合や、Android がよりアクティブな他のコンポーネントにメモリを割り当てる必要がある場合は、システムがコンポーネントを終了させることもあります。このような状況およびその影響については、<a href="#lcycles">コンポーネントのライフサイクル</a>で詳しく説明します。
+</p>
+
+
+<h3 id="manfile">マニフェスト ファイル</h3>
+
+<p>
+アプリケーション コンポーネントを開始するには、Android がそのコンポーネントの存在を認識している必要があります。アプリケーションのコンポーネントは、マニフェスト ファイルで宣言します。このファイルは、アプリケーションのコード、ファイル、リソースなどとともに Android パッケージ({@code .apk} ファイル)にバンドルされます。  
+</p>
+
+<p>
+マニフェストは構造化された XML ファイルで、どのアプリケーションでも常に AndroidManifest.xml という名前になります。アプリケーション コンポーネントの宣言以外にも、アプリケーションをリンクさせる必要のあるライブラリ(デフォルトの Android ライブラリを除く)の指定や、アプリケーションに付与されるべき権限の指定などにも使用します。
+</p>
+
+<p>
+しかし、マニフェストの最も重要な役割は、アプリケーションのコンポーネントに関する情報を Android に提供することです。たとえば、アクティビティを次のように宣言できます:
+</p>
+
+<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest . . . &gt;
+    &lt;application . . . &gt;
+        &lt;activity android:name="com.example.project.FreneticActivity"
+                  android:icon="@drawable/small_pic.png"
+                  android:label="@string/freneticLabel" 
+                  . . .  &gt;
+        &lt;/activity&gt;
+        . . .
+    &lt;/application&gt;
+&lt;/manifest&gt;</pre>
+
+<p>
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> 要素の {@code name} 属性は、そのアクティビティを実装する {@link android.app.Activity} サブクラスを指名します。{@code icon} および {@code label} 属性には、ユーザーに対して表示するアイコンやラベルが保持されているリソース ファイルを指定します。
+</p>
+
+<p>
+その他のコンポーネントも、サービスは <code><a href="{@docRoot}guide/topics/manifest/service-element.html">&lt;service&gt;</a></code> 要素、ブロードキャスト レシーバは <code><a href="{@docRoot}guide/topics/manifest/receiver-element.html">&lt;receiver&gt;</a></code> 要素、コンテンツ プロバイダは <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></code> 要素を使用して同じような方法で宣言します。マニフェストに宣言されていないアクティビティ、サービス、およびコンテンツ プロバイダは、システムから認識できないため実行されることはありません。ただし、ブロードキャスト レシーバの場合は、マニフェストで宣言する方法と、コード内で {@link android.content.BroadcastReceiver} オブジェクトとして動的に作成し、<code>{@link android.content.Context#registerReceiver Context.registerReceiver()}</code> を呼び出してシステムに登録する方法があります。
+</p>
+
+<p>
+マニフェスト ファイルの作成方法について詳しくは、<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a>をご覧ください。
+</p>
+
+
+<h3 id="ifilters">インテント フィルタ</h3>
+
+<p>
+Intent オブジェクトでは、対象とするコンポーネントを明示的に指名できます。明示的に指名されている場合、Android はマニフェスト ファイル内の宣言に基づいてコンポーネントを特定してアクティブにします。一方、明示的に指名されていない場合は、そのインテントに応答する上で最適なコンポーネントが選択されます。方法としては、Intent オブジェクトを、その対象となりうるコンポーネントのインテント フィルタと照合します。<i></i>コンポーネントのインテント フィルタは、そのコンポーネントで処理できるインテントの種類を示します。これもコンポーネントに関する重要な情報の 1 つなので、マニフェスト ファイルで宣言します。次に、上に示した例を拡張して 2 つのインテント フィルタを追加したアクティビティを示します:
+</p>
+
+<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest . . . &gt;
+    &lt;application . . . &gt;
+        &lt;activity android:name="com.example.project.FreneticActivity"
+                  android:icon="@drawable/small_pic.png"
+                  android:label="@string/freneticLabel" 
+                  . . .  &gt;
+            &lt;intent-filter . . . &gt;
+                &lt;action android:name="android.intent.action.MAIN" /&gt;
+                &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
+            &lt;/intent-filter&gt;
+            &lt;intent-filter . . . &gt;
+                &lt;action android:name="com.example.project.BOUNCE" /&gt;
+                &lt;data android:mimeType="image/jpeg" /&gt;
+                &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+            &lt;/intent-filter&gt;
+        &lt;/activity&gt;
+        . . .
+    &lt;/application&gt;
+&lt;/manifest&gt;</pre>
+
+<p>
+この例の 1 つ目のフィルタは、アクション「{@code android.intent.action.MAIN}」とカテゴリ「{@code android.intent.category.LAUNCHER}」を組み合わせた一般的なフィルタです。このフィルタは、アプリケーション ランチャ(ユーザーがデバイス上で起動できるアプリケーションを一覧表示した画面)に、このアクティビティを表示する必要があることを示しています。つまり、このアクティビティはアプリケーションへのエントリ ポイントとして機能し、ユーザーがランチャでそのアプリケーションを選択したときに最初に表示されるということです。
+</p>
+
+<p>
+2 つ目のフィルタでは、アクティビティが特定のタイプのデータに対して実行できるアクションを宣言しています。
+</p>
+
+<p>
+コンポーネントにはインテント フィルタをいくつでも指定でき、それぞれのフィルタで別々の機能を宣言できます。フィルタが 1 つも指定されていないコンポーネントは、そのコンポーネントが対象として明示的に指名されているインテントでのみアクティブにできます。
+</p>
+
+<p>
+コード内で作成して登録したブロードキャスト レシーバの場合、インテント フィルタは {@link android.content.IntentFilter} オブジェクトとして直接インスタンス化されます。それ以外の全てのフィルタは、マニフェストで設定します。
+</p>
+
+<p>
+インテント フィルタについて詳しくは、<a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> をご覧ください。
+</p>
+
+
+<h2 id="acttask">アクティビティとタスク</h2>
+
+<p>
+既に説明したように、あるアクティビティから別のアクティビティを開始することができます。これには、別のアプリケーションで定義されているアクティビティも含まれます。たとえば、ユーザーに特定の場所の地図を表示するとします。そのためのアクティビティは既に存在しているので、現在のアクティビティで必要な情報を Intent オブジェクトに格納して {@code startActivity()} に渡すだけで、マップ ビューアに地図を表示できます。ユーザーが [戻る] キーを押すと、画面に元のアクティビティが再表示されます。
+</p>
+
+<p>
+この場合、マップ ビューアは別のアプリケーションで定義されており、そのアプリケーションのプロセスで実行されていますが、ユーザーにとってはマップ ビューアが元のアプリケーションの一部であるかのように感じられます。Android では、両方のアクティビティを同じタスクに組み込むことで、このようなユーザー エクスペリエンスを実現できます。<i></i>簡単に言えば、ユーザーが 1 つの「アプリケーション」と感じるものがタスクです。関連するアクティビティをスタックにまとめたものがタスクです。スタック内のルート アクティビティは、タスクを開始するアクティビティです。通常であれば、ユーザーがアプリケーション ランチャで選択するアクティビティがこれに相当します。スタックの最上位にあるアクティビティは、ユーザーのアクションの焦点となっている実行中のアクティビティです。あるアクティビティから別のアクティビティを開始すると、そのアクティビティが新たにスタックにプッシュされて実行中のアクティビティになります。1 つ前のアクティビティはスタック内に残されています。ユーザーが [[]戻る] キーを押すと、現在のアクティビティがスタックからポップされ、1 つ前のアクティビティが実行中のアクティビティとして再開されます。  
+</p>
+
+<p>
+スタックはオブジェクトを保持します。したがって、同じ Activity サブクラスのインスタンス(たとえばマップ インスタンス)を複数開くと、それぞれのインスタンスが別々のエントリになります。スタック内のアクティビティは、プッシュまたはポップされるのみで再配置されることはありません。
+</p>
+
+<p>
+タスクはアクティビティのスタックであり、マニフェスト ファイル内のクラスや要素ではありません。したがって、アクティビティと無関係にタスクの値を設定することはできません。タスクの値は、ルート アクティビティでまとめて設定します。たとえば、次のセクションでは「タスクの親和性」について説明しますが、値はタスクのルート アクティビティの親和性のセットから読み込まれます。
+</p>
+
+<p>
+タスク内のアクティビティは、1 つのユニットとして一緒に移動します。タスク全体(アクティビティ スタック全体)をフォアグラウンドに移動したり、バックグラウンドに移動したりできます。たとえば、現在のタスクは 4 つのアクティビティからなるスタックで、現在のアクティビティの下にアクティビティが 3 つあるとします。ここで、ユーザーが [ホーム] キーを押してアプリケーション ランチャに移動し、新しいアプリケーション(実際には新しいタスク)を選択したとします。<i></i>すると、現在のタスクはバックグラウンドに移動し、新しいタスクのルート アクティビティが表示されます。しばらくして、ユーザーがホーム画面に戻り 1 つ前のアプリケーション(タスク)を選択すると、そのタスクがスタック内の 4 つのアクティビティとともにフォアグラウンドに移動します。ここでユーザーが [戻る] キーを押しても、中断したばかりのアプリケーション(1 つ前のタスクのルート アクティビティ)は表示されません。代わりに、スタックの最上位のアクティビティがポップされ、同じタスクの 1 つ前のアクティビティが表示されます。 
+</p>
+
+<p>
+アクティビティとタスクの動作としては、ここで説明した動作がデフォルトです。ただし、この動作のほとんどの要素は変更可能です。タスクとアクティビティの関連付けやタスク内でのアクティビティの動作は、アクティビティを開始した Intent オブジェクトのフラグ セットと、マニフェストに指定されているアクティビティの <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> 要素の属性セットとの相互作用によって決まります。リクエスト側と応答側の両方が動作に影響を及ぼします。
+</p>
+
+<p>
+この点において、主に使用する Intent フラグは以下のとおりです:
+
+<p style="margin-left: 2em">{@code FLAG_ACTIVITY_NEW_TASK} <br/>{@code FLAG_ACTIVITY_CLEAR_TOP} <br/>{@code FLAG_ACTIVITY_RESET_TASK_IF_NEEDED} <br/>{@code FLAG_ACTIVITY_SINGLE_TOP}</p>
+
+<p>
+また、主に使用する {@code &lt;activity&gt;} 属性は以下のとおりです:
+  
+<p style="margin-left: 2em">{@code taskAffinity} <br/>{@code launchMode} <br/>{@code allowTaskReparenting} <br/>{@code clearTaskOnLaunch} <br/>{@code alwaysRetainTaskState} <br/>{@code finishOnTaskLaunch}</p>
+
+<p>
+以降のセクションでは、これらのフラグや属性の役割、相互作用の仕組み、使用する際の留意事項などについて説明します。
+</p>
+
+
+<h3 id="afftask">親和性と新しいタスク</h3>
+
+<p>
+デフォルトでは、アプリケーション内のすべてのアクティビティは相互に親和性があり、すべてのアクティビティができる限り同じタスクに属そうとします。<i></i>ただし、{@code &lt;activity&gt;} 要素の {@code taskAffinity} 属性を使用して、アクティビティごとに個別の親和性を設定することもできます。つまり、別々のアプリケーションで定義されているアクティビティで親和性を共有したり、同じアプリケーションで定義されているアクティビティに別々の親和性を割り当てたりできるということです。親和性が作用する状況は 2 つあります。1 つはアクティビティを起動する Intent オブジェクトに {@code FLAG_ACTIVITY_NEW_TASK} フラグが含まれている場合、もう 1 つはアクティビティの {@code allowTaskReparenting} 属性が "{@code true}" に設定されている場合です。 
+</p>
+
+<dl>
+<dt><code>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</code> フラグ</dt>
+<dd>既に説明したとおり、新しいアクティビティは、デフォルトでは {@code startActivity()} を呼び出したアクティビティのタスクの一部として起動します。つまり、呼び出し側のアクティビティと同じスタックにプッシュされるということです。しかし、{@code startActivity()} に渡された Intent オブジェクトに {@code FLAG_ACTIVITY_NEW_TASK} フラグが含まれている場合、システムはその新しいアクティビティを別のタスクに収容しようとします。フラグの名前からも判断できますが、ほとんどの場合は新しいタスクが開始されます。ただし常にそうなるとは限りません。既存のタスクに新しいアクティビティと同じ親和性が割り当てられている場合、そのアクティビティはそのタスクの一部として起動します。そうでない場合には、新しいタスクが開始されます。</dd>
+
+<dt><code><a 
+href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">allowTaskReparenting</a></code> 属性</dt>
+<dd>{@code allowTaskReparenting} 属性が "{@code true}" に設定されているアクティビティは、そのアクティビティと親和性のあるタスクがフォアグラウンドに移ったときに、アクティビティを開始したタスクから親和性のあるタスクに移動できます。たとえば、旅行アプリケーションの一部として、選択された都市の天気予報を表示するアクティビティが定義されているとします。このアクティビティには、同じアプリケーション内の他のアクティビティと同じ親和性(デフォルトの親和性)が割り当てられていますが、その親の割り当てを変更することも可能です。あるアクティビティが天気予報アクティビティを開始すると、その時点では開始側のアクティビティと同じタスクに属した状態になります。しかし、次に旅行アプリケーションがフォアグラウンドに移ると、天気予報アクティビティの割り当てが変更され、旅行アプリケーションのタスクの一部として表示されます。</dd>
+</dl>
+
+<p>
+ユーザーから見て複数の「アプリケーション」が 1 つの {@code .apk} ファイルに含まれている場合は、それぞれのアプリケーションに関連付けられているアクティビティに別々の親和性を割り当てることをおすすめします。
+</p>
+
+
+<h3 id="lmodes">起動モード</h3>
+
+<p>
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code> 属性の {@code &lt;activity&gt;} 要素には、以下の 4 種類の起動モードを割り当てることができます:
+</p>
+
+<p style="margin-left: 2em">"{@code standard}"(デフォルト モード)<br>"{@code singleTop}"<br>"{@code singleTask}"<br>"{@code singleInstance}"</p>
+
+<p>
+これらのモードは、それぞれが以下の 4 つの点で異なります:
+</p>
+
+<ul>
+
+<li><b>インテントに応答するアクティビティをどのタスクに保持するか</b>。"{@code standard}" および "{@code singleTop}" モードの場合は、そのインテントを開始した(つまり <code>{@link android.content.Context#startActivity startActivity()}</code> を呼び出した)タスクに保持されます。ただし、Intent オブジェクトに <code>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</code> フラグが含まれている場合は、前のセクション<a href="#afftask">親和性と新しいタスク</a>で説明したとおり、別のタスクが選択されます。  
+
+<p>
+一方、"{@code singleTask}" および "{@code singleInstance}" モードの場合は、アクティビティが常にタスクのルート アクティビティになります。タスクは定義されており、他のタスクの一部として起動されることはありません。
+</p>  
+
+<li><p><b>アクティビティのインスタンスを複数生成できるか</b>。"{@code standard}" または "{@code singleTop}" アクティビティは複数回インスタンス化できます。それらのインスタンスを複数のタスクに割り当てることも、特定のタスクに同じアクティビティの複数のインスタンスを割り当てることも可能です。
+</p> 
+
+<p>
+一方、"{@code singleTask}" および "{@code singleInstance}" アクティビティのインスタンスは 1 つに制限されます。これらのアクティビティはタスクのルートに当たります。したがって、これらのタスクの複数のインスタンスがデバイス上に同時に存在することはないということになります。
+</p>    
+
+<li><p><b>インスタンスのタスクに他のアクティビティを含めることができるか</b>。"{@code singleInstance}" アクティビティは、そのタスク内の唯一のアクティビティとして単独で動作します。ここから別のアクティビティを開始した場合、そのアクティビティは起動モードに関係なく、あたかもインテントに {@code FLAG_ACTIVITY_NEW_TASK} フラグが含まれているかのように別のタスクで起動します。"{@code singleInstance}" モードと "{@code singleTask}" モードは、これ以外の点ではまったく同じです。</p>
+
+<p>
+他の 3 つのモードでは、タスクに複数のアクティビティを割り当てることができます。"{@code singleTask}" アクティビティは、常にタスクのルート アクティビティになりますが、同じタスクに割り当てることになる別のアクティビティを開始することができます。"{@code standard}" および "{@code singleTop}" アクティビティのインスタンスは、スタック内のどの位置にでも配置できます。  
+</p></li>
+
+<li><b>クラスの新しいインスタンスを起動して新しいインテントを処理するかどうか</b>。デフォルトの "{@code standard}" モードの場合は、新しいインテントに応答するときには必ず新しいインスタンスが作成されます。それぞれのインスタンスで処理するインテントは 1 つのみです。"{@code singleTop}" モードの場合は、クラスの既存のインスタンスが対象タスクのアクティビティ スタックの最上位にあれば、それを再利用して新しいインテントを処理します。スタックの最上位にない場合は再利用されません。代わりに、新しいインスタンスが作成されてスタックにプッシュされ、新しいインテントの処理に使用されます。
+
+<p>
+たとえば、タスクのアクティビティ スタックに、ルート アクティビティ A とアクティビティ B、C、D が含まれているとします。スタック内のアクティビティの順序は A-B-C-D で D が最上位です。ここに、アクティビティのタイプが D のインテントが届きます。D の起動モードがデフォルトの "{@code standard}" である場合は、そのクラスの新しいインスタンスが起動し、スタックは A-B-C-D-D となります。しかし、D の起動モードが "{@code singleTop}" であれば、スタックの最上位は D なので、新しいインテントは既存のインスタンスによって処理されるはずです。したがって、スタックは A-B-C-D のままとなります。  
+</p>
+
+<p>
+一方、届いたインテントのアクティビティ タイプが B だった場合は、B のモードが "{@code standard}" であっても "{@code singleTop}"であっても B の新しいインスタンスが起動します。これは B がスタックの最上位ではないためで、結果としてスタックは A-B-C-D-B となります。
+</p>
+
+<p>
+"{@code singleTask}" または "{@code singleInstance}" アクティビティの場合は、既に説明したとおり同時に複数のインスタンスが存在することはないため、インスタンスは常に新しいインテントを処理することになります。"{@code singleInstance}" アクティビティはスタック内の唯一のアクティビティであるため、常にスタックの最上位、つまりインテントを処理する位置にあります。一方、"{@code singleTask}" アクティビティは、スタック内の上位に他のアクティビティがある場合とない場合があります。上位にアクティビティがある場合、インテントを処理する位置にはないため、そのインテントはドロップされます(インテントがドロップされたとしても、そのインテントが届いたことによって、タスクがフォアグラウンドに移ったままの状態になります)。
+</p>
+</li>
+
+</ul>
+
+<p>
+既存のアクティビティで新しいインテントを処理することになった場合は、<code>{@link android.app.Activity#onNewIntent onNewIntent()}</code> の呼び出しによって Intent オブジェクトがアクティビティに渡されます(最初にアクティビティを開始したインテント オブジェクトは <code>{@link android.app.Activity#getIntent getIntent()}</code> を呼び出して取得できます)。
+</p>
+
+<p>
+なお、新しいインテントを処理するためにアクティビティの新しいインスタンスが作成された場合、ユーザーは [[]戻る] キーを押して 1 つ前の状態(1 つ前のアクティビティ)に戻ることができます。しかし、アクティビティの既存のインスタンスで新しいインテントを処理する場合は、[[]戻る] キーを押しても、新しいインテントが届く前にそのインスタンスで処理していた作業に戻ることはできません。
+</p>
+
+<p>
+起動モードについて詳しくは、<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> 要素の説明をご覧ください。 
+</p>
+
+
+<h3 id="clearstack">スタックのクリア</h3>
+
+<p>
+ユーザーがタスクを長時間放置すると、タスクのルート アクティビティを除くすべてのアクティビティがクリアされます。ユーザーがタスクに戻ると、タスクは以前のように表示されますが、残っているのは最初のアクティビティだけです。つまり、一定の時間が経過していればユーザーは以前の作業を放棄していて、新しい作業をするためにそのタスクに戻ってきたと考えるわけです。
+</p>
+
+<p>
+これがデフォルトです。この動作を変更したい場合は、以下のアクティビティ属性を使用します:
+</p>
+
+<dl>
+<dt><code><a 
+href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code> 属性</dt>
+<dd>タスクのルート アクティビティでこの属性を "{@code true}" に設定すると、上で説明したデフォルトの動作は発生しません。長時間経過しても、タスク内のすべてのアクティビティはそのまま残されます。</dd>
+
+<dt><code><a 
+href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code> 属性</dt>
+<dd>タスクのルート アクティビティでこの属性を "{@code true}" に設定した場合、ユーザーがいったんタスクを離れると、戻ったときにはルートを含むすべてのアクティビティがクリアされています。つまり、{@code alwaysRetainTaskState} の正反対の動作になります。ユーザーが一瞬でもタスクを離れると、最初の状態からやり直すことになります。</dd>
+
+<dt><code><a 
+href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTaskLaunch</a></code> 属性</dt>
+<dd>この属性は {@code clearTaskOnLaunch} に似ていますが、タスク全体ではなく単一のアクティビティに作用します。また、ルート アクティビティを含むどのアクティビティもクリアの対象となりえます。この属性が "{@code true}" に設定されたアクティビティは、現在のセッションの間のみタスクの一部を形成します。ユーザーがいったんそのタスクから離れてから、再度タスクに戻ると、このアクティビティはクリアされています</dd>
+</dl>
+
+<p>
+アクティビティをスタックから削除する方法は他にもあります。Intent オブジェクトに <code>{@link 
+android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_CLEAR_TOP}</code> フラグが含まれており、そのインテントを処理すべきタイプのアクティビティのインスタンスが対象タスクのスタック内に存在する場合は、そのインスタンスがスタックの最上位になってインテントに応答できるよう、それより上位のアクティビティはすべてクリアされます。指定されたアクティビティの起動モードが "{@code standard}" である場合は、そのアクティビティもスタックから削除され、新しいインスタンスが起動してインテントを処理します。起動モード "{@code standard}" では、新しいインテントを処理する際、常に新しいインスタンスが作成されるためです。
+</p>
+
+<p>
+{@code FLAG_ACTIVITY_CLEAR_TOP} は、ほとんどの場合 {@code FLAG_ACTIVITY_NEW_TASK} と組み合わせて使用します。これらのフラグを組み合わせると、別のタスクに既に存在しているアクティビティを探し、それをインテントに応答できる位置に配置できます。  
+</p>
+
+
+<h3 id="starttask">タスクの開始</h3>
+
+<p>
+アクティビティをタスクのエントリ ポイントとして設定するには、アクションとして "{@code android.intent.action.MAIN}"、カテゴリとして "{@code android.intent.category.LAUNCHER}" を指定したインテント フィルタをアクティビティに追加します(このタイプのフィルタの例については、<a href="#ifilters">インテント フィルタ</a>をご覧ください)。このタイプのフィルタを追加すると、アクティビティのアイコンとラベルがアプリケーション ランチャに表示されます。これにより、ユーザーがタスクを起動するための手段を提供できるだけでなく、起動後はいつでもそのタスクに戻れるようにすることができます。
+</p>
+
+<p>
+この 2 番目の機能、つまりユーザーがいったんタスクを離れても後で戻ることができるようにする点が重要です。この理由から、アクティビティに {@code MAIN} と {@code LAUNCHER} フィルタが指定されている場合は、必ずタスクが開始される起動モード("{@code singleTask}" または "{@code singleInstance}")を使用する必要があります。たとえば、このフィルタを指定しなかった場合を考えてみましょう。インテントが "{@code singleTask}" アクティビティを起動し、新しいタスクが開始され、ユーザーがしばらくの間このタスクで作業を行います。その後、ユーザーが [ホーム] キーを押したとします。ホーム画面が表示され、先ほどのタスクはバックグラウンドに移動します。しかし、このタスクはアプリケーション ランチャには表示されていないため、ユーザーがタスクに戻るための手段がありません。
+</p>
+
+<p>
+{@code FLAG_ACTIVITY_NEW_TASK} フラグにも、これと同じような難しさがあります。このフラグを指定したアクティビティでは、新しいタスクを開始した後にユーザーが [ホーム] キーを押してそのタスクを離れた場合に備え、タスクに戻るための手段を用意しておく必要があります。一部のエンティティ(たとえば通知マネージャ)は、アクティビティを常に外部タスクとして開始します。エンティティの一部として開始することはないため、{@code startActivity()} に渡すインテントには必ず {@code FLAG_ACTIVITY_NEW_TASK} を指定します。外部エンティティから呼び出すことのできるアクティビティでこのフラグが使用されている可能性がある場合は、開始されたタスクにユーザーが戻るための手段を別途提供するようにしてください。
+</p> 
+
+<p>
+ユーザーがアクティビティに戻ることができるようにしない場合は、{@code &lt;activity&gt;} 要素の {@code finishOnTaskLaunch} を "{@code true}" に設定します。詳しくは、<a href="#clearstack">スタックのクリア</a>をご覧ください。
+</p>
+
+
+<h2 id="procthread">プロセスとスレッド</h2>
+
+<p>
+Android では、最初のアプリケーション コンポーネントを実行する必要が生じると、そのための Linux プロセスを単一の実行スレッドで開始します。デフォルトでは、アプリケーションのすべてのコンポーネントがそのプロセスとスレッドで実行されます。
+</p>
+
+<p>
+ただし、コンポーネントが他のプロセスで実行されるようにしたり、特定のプロセスに使用する追加スレッドを生成したりすることも可能です。
+</p>
+
+
+<h3 id="procs">プロセス</h3>
+
+<p>
+コンポーネントを実行するプロセスは、マニフェスト ファイルで管理します。コンポーネントの各要素({@code &lt;activity&gt;}、{@code &lt;service&gt;}、{@code &lt;receiver&gt;}、および {@code &lt;provider&gt;})には {@code process} 属性があり、そのコンポーネントをどのプロセスで実行すべきかを指定できるようになっています。これらの属性の設定によって、それぞれのコンポーネントを専用のプロセスで実行したり、一部のコンポーネントだけでプロセスを共有したりできます。また、別々のアプリケーションのコンポーネントが、同じプロセスで実行されるように設定することもできます。この場合は、それらのアプリケーションが同じ Linux ユーザー ID を共有し、同じ認証機関によって署名されている必要があります。{@code &lt;application&gt;} 要素にも {@code process} 属性があり、すべてのコンポーネントに適用されるデフォルト値を設定できます。
+</p>
+
+<p>
+すべてのコンポーネントは指定されたプロセスのメイン スレッドでインスタンス化され、コンポーネントに対するシステム コールはそのスレッドからディスパッチされます。1 つのインスタンスに対して、複数のスレッドが作成されることはありません。したがって、システム コールに応答するメソッド(たとえば、後ほど<a href="#lcycles">コンポーネント ライフサイクル</a>で説明するライフサイクル通知や、ユーザーのアクションを報告する <code>{@link android.view.View#onKeyDown View.onKeyDown()}</code> のようなメソッド)は、常にそのプロセスのメイン スレッドで実行されます。つまり、コンポーネントがシステムから呼び出されたときに、プロセス内の他のコンポーネントの実行を妨げないよう、実行に時間がかかる処理や他の妨げになることの多い処理(ネットワーク処理、ループ計算など)をできる限り避ける必要があるということです。時間がかかる処理には別のスレッドを生成できます。詳しくは、次の<a href="#threads">スレッド</a> セクションをご覧ください。
+</p>
+
+<p>
+状況によっては、Android がプロセスを終了させるべきと判断する場合があります。たとえば、メモリが不足してきた場合や、他のプロセスでユーザーにすばやく応答する必要がある場合です。プロセスが終了すると、そのプロセス内で実行されているアプリケーション コンポーネントは破棄されます。それらのコンポーネントで処理する作業がもう一度発生すると、そのためのプロセスが再び開始されます。
+</p>  
+
+<p>
+Android では、どのプロセスを終了させるかを判断するため、ユーザーにとっての相対的な重要度を重み付けして管理します。たとえば、アクティビティがまだ画面に表示されているプロセスを終了させるよりも、アクティビティが画面に表示されていないプロセスを終了させる方が合理的です。したがって、プロセスを終了させるかどうかは、そのプロセスで実行されているコンポーネントの状態に応じて判断されるということです。コンポーネントの状態については、後ほど<a href="#lcycles">コンポーネントのライフサイクル</a>で詳しく説明します。
+</p>
+
+
+<h3 id="threads">スレッド</h3>
+
+<p>
+アプリケーションを単一のプロセスに限定したとしても、バックグラウンドでの処理にスレッドが必要になることはよくあります。ユーザー インターフェースはユーザーのアクションに対して常にすばやく応答できなければならないため、アクティビティをホストするスレッドで、ネットワーク ダウンロードのような時間のかかる処理を一緒にホストしないようにする必要があります。すぐに完了しない可能性のあるすべての処理は、別のスレッドに割り当てるようにしてください。 
+</p>
+
+<p>
+スレッドは、標準の Java {@link java.lang.Thread} オブジェクトを使用してコード内で作成します。Android には、スレッドを管理するための便利なクラスが数多く用意されています。たとえば、スレッド内でメッセージ ループを実行するための {@link android.os.Looper}、メッセージを処理するための {@link android.os.Handler}、メッセージ ループでスレッドを設定するための {@link android.os.HandlerThread} などがあります。
+</p>
+
+
+<h3 id="rpc">リモート プロシージャ コール</h3>
+
+<p>
+Androidは軽量な仕組みのリモート・プロシージャ・コール (RPC) を採用しています。RPC とは、メソッドをローカルで呼び出しますが、実行はリモート(別のプロセス)で行い、その結果を呼び出し側に返します。そのためには、メソッド呼び出しとそれに付随するデータをオペレーティングシステムが解釈できるレベルまで分解してから、それらをローカルのプロセスとアドレス空間からリモートのプロセスとアドレス空間に転送し、リモートで呼び出しを再構築する必要があります。戻り値は、反対方向に転送しなければなりません。Android にはこの処理を行うためのコードがすべて用意されているため、RPC インターフェースを定義して実装するだけで RPC を利用できます。
+</p>
+
+<p>
+RPC インターフェースに含めることができるのはメソッドのみです。すべてのメソッドは、戻り値がない場合でも同期的に実行されます(つまり、リモート メソッドが完了するまでローカル メソッドがブロックされます)。
+</p>
+
+<p>
+このメカニズムを簡単に説明すると次のようになります。まず、シンプルなインターフェース定義言語(IDL)を使用して、実装したい RPC インターフェースを宣言します。<code><a href="{@docRoot}guide/components/aidl.html">aidl</a></code> ツールにより、RPC インターフェースの宣言から Java インターフェース定義が生成されます。この定義は、ローカルとリモートの両方のプロセスで使用する必要があります。定義には、次の図に示すように 2 つの内部クラスが含まれています:
+</p>
+
+<p style="margin-left: 2em">
+<img src="{@docRoot}images/binder_rpc.png" alt="RPC のメカニズム"  />
+</p>
+
+<p>
+これらの内部クラスには、IDL で宣言したインターフェースのリモート プロシージャ コールを管理するために必要なコードがすべて含まれています。どちらの内部クラスも {@link android.os.IBinder} インターフェースを実装します。一方の内部クラスは、ローカルのシステムで内部的に使用しますが、記述するコードでは無視しても構いません。もう一方の内部クラスはスタブと呼ばれ、{@link android.os.Binder} クラスを拡張します。スタブには、IPC(プロセス間通信)呼び出しを発生させるための内部コードに加え、IDL で宣言した RPC インターフェース内のメソッドの宣言が含まれます。これらのメソッドを実装するには、図に示すようにスタブをサブクラス化します。2つの内部クラスのうちの一方は、システムがローカルかつ内部的に使用するので、開発者が記述するコードでは無視してかまいません。... リモート側では、図のようにスタブをサブクラス化して、これらのメソッドを実装する必要があります。
+</p>
+
+<p>
+	通常、リモート プロセスはサービスで管理します。サービスなら、プロセスや他のプロセスへの接続に関する情報をシステムに伝えることができるからです。サービスには、{@code aidl} ツールで生成されたインターフェース ファイルと、RPC メソッドを実装するスタブ サブクラスの両方を持たせることになります。サービスのクライアントには、{@code aidl} ツールで生成されたインターフェース ファイルのみを持たせます。
+</p>
+
+<p>
+以下に、サービスとそのクライアントの間の接続がどのように設定されるかを示します:
+</p>
+
+<ul>
+<li>サービスのクライアント(ローカル側)には <code>{@link android.content.ServiceConnection#onServiceConnected
+onServiceConnected()}</code> および<code>{@link android.content.ServiceConnection#onServiceDisconnected
+onServiceDisconnected()}</code> メソッドが実装されているため、リモート サービスとの接続が確立されたときや切断されたときには通知を受けることができます。通知があり次第、<code>{@link android.content.Context#bindService bindService()}</code> を呼び出して接続を設定します。
+</li>  
+
+<li> 
+サービスの <code>{@link android.app.Service#onBind onBind()}</code> メソッドは、受け取ったインテント({@code bindService()} に渡されたインテント)に応じて、接続を承認または拒否するために実装します。接続が承認されると、接続を承認するのであれば、スタブ サブクラスのインスタンスを返します。
+</li>
+
+<li>サービスが接続を承認すると、Android がクライアントの {@code onServiceConnected()} メソッドを呼び出し、IBinder オブジェクト(サービスが管理するスタブ サブクラスのプロキシ)を渡します。クライアントは、このプロキシを介してリモートサービスを呼び出すことができます。  
+</li>
+</ul>
+
+<p>
+ここでは、説明を簡単にするため、RPC メカニズムの細かい点は省略しています。詳しくは、<a href="{@docRoot}guide/components/aidl.html">Designing a Remote Interface Using AIDL</a>、および {@link android.os.IBinder IBinder} クラスの説明をご覧ください。
+</p>  
+
+
+<h3 id="tsafe">スレッドセーフなメソッド</h3>
+
+<p>
+状況によっては実装したメソッドが複数のスレッドから呼び出されることもあるため、スレッドセーフな記述を心掛ける必要があります。
+</p>
+
+<p>
+前のセクションで説明した RPC のようにメソッドをリモートで呼び出すことができる場合は、このような状況が特に発生しやすくなります。IBinder オブジェクトに実装されているメソッドを IBinder と同じプロセスから呼び出すと、そのメソッドは呼び出し側のスレッドで実行されます。一方、別のプロセスからメソッドを呼び出した場合は、プロセスのメイン スレッドではなく、IBinder と同じプロセス内に保持されているスレッドのプールから選択されたスレッドで実行されます。たとえば、サービスの {@code onBind()} メソッドはそのサービスのプロセスのメイン スレッドから呼び出されるのに対し、{@code onBind()} から返されたオブジェクトに実装されているメソッド(たとえば RPC メソッドを実装するスタブ サブクラス)はプール内のスレッドから呼び出されます。サービスには複数のクライアントを割り当てることができるため、複数のプール スレッドを同じ IBinder に同時に割り当てることも可能です。したがって、IBinder メソッドはスレッドセーフになるように実装する必要があります。
+</p>  
+
+<p>
+同様に、コンテンツ プロバイダも別のプロセスからのデータ リクエストを受け取ることができます。ContentResolver および ContentProvider クラスはプロセス間通信の管理の詳細を隠蔽しますが、それらのリクエストに応答する ContentProvider メソッド(<code>{@link android.content.ContentProvider#query query()}</code>、<code>{@link android.content.ContentProvider#insert insert()}</code>、<code>{@link android.content.ContentProvider#delete delete()}</code>、<code>{@link android.content.ContentProvider#update update()}</code>、および <code>{@link android.content.ContentProvider#getType getType()}</code> メソッド)は、プロセスのメイン スレッドではなく、コンテンツ プロバイダのプロセス内のスレッドのプールから呼び出されます。これらのメソッドを同時に呼び出すことのできるメソッドの数に制限はありません。したがって、これらのメソッドもスレッドセーフになるように実装する必要があります。
+</p> 
+
+
+<h2 id="lcycles">コンポーネントのライフサイクル</h2>
+
+<p>
+アプリケーション コンポーネントにはライフサイクルがあります。ライフサイクルは、インテントへ応答することでのインスタンス化で始まり、そのインスタンスの破棄で終わります。この間、コンポーネントがアクティブなときとアクティブでないときがあり、アクティビティであればユーザーから見えるときと見えないときがあります。このセクションでは、アクティビティ、サービス、およびブロードキャスト レシーバのライフサイクルについて説明します。具体的には、それぞれがライフタイムの間に取ることのできる状態、状態の遷移を通知する方法、およびそれらの状態が、コンポーネントを実行しているプロセスが終了させられたり、インスタンスが破棄されたりする可能性への影響などについて説明します。
+</p> 
+
+
+<h3 id="actlife">アクティビティのライフサイクル</h3>
+
+<p>アクティビティは、基本的に以下の 3 つの状態を取ります:</p>
+
+<ul>
+<li> 状態がアクティブまたは実行中のアクティビティは、画面のフォアグラウンドに表示されている(つまり現在のタスクのアクティビティ スタックの最上位にある)アクティビティです。<em></em><em></em>これが、ユーザーのアクションの焦点となっているアクティビティです。</li>
+
+<li><p>状態が一時停止のアクティビティは、ユーザーのアクションの焦点から外れていますが、まだユーザーから見ることのできるアクティビティです。<em></em>つまり、それよりも前面に他のアクティビティが表示されていますが、そのアクティビティが透明か全画面表示でないかのどちらかで、一時停止しているアクティビティの一部が見えている状態です。一時停止しているアクティビティは、完全に動作しています(すべての状態やメンバー情報は保持されており、ウィンドウ マネージャにアタッチされたままになっています)。ただし、メモリが極端に不足した場合は、システムによって強制終了させられる可能性があります。</p></li>
+
+<li><p>状態が停止のアクティビティは、別のアクティビティに隠されて完全に見えなくなったアクティビティです。<em></em>すべての状態とメンバー情報はまだ保持しています。しかし、もうユーザーに対して表示されていないため、他でメモリが必要な場合は強制終了させられる可能性が高いアクティビティです。</p></li>
+</ul>
+
+<p>
+システムが一時停止または停止しているアクティビティをメモリから削除する場合は、アクティビティの {@link android.app.Activity#finish finish()} メソッドを呼び出して終了を要求するか、単純のそのプロセスを強制終了します。そのアクティビティをもう一度ユーザーに表示する際は、完全に再起動して以前の状態に復元する必要があります。
+</p>
+
+<p>
+アクティビティがある状態から別の状態に遷移すると、以下の protected メソッドに対する呼び出しによって変更が通知されます:
+</p>
+
+<p style="margin-left: 2em">{@code void onCreate(Bundle <i>savedInstanceState</i>)} <br/>{@code void onStart()} <br/>{@code void onRestart()} <br/>{@code void onResume()} <br/>{@code void onPause()} <br/>{@code void onStop()} <br/>{@code void onDestroy()}</p>
+
+<p>
+これらのメソッドはすべて、状態が変化したときに適切な処理を行うためにオーバーライドできるフックです。オブジェクトが初めてインスタンス化されたときに初期設定を行うため、すべてのアクティビティには <code>{@link android.app.Activity#onCreate onCreate()}</code> を実装する必要があります。多くのアクティビティには、データの変更をコミットするための <code>{@link android.app.Activity#onPause onPause()}</code> も実装します。これを実装しない場合は、何らかの方法でユーザーとの対話を停止できるようにしておく必要があります。
+</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>スーパークラスの呼び出し</h2>
+<p>
+どのアクティビティ ライフサイクル メソッドの実装でも、必ず最初にスーパークラス バージョンを呼び出す必要があります。次に例を示します:
+</p>
+
+<pre>protected void onPause() {
+    super.onPause();
+    . . .
+}</pre>
+</div>
+</div> 
+
+
+<p>
+これら 7 つのメソッドを使用すると、アクティビティのライフサイクル全体を定義できます。これらを実装することで、ネストされた 3 つのループからなるアクティビティのライフサイクルを監視できます: 
+</p> 
+
+<ul>
+<li>アクティビティの<b>ライフタイム全体</b>は、<code>{@link android.app.Activity#onCreate onCreate()}</code> が初めて呼び出されたときに始まり、最後に <code>{@link android.app.Activity#onDestroy}</code> が呼び出されたときに終了します。アクティビティは、{@code onCreate()} で「全体的」な状態のすべての初期設定を行い、{@code onDestroy()} 残っていたリソースをすべて解放します。たとえば、ネットワークからのデータのダウンロードをバックグラウンドで実行するスレッドは、{@code onCreate()} で作成され、{@code onDestroy()} で停止します。</li>
+
+<li><p>アクティビティの<b>可視ライフタイム</b>は、<code>{@link android.app.Activity#onStart onStart()}</code> の呼び出しで始まり、対応する <code>{@link android.app.Activity#onStop onStop()}</code> の呼び出しで終了します。このライフタイムの間は、ユーザーが画面上でそのアクティビティを見ることができます。ただし、アクティビティがフォアグラウンドにない場合や、ユーザーと対話していない場合もあります。これらの 2 つのメソッドの間は、ユーザーに対してアクティビティを表示するために必要なリソースを確保できます。たとえば、{@code onStart()} で {@link android.content.BroadcastReceiver} を登録して UI に影響する変化を監視し、表示しているアクティビティがユーザーから見えなくなったら {@code onStop()} で登録を解除できます。{@code onStart()} および {@code onStop()} メソッドは、アクティビティがユーザーから見え隠れするたびに繰り返し呼び出すことができます。</p></li>
+
+<li><p>アクティビティの<b>フォアグラウンド ライフタイム</b>は、<code>{@link android.app.Activity#onResume onResume()}</code> の呼び出しで始まり、対応する <code>{@link android.app.Activity#onPause onPause()}</code> の呼び出しで終了します。フォアグラウンド ランタイムの間は、このアクティビティが他のどのアクティビティよりも前面に表示され、ユーザーと対話しています。アクティビティは、一時停止状態と再開状態の間を頻繁に遷移します。たとえば、デバイスがスリープ状態になるときや新しいアクティビティを開始するときには {@code onPause()} が呼び出され、アクティビティの結果や新しいインテントが届いたときには {@code onResume()} が呼び出されます。したがって、これらのメソッドを記述する際は、できるだけ軽量化しておく必要があります。</p></li>
+</ul>
+
+<p>
+次の図に、これらのループとアクティビティの遷移経路を示します。色の付いた楕円は、アクティビティが取ることのできる主な状態です。長方形は、アクティビティが状態間を遷移するときに処理を実行するために実装できるコールバック メソッドを表します。
+<p>
+
+<p style="margin-left: 2em"><img src="{@docRoot}images/activity_lifecycle.png"
+alt="Android のアクティビティ ライフサイクルの状態遷移図"  /></p>  
+  
+<p>
+次の表では、各メソッドについて詳しく説明し、ライフサイクル全体における位置付けを示します:
+</p>
+
+<table border="2" width="85%" frame="hsides" rules="rows">
+<colgroup align="left" span="3"></colgroup>
+<colgroup align="left"></colgroup>
+<colgroup align="center"></colgroup>
+<colgroup align="center"></colgroup>
+
+<thead>
+<tr><th colspan="3">メソッド</th> <th>説明</th> <th>強制終了</th> <th>次</th></tr>
+</thead>
+
+<tbody>
+<tr>
+  <td colspan="3" align="left"><code>{@link android.app.Activity#onCreate onCreate()}</code></td>
+  <td>アクティビティが初めて作成されるときに呼び出されます。通常の静的な設定(ビューの作成、リストへのデータのバインドなど)は、すべてのこのメソッドで行う必要があります。このアクティビティの      以前の状態が保存されていた場合、このメソッドにはその状態を保持している Bundle オブジェクトが引数として(詳しくは、後述の<a href="#actstate">アクティビティの状態の保存</a>をご覧ください)。
+      <p>この後には、必ず {@code onStart()} が呼び出されます。</p></td>
+  <td align="center">不可</td>
+      <td align="center">{@code onStart()}</td>
+</tr>
+
+<tr>
+   <td rowspan="5" style="border-left: none; border-right: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+   <td colspan="2" align="left"><code>{@link android.app.Activity#onRestart 
+onRestart()}</code></td>
+   <td>アクティビティが停止した後、それをもう一度開始する直前に呼び出されます。
+       <p>この後には、必ず {@code onStart()} が呼び出されます。</p></td>
+   <td align="center">不可</td>
+   <td align="center">{@code onStart()}</td>
+</tr>
+
+<tr>
+   <td colspan="2" align="left"><code>{@link android.app.Activity#onStart onStart()}</code></td>
+   <td>アクティビティがユーザーから見えるようになる直前に呼び出されます。
+       <p>その後、アクティビティがフォアグラウンドに表示された場合は {@code onResume()} が、他のアクティビティの後ろに隠れた場合は {@code onStop()} が呼び出されます。</p></td>
+    <td align="center">不可</td>
+    <td align="center">{@code onResume()} <br/>または<br/>{@code onStop()}</td>
+</tr>
+
+<tr>
+   <td rowspan="2" style="border-left: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+   <td align="left"><code>{@link android.app.Activity#onResume onResume()}</code></td>
+   <td>アクティビティがユーザーとの対話を開始する直前に呼び出されます。この時点で、アクティビティはアクティビティ スタックの最上位にあり、ユーザーからの入力はこのアクティビティに対して行われます。
+       <p>この後には、必ず {@code onPause()} が呼び出されます。</p></td>
+   <td align="center">不可</td>
+   <td align="center">{@code onPause()}</td>
+</tr>
+
+<tr>
+   <td align="left"><code>{@link android.app.Activity#onPause onPause()}</code></td>
+   <td>システムが別のアクティビティを開始しようとしているときに呼び出されます。このメソッドは、保存されていない変更を永続データにコミットする場合や、アニメーションのように CPU を大量に消費する処理を停止する場合に使用するのが一般的です。このメソッドが終了するまでは次のアクティビティが開始されたないため、できる限り短時間で実行できるようにしておく必要があります。
+       <p>その後、アクティビティがフォアグラウンドに戻った場合は {@code onResume()} が、ユーザーから見えなくなった場合は {@code onStop()} が呼び出されます。</td>
+   <td align="center"><strong style="color:#800000">可能</strong></td>
+   <td align="center">{@code onResume()} <br/>または<br/>{@code onStop()}</td>
+</tr>
+
+<tr>
+   <td colspan="2" align="left"><code>{@link android.app.Activity#onStop onStop()}</code></td>
+   <td>アクティビティがユーザーから見えなくなったときに呼び出されます。見えなくなる状況としては、アクティビティが破棄された場合や、再開された別のアクティビティ(既存か新規かを問わず)によって隠された場合が考えられます。 
+       <p>その後、アクティビティがユーザーとの対話に戻った場合は {@code onRestart()} が、アクティビティが完全に終了する場合は {@code onDestroy()} が呼び出されます。</p></td>
+   <td align="center"><strong style="color:#800000">可能</strong></td>
+   <td align="center">{@code onRestart()} <br/>または<br/>{@code onDestroy()}</td>
+</tr>
+
+<tr>
+   <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy 
+onDestroy()}</code></td>
+   <td>アクティビティが破棄される前に呼び出されます。これが、アクティビティが受け取る最後の呼び出しとなります。このメソッドが呼び出される状況としては、アクティビティが完了する場合(<code>{@link android.app.Activity#finish 
+       finish()}</code> が呼び出されたとき)や、システムが領域を確保するために一時的にそのアクティビティのインスタンスを破棄する場合が考えられます。これらの 2 つの状況は、<code>{@link
+       android.app.Activity#isFinishing isFinishing()}</code> メソッドを使用して識別できます。</td>
+   <td align="center"><strong style="color:#800000">可能</strong></td>
+   <td align="center"><em>なし</em></td>
+</tr>
+</tbody>
+</table>
+
+<p>
+表の<b>強制終了</b>列に注目してください。この列は、メソッドが終了した後であれば、システムがアクティビティのコードの別の行を実行することなくいつでもアクティビティを実行しているプロセスを強制終了できるかどうかを示しています。<em></em>{@code onPause()}、{@code onStop()}、および {@code onDestroy()} メソッドの 3 つは「可能」となっています。1 番目に挙げた {@code onPause()} だけは、プロセスが強制終了する前に必ず呼び出されます。{@code onStop()} と {@code onDestroy()} は、必ず呼び出されるとは限りません。したがって、永続データ(たとえばユーザーによる編集)をストレージに書き込む際は {@code onPause()} を使用する必要があります。
+</p>
+
+<p>
+<b>強制終了</b>列が「不可」になっているメソッドは、それらが呼び出された瞬間から、アクティビティを実行しているプロセスを保護して強制終了されないようにします。したがって、アクティビティが強制終了可能な状態にあるのは、たとえば {@code onPause()} が返されてから {@code onResume()} が呼び出されるまでの間ということです。その後は、もう一度 {@code onPause()} が返されるまで、強制終了できる状態には戻りません。
+</p>
+
+<p>
+後述の<a href="#proclife">プロセスとライフサイクル</a>のセクションで詳しく説明しますが、ここでの定義で技術的には「強制終了可能」でないアクティビティでも、システムによって強制終了させられる可能性はありますが、他に利用できるリソースがないなど、極端に急を要する場合に限られます。
+</p>
+
+
+<h4 id="actstate">アクティビティの状態の保存</h4>
+
+<p>
+メモリ不足を補うためにユーザーではなくシステムがアクティビティを終了させた場合には,ユーザがそのアクティビティに戻ったときに、以前の状態のままであることを期待するでしょう。
+</p>
+
+<p>
+アクティビティが強制終了させられる前の状態を保存しておきたい場合は、アクティビティに <code>{@link android.app.Activity#onSaveInstanceState 
+onSaveInstanceState()}</code> メソッドを実装します。このメソッドは、アクティビティが破棄されやすい状態になる前(つまり {@code onPause()} が呼び出される前)に呼び出されます。その際、アクティビティの動的な状態を名前/値ペアとして記録できる {@link android.os.Bundle} オブジェクトが渡されます。アクティビティがもう一度開始されると、Bundle は {@code onCreate()} だけでなく、{@code onStart()} の後に呼び出される <code>{@link 
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}</code> メソッドにも渡され、保存されている状態をそのどちらかまたは両方で復元できます。
+</p>
+
+<p>
+{@code onSaveInstanceState()} および {@code onRestoreInstanceState()} メソッドは、これまでに説明した {@code onPause()} などとは異なり、ライフサイクル メソッドではありません。これらのメソッドは、常に呼び出されるわけではありません。たとえば、{@code onSaveInstanceState()} は、システムによってアクティビティが破棄しやすい状態にされる前には呼び出されますが、ユーザーのアクション(たとえば [[]戻る] キー)によってインスタンスが実際に破棄されるときには呼び出されません。そのような場合は、ユーザーがそのアクティビティに戻ることを想定する必要はないため、状態を保存する理由がないのです。
+</p>
+
+<p>
+{@code onSaveInstanceState()} は常に呼び出されるとは限らないため、アクティビティの一時的な状態を記録する目的のみに使用し、永続データの格納には使用しないようにしてください。この目的には {@code onPause()} を使用します。
+</p>
+
+
+<h4 id="coordact">アクティビティの協調</h4>
+
+<p>
+あるアクティビティが別のアクティビティを開始すると、両方のアクティビティのライフサイクル状態が遷移します。一方が一時停止または停止し、もう一方が開始されます。場合によっては、これらの協調させる必要があります。
+</p>
+
+<p>
+ライフサイクルのコールバックの順序は明確に定義されており、特に 2 つのアクティビティが同じプロセス内に存在する場合は次のようになります:
+</p>
+
+<ol>
+<li>現在のアクティビティの {@code onPause()} メソッドが呼び出されます。</li>
+
+<li>続いて、開始されるアクティビティの {@code onCreate()}、{@code onStart()}、および {@code onResume()} メソッドが順番に呼び出されます。</li>
+
+<li>その後、開始されたアクティビティが画面上で見えなくなると、その {@code onStop()} メソッドが呼び出されます。</li>
+</ol>
+
+
+<h3 id="servlife">サービスのライフサイクル</h3>
+
+<p>
+サービスは、以下の 2 つの方法で使用できます:
+</p>
+
+<ul>
+<li>いったん開始したら、停止させられる(または自ら停止する)まで実行し続けることができます。このモードでは、<code>{@link android.content.Context#startService Context.startService()}</code> が呼び出されて開始し、<code>{@link android.content.Context#stopService Context.stopService()}</code> 呼び出されて停止します。サービス自体が <code>{@link android.app.Service#stopSelf() Service.stopSelf()}</code> または <code>{@link android.app.Service#stopSelfResult Service.stopSelfResult()}</code> を呼び出して停止することもできます。サービスの開始時に {@code startService()} が何度呼び出されたとしても、{@code stopService()} を一度呼び出せばサービスは停止します。</li>
+
+<li><p>サービスで定義されているインターフェースをエクスポートし、これを介してプログラム的に操作できます。クライアントから Service オブジェクトへの接続を確立し、その接続を使用してサービスにアクセスします。接続は、<code>{@link android.content.Context#bindService Context.bindService()}</code> を呼び出して確立し、<code>{@link android.content.Context#unbindService Context.unbindService()}</code> でサービスを開始します。複数のクライアントが同じサービスにバインドすることも可能です。サービスがまだ開始されていなかった場合は,必要に応じて {@code bindService()} で開始できます。
+</p></li>
+</ul>
+
+<p>
+これら 2 つのモードは、完全に分離されているわけではありません。{@code startService()} で開始されたサービスにバインドすることも可能です。たとえば、再生する曲を指定した Intent オブジェクトで {@code startService()} を呼び出して音楽再生サービスを開始したとします。その後、たとえばユーザーがプレーヤーを操作したい場合や再生中の曲に関する情報を入手したい場合には、アクティビティから {@code bindService()} を呼び出してサービスとの接続を確立できます。このような場合、最後のバインドが閉じられるまでは、{@code stopService()} を呼び出してもサービスは停止しません。
+</p>
+
+<p>
+アクティビティと同様、サービスにもライフサイクル メソッドがあり、これらを実装することでサービスの状態の変化を監視できます。ただし、protected ではなく public で、以下の 3 つしかありません:
+</p>
+
+<p style="margin-left: 2em">{@code void onCreate()} <br/>{@code void onStart(Intent <i>intent</i>)} <br/>{@code void onDestroy()}</p>
+
+<p>
+これらのメソッドを実装することで、ネストされた 2 つのループからなるサービスのライフサイクルを監視できます:
+</p>
+
+<ul>
+<li>サービスの<b>ライフタイム全体</b>は、<code>{@link android.app.Service#onCreate onCreate()}</code> が呼び出されたときに始まり、<code>{@link android.app.Service#onDestroy}</code> 終了したときに終わります。アクティビティと同じく、サービスも {@code onCreate()} で初期設定を行い、{@code onDestroy()} で残っていたリソースをすべて解放します。たとえば、音楽再生サービスであれば、{@code onCreate()} で音楽を再生するスレッドを作成し、{@code onDestroy()} でそのスレッドを停止できます。</li>
+
+<li><p>サービスの<b>アクティブ ライフタイム</b>は、<code>{@link android.app.Service#onStart onStart()}</code> を呼び出したときに始まります。このメソッドには、{@code startService()} に渡された Intent オブジェクトが渡されます。音楽再生サービスは、この Intent オブジェクトをみて曲を見つけ、その再生を開始します。</p>
+
+<p>
+サービスの停止に相当するコールバック、つまり {@code onStop()} メソッドはありません。
+</p></li>
+</ul>
+
+<p>
+{@code onCreate()} および {@code onDestroy()} メソッドは、サービスを <code>{@link android.content.Context#startService Context.startService()}</code> または <code>{@link android.content.Context#bindService Context.bindService()}</code> のどちらで開始したかに関係なく、すべてのサービスで呼び出されます。一方、{@code onStart()} は、サービスを {@code startService()} で開始した場合のみ呼び出されます。
+</p>
+
+<p>
+サービスが他からのバインドを許可している場合は、以下のコールバック メソッドを追加で実装できます:
+</p>
+
+<p style="margin-left: 2em">{@code IBinder onBind(Intent <i>intent</i>)} <br/>{@code boolean onUnbind(Intent <i>intent</i>)} <br/>{@code void onRebind(Intent <i>intent</i>)}</p>
+
+<p>
+<code>{@link android.app.Service#onBind onBind()}</code> コールバックには {@code bindService()} に渡された Intent オブジェクトが渡され、<code>{@link android.app.Service#onUnbind onUnbind()}</code> には {@code unbindService()} 渡された Intent オブジェクトが渡されます。サービスがバインドを許可している場合は、クライアントがサービスと対話する通信チャネルを {@code onBind()} で返します。{@code onUnbind()} メソッドは、サービスに新しいクライアントが接続した場合に <code>{@link android.app.Service#onRebind onRebind()}</code> の呼び出しを要求できます。
+</p>
+
+<p>
+次の図に、サービスのコールバック メソッドを示します。なお、{@code startService()} で作成されたサービスと、{@code bindService()} で作成されたサービスを分けて記述していますが、作成された方法に関係なく,すべてのサービスはクライアントからのバインドを許可できます。したがって、どのサービスも {@code onBind()} および{@code onUnbind()} メソッドの呼び出しを受け取る可能性はあります。
+</p>
+
+<p style="margin-left: 2em"><img src="{@docRoot}images/service_lifecycle.png"
+alt="サービス コールバックの状態遷移図"  /></p>
+
+
+<h3 id="broadlife">ブロードキャスト レシーバのライフサイクル</h3>
+
+<p>
+ブロードキャスト レシーバのコールバック メソッドは次の 1 つのみです:
+</p>
+
+<p style="margin-left: 2em">{@code void onReceive(Context <i>curContext</i>, Intent <i>broadcastMsg</i>)}</p>
+
+<p>
+レシーバにブロードキャスト メッセージが届くと、<code>{@link android.content.BroadcastReceiver#onReceive onReceive()}</code> メソッドが呼び出され、メッセージを保持する Intent オブジェクトが渡されます。ブロードキャスト レシーバは、このメソッドの実行中のみアクティブと見なされます。{@code onReceive()} 終了すると、ブロードキャスト レシーバはアクティブでなくなります。
+</p>
+
+<p>
+ブロードキャスト レシーバがアクティブになっているプロセスは、強制終了しないよう保護されます。一方、アクティブでないコンポーネントのみからなるプロセスは、それが消費しているメモリが他のプロセスで必要になった場合は、いつでも強制終了される可能性があります。
+</p>
+
+<p>
+この点は、ブロードキャスト メッセージへの応答に時間がかかるため、ユーザー インターフェースの他のコンポーネントを実行しているメイン スレッドとは別のスレッドで何らかの処理を行う必要がある場合に問題になります。{@code onReceive()} が新しいスレッドを生成して終了した場合、プロセス内に他にアクティブなアプリケーション コンポーネントがなければ、そのスレッドを含めたプロセス全体がアクティブでないと判断されて強制終了させられるおそれがあります。この問題を回避するには、{@code onReceive()} でサービスを開始し、そのサービスにジョブを実行させます。これにより、プロセス内にまだアクティブなコンポーネントがあると見なされます。
+</p>
+
+<p>
+次のセクションでは、プロセスが強制終了される可能性が高くなる状況についてさらに詳しく説明します。
+</p>
+
+
+<h3 id="proclife">プロセスとライフサイクル</h3>
+
+<p>Android は、プロセスをできるだけ長い間維持しようとします。しかし、最終的にメモリが不足したときには、古いプロセスを削除しなければならなくなります。Android では、どのプロセスを維持し、どのプロセスを強制終了させるかを判断するため、プロセス内で実行されているコンポーネントと各コンポーネントの状態に基づいて、各プロセスを「重要度の階層」の位置づけます。まず最も重要度の低いプロセスが削除され、次は 2 番目に重要度の低いプロセス、その次に 3 番目、というように判断されます。階層は 5 つのレベルで構成されます。以下では、重要度の高いものから順に説明します:
+</p>
+
+<ol>
+
+<li><b>フォアグラウンド プロセス</b>は、ユーザーがその時点で行っている作業に必要なプロセスです。以下のいずれかの条件を満たしているプロセスは、フォアグラウンド プロセスと見なされます:
+
+<ul>
+<li>ユーザーと対話中のアクティビティを実行している(Activity オブジェクトの <code>{@link android.app.Activity#onResume 
+onResume()}</code> メソッドが呼び出されている)。</li>
+
+<li><p>ユーザーと対話中のアクティビティにバインドされているサービスを実行している。</p></li>
+
+<li><p>いずれかのライフサイクル コールバック(<code>{@link android.app.Service#onCreate 
+onCreate()}</code>、<code>{@link android.app.Service#onStart onStart()}</code>、または <code>{@link android.app.Service#onDestroy onDestroy()}</code>)を実行している {@link android.app.Service} オブジェクトを保持している。</p></li>
+
+<li><p><code>{@link android.content.BroadcastReceiver#onReceive 
+onReceive()}</code> メソッドを実行している {@link android.content.BroadcastReceiver} オブジェクトを保持している。</p></li>
+</ul>
+
+<p>
+同時に存在するフォアグラウンド プロセスは少数に限られています。フォアグラウンド プロセスは、メモリが極端に不足し、すべてのフォアグラウンド プロセスの実行を継続できない場合の最終手段として強制終了させられます。通常、その時点でデバイスはメモリ ページングの状態に達しており、ユーザー インターフェースを応答可能な状態に維持するためには、フォアグラウンド プロセスの一部を強制終了させなければならない状況に陥っています。
+</p></li>
+
+<li><p><b>可視プロセス</b>は、フォアグラウンド コンポーネントではないものの、ユーザーが見ている画面に影響を及ぼすことのできるプロセスです。以下のいずれかの条件を満たしているプロセスは、可視プロセスと見なされます:</p>
+
+<ul>
+<li>フォアグラウンドではないがユーザーから見ることができるアクティビティを実行している(その <code>{@link android.app.Activity#onPause onPause()}</code> メソッドが呼び出されている)。これは、たとえばフォアグラウンド アクティビティがダイアログで、その背後に直前のアクティビティが見えるような状況です。</li>
+
+<li><p>ユーザーから見ることのできるアクティビティにバインドされているサービスを実行している。</p></li>
+</ul>
+
+<p>
+可視プロセスは、非常に重要なプロセスと見なされ、すべてのフォアグラウンド プロセスの実行を維持するために必要でない限り、強制終了させられることはありません。
+</p></li>
+
+<li><p><b>サービス プロセス</b>は、<code>{@link android.content.Context#startService startService()}</code> メソッドで開始されたサービスを実行しているプロセスのうち、より重要度の高い 2 つのレベルのどちらにも該当しないプロセスです。サービス プロセスは、ユーザーに見えるものとの直接的な関係はありませんが、たとえばバックグラウンドでの MP3 の再生、ネットワークからのデータのダウンロードなど、ユーザーが気にかけている処理であることが一般的です。したがって、すべてのフォアグラウンド プロセスと可視プロセスに加え、これらのサービス プロセスの実行を維持するだけのメモリが確保できる限り、強制終了させられることはありません。  
+</p></li>
+
+<li><p><b>バックグラウンド プロセス</b>は、その時点でユーザーから見えないアクティビティを保持している(Activity オブジェクトの <code>{@link android.app.Activity#onStop onStop()}</code> メソッドが呼び出されている)プロセスです。これらのプロセスは、ユーザー エクスペリエンスに直接的には影響しておらず、フォアグラウンド、可視、サービス プロセスからメモリが要求された場合はいつでも強制終了する可能性があります。通常は数多くのバックグラウンド プロセスが実行されているため、それらを LRU(least recently used)リストに登録し、ユーザーが一番最近見たアクティビティのプロセスが最後に強制終了するような仕組みになっています。アクティビティにライフサイクル メソッドが正しく実装されており、現在の状態が正しく保存されていれば、プロセスを強制終了してもユーザー エクスペリエンスに悪影響が及ぶことはありません。 
+</p></li>
+
+<li><p><b>空のプロセス</b>は、アクティブなアプリケーション コンポーネントを保持していないプロセスです。このようなプロセスを維持しておく唯一の理由は、これをキャッシュとして使用し、次回コンポーネントを実行するときの起動時間を短くするためです。多くの場合、システムはこれらのプロセスを強制終了させて、プロセス キャッシュとその基礎となるカーネル キャッシュの間でシステム リソース全体のバランスを取ります。</p></li>
+
+</ol>
+
+<p>
+各プロセスは、その時点でアクティブなコンポーネントの重要度に基づいて、そのプロセスが取りうる最も高いレベルにランク付けされます。たとえば、あるプロセスがサービスと可視アクティビティをホストしている場合、そのプロセスはサービス プロセスではなく可視プロセスとしてランク付けされます。
+</p>
+
+<p>
+また、あるプロセスに他のプロセスが依存しているために、そのプロセスのランクが引き上げられる可能性もあります。他のプロセスから依存されているプロセスが、依存しているプロセスよりも低いレベルにランク付けされることはありません。たとえば、プロセス A 内のコンテンツ プロバイダにプロセス B 内のクライアントが依存している場合や、プロセス A 内のサービスがプロセス B 内のコンポーネントにバインドされている場合、プロセス A は常にプロセス B よりは重要度が高いと見なされます。
+</p> 
+
+<p>
+サービスを実行しているプロセスは、バックグラウンド アクティビティを実行しているプロセスよりも高くランク付けされます。したがって、時間のかかる処理を実行する場合、特にその処理がアクティビティよりも長く続くような場合は、単にスレッドを生成するのではなく、その処理用のサービスを開始することをおすすめします。たとえば、バックグラウンドで音楽を再生する場合や、カメラで撮影した写真を Web サイトにアップロードする場合などはこれに当たります。サービスを使用することで、アクティビティがどのような状況にあっても、処理の重要度として「サービス プロセス」レベル以上を維持できます。<a href="#broadlife">ブロードキャスト レシーバのライフサイクル</a>のセクションでも説明しましたが、ブロードキャスト レシーバにおいてもこれと同じ理由で、処理に時間がかかる場合はスレッドではなくサービスを使用することをおすすめします。
+</p>
diff --git a/docs/html-intl/ja/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/ja/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..c4aafe4
--- /dev/null
+++ b/docs/html-intl/ja/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=電池残量と充電状態の監視
+parent.title=電池消費量の最適化
+parent.link=index.html
+
+trainingnavtop=true
+next.title=ホルダーの装着状態とタイプの特定と監視
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>このレッスンの内容</h2>
+<ol>
+  <li><a href="#DetermineChargeState">現在の充電状態を特定する</a></li>
+  <li><a href="#MonitorChargeState">充電状態の変化を監視する</a></li>
+  <li><a href="#CurrentLevel">現在の電池残量を特定する</a></li>
+  <li><a href="#MonitorLevel">電池残量の大きな変化を監視する</a></li>
+</ol>
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>バックグラウンド更新が電池消費量に及ぼす影響を抑えるために更新の頻度を変更するには、初めに現在の電池残量と充電状態を調べることをおすすめします。</p>
+
+<p>アプリの更新が電池消費量に及ぼす影響の度合いは、端末の電池残量と充電状態によって異なります。AC 電源から端末を充電しているときは、更新の実行による影響はごくわずかなので、ほとんどの場合は、端末が AC 電源に接続されている限り、更新頻度を最大にして差し支えありません。逆に、端末が電池で駆動しているときは、更新頻度を下げると電池消費量を抑えることができます。</p>
+
+<p>同様に、電池残量を調べると、残量がごくわずかであるときに更新頻度を下げたり、場合によっては停止させたりすることができます。</p>
+
+
+<h2 id="DetermineChargeState">現在の充電状態を特定する</h2> 
+ 
+<p>初めに、現在の充電状態を特定します。{@link android.os.BatteryManager} によって電池と充電状態に関するすべての詳細情報が sticky {@link android.content.Intent} としてブロードキャストされますが、この中に充電状態が格納されています。</p>
+
+<p>これは sticky インテントであるため、{@link android.content.BroadcastReceiver} を登録する必要はありません。{@code registerReceiver} を呼び出し、{@code null} をレシーバとして渡すだけで(次のコード例を参照)、現在の電池状態のインテントが返されます。ここで実際の {@link android.content.BroadcastReceiver} オブジェクトを渡すこともできますが、このレッスンでは後で更新についての処理を行うので、これは必要ありません。</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>現在の充電状態に加えて、充電中の場合は USB 経由か AC 充電器経由かを調べることもできます。<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>一般的には、端末が AC 充電器に接続されているときはバックグラウンド更新の頻度を最大にし、USB 経由で充電中のときは頻度を下げ、電池で駆動中のときはさらに頻度を下げます。</p>
+
+
+<h2 id="MonitorChargeState">充電状態の変化を監視する</h2> 
+
+<p>充電状態は、端末が充電器に接続されたときにすぐに変化するので、充電状態の変化を監視し、その変化に応じて更新の頻度を変更することが重要です。</p>
+
+<p>{@link android.os.BatteryManager} は、端末が電源に接続されたときや接続が解除されたときに、アクションをブロードキャストします。このようなイベントは、アプリが実行中でないときでも受信することが重要です。特にそのイベントが、アプリのバックグラウンド更新を開始するためにアプリを起動させる頻度に影響するものである場合です。したがって、{@link android.content.BroadcastReceiver} をアプリのマニフェスト内で登録し、両方のイベントを受信するために {@link android.content.Intent#ACTION_POWER_CONNECTED} と {@link android.content.Intent#ACTION_POWER_DISCONNECTED} をインテント フィルタ内で定義します。</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>関連付けられている {@link android.content.BroadcastReceiver} 実装の中で、前のステップで説明したように、現在の充電状態と充電方法を抽出します。</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">現在の電池残量を特定する</h2> 
+
+<p>状況によっては、現在の電池残量がわかると便利なことがあります。たとえば、電池残量が所定のレベルを下回った場合にアプリのバックグラウンド更新の頻度を下げることができます。</p>
+
+<p>現在の電池残量を調べるには、次に示すように、電池状態のインテントから現在の電池残量と最大量を抽出します。</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">電池残量の大きな変化を監視する</h2> 
+
+<p>電池状態を継続的に監視することは簡単ではありませんが、その必要もありません。</p>
+
+<p>一般的に、電池残量を継続的に監視するほうが、電池への影響はアプリの通常の動作によるものよりも大きくなるため、電池残量の大きな変化のみを監視することをおすすめします。特に、端末が電池残量低下状態に入ったときや、その状態が解消されたときです。</p>
+
+<p>次に示すマニフェストの断片は、ブロードキャスト レシーバの中にあるインテント フィルタ要素からの抜粋です。このレシーバは、端末が電池残量低下状態に入ったときや、その状態が解消されたときに呼び出されます。そのために、{@link android.content.Intent#ACTION_BATTERY_LOW} と {@link android.content.Intent#ACTION_BATTERY_OKAY} を受信します。</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>一般的に、電池残量がごくわずかになったときはアプリのバックグラウンド更新をすべて停止することをおすすめします。データがいくら新しくても、端末自体の電源が切れてしまったのではデータを活用できません。</p>
+
+<p>多くの場合、端末の充電という動作が開始するのは、端末がホルダーにセットされるのと同時です。次のレッスンでは、現在のホルダーの状態を特定し、端末のホルダー装着状態の変化を監視する方法を紹介します。</p>
+
diff --git a/docs/html-intl/ja/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/ja/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..82b0c6b
--- /dev/null
+++ b/docs/html-intl/ja/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=接続状態の特定と監視
+parent.title=電池消費量の最適化
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=ホルダーの装着状態とタイプの特定と監視
+previous.link=docking-monitoring.html
+next.title=オンデマンドでのブロードキャスト レシーバ操作
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>このレッスンの内容</h2>
+<ol>
+  <li><a href="#DetermineConnection">インターネット接続の有無を特定する</a></li>
+  <li><a href="#DetermineType">インターネット接続のタイプを特定する</a></li>
+  <li><a href="#MonitorChanges">接続状態の変化を監視する</a></li>
+</ol>
+
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>
+</ul>
+
+</div> 
+</div>
+
+<p>反復アラームとバックグラウンド サービスの用途のうち代表的なものとしては、インターネット リソースからアプリのデータを定期的に更新するためのスケジュール設定や、データのキャッシュへの格納、長時間に及ぶダウンロードの実行などがあります。しかし、インターネットに接続されていないときや、速度が低すぎるためにダウンロードを完了できない場合にまで、更新をスケジューリングするために端末をスリープ状態から復帰させる必要があるでしょうか。</p>
+
+<p>{@link android.net.ConnectivityManager} を使用すると、端末が実際にインターネットに接続されているかどうかと、接続されている場合の接続タイプを調べることができます。</p>
+
+
+<h2 id="DetermineConnection">インターネット接続の有無を特定する</h2> 
+ 
+<p>端末がインターネットに接続されていない場合は、インターネット リソースに基づく更新をスケジューリングする必要性はありません。次のスニペットは、{@link android.net.ConnectivityManager} を使用してアクティブなネットワークを問い合わせて、インターネットに接続しているかどうかを特定する方法を示すものです。</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">インターネット接続のタイプを特定する</h2> 
+
+<p>現在使用可能なインターネット接続のタイプも調べることができます。</p>
+
+<p>端末の接続のタイプとしては、モバイル データ、WiMAX、Wi-Fi、イーサネットがあります。次に示すように、アクティブなネットワークのタイプを問い合わせると、使用可能な帯域幅に合わせて更新頻度を変更することができます。</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>モバイル データ接続のコストは Wi-Fi 接続を大きく上回る傾向があるため、端末がモバイル接続しているときはアプリの更新頻度を下げるのが一般的です。同様に、大量のデータをダウンロードするときは、Wi-Fi 接続されるまで停止するとよいでしょう。</p>
+
+<p>更新を停止した場合は、接続状態の変化を受信することが重要です。インターネット接続が確立されたら更新を再開できるようにするためです。</p>
+
+
+<h2 id="MonitorChanges">接続状態の変化を監視する</h2> 
+
+<p>接続状態の詳細が変化すると、{@link android.net.ConnectivityManager} によって {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}({@code "android.net.conn.CONNECTIVITY_CHANGE"})アクションがブロードキャストされます。アプリのマニフェスト内でブロードキャスト レシーバを登録し、このような変化を検出することで、それに応じてアプリのバックグラウンド更新を再開(または停止)することができます。</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>端末の接続状態の変化は、きわめて頻繁になることもあります。このブロードキャストは、モバイル データ接続と Wi-Fi 接続とが切り替わるたびに発行されるからです。したがって、このブロードキャストの監視は、更新やダウンロードを停止した後に再開すべきかどうかを判断するために限って行うことをおすすめします。一般的には、更新を開始する前にインターネット接続の有無を調べれば十分です。インターネットに接続していない場合は、再び接続されるまでの間、更新を停止します。</p>
+
+<p>このようにするには、マニフェスト内で宣言したブロードキャスト レシーバのオンとオフを切り替える必要があります。これについて、次のレッスンで説明します。</p>
diff --git a/docs/html-intl/ja/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/ja/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..9c0e054
--- /dev/null
+++ b/docs/html-intl/ja/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=ホルダーの装着状態とタイプの特定と監視
+parent.title=電池消費量の最適化
+parent.link=index.html
+
+trainingnavtop=true
+previous.title= 電池残量と充電状態の監視
+previous.link=battery-monitoring.html
+next.title= 接続状態の特定と監視
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>このレッスンの内容</h2>
+<ol>
+  <li><a href="#CurrentDockState">オーディオ フォーカスをリクエストする</a></li>
+  <li><a href="#DockType">現在のホルダーのタイプを特定する</a></li>
+  <li><a href="#MonitorDockState">ホルダーの装着状態またはタイプの変化を監視する</a></li>
+</ol>
+
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Android 搭載端末を装着できるホルダーの種類には、さまざまなものがあります。たとえば、車載用や家庭用のホルダーがあり、デジタルかアナログかという区別もあります。ホルダー装着状態は一般的に、充電状態と密接にリンクしています。多くのホルダーは、装着されている端末に電力を供給しているからです。</p>
+
+<p>端末のホルダー装着状態が更新の頻度にどのように影響するかは、アプリによって異なります。たとえば、スポーツ センター アプリなら、卓上ホルダー装着時には更新頻度を上げ、カー ホルダー装着時には更新を完全に停止するとよいでしょう。逆に、カー ホルダー装着時に更新頻度を最大にするケースとしては、バックグラウンド サービスによって道路交通状況を更新する場合が考えられます。</p>
+
+<p>ホルダー装着状態も sticky {@link android.content.Intent} としてブロードキャストされるので、端末がホルダーに装着されているかどうかと、装着されている場合のホルダーのタイプを問い合わせることができます。</p>
+
+
+<h2 id="CurrentDockState">現在のホルダー装着状態を特定する</h2> 
+ 
+<p>ホルダー装着状態の詳細は、{@link android.content.Intent#ACTION_DOCK_EVENT} アクションの sticky ブロードキャストにエクストラとして含まれています。これは sticky であるため、{@link android.content.BroadcastReceiver} を登録する必要はありません。次のコード例に示すように、{@link android.content.Context#registerReceiver registerReceiver()} を呼び出し、{@code null} をブロードキャスト レシーバとして渡します。</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>現在のホルダー装着状態は、次のように {@code EXTRA_DOCK_STATE} エクストラから抽出します。<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">現在のホルダーのタイプを特定する</h2> 
+
+<p>端末がホルダーに装着されている場合のホルダーのタイプは、次の 4 つのいずれかです。 
+<ul><li>カー</li>
+<li>卓上</li>
+<li>ローエンド(アナログ)卓上</li>
+<li>ハイエンド(デジタル)卓上</li></ul></p>
+
+<p>最後の 2 つは、Android API レベル 11 で追加されたものです。したがって、ホルダーのタイプだけがわかればよく、デジタルとアナログの区別は問わないという場合は、次のように 3 つすべてについて調べるとよいでしょう。</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">ホルダーの装着状態またはタイプの変化を監視する</h2> 
+
+<p>端末がホルダーに装着されたり、装着が解除されたりするたびに、{@link android.content.Intent#ACTION_DOCK_EVENT} アクションがブロードキャストされます。端末のホルダー装着状態の変化を監視するには、次のコード例に示すように、アプリのマニフェスト内でブロードキャスト レシーバを登録します。</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>レシーバ実装の中でホルダーのタイプと状態を抽出する方法は、前のステップで使用したものと同じです。</p>
diff --git a/docs/html-intl/ja/training/monitoring-device-state/index.jd b/docs/html-intl/ja/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..07897b1
--- /dev/null
+++ b/docs/html-intl/ja/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=電池消費量の最適化
+
+trainingnavtop=true
+startpage=true
+next.title=電池残量と充電状態の監視
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>依存関係と前提条件</h2> 
+<ul>
+  <li>Android 2.0(API レベル 5)以上</li>
+  <li>「<a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>」を読み終えていること</li>
+</ul>
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">サービス</a>
+</ul>
+
+</div> 
+</div>
+
+<p>アプリを開発するときは、ホスト端末の電池消費量への影響を抑えるよう心がける必要があります。このクラスを修了すると、開発するアプリの中でホスト端末の状態を監視し、それに基づいて機能や動作を変更することができるようになります。</p>
+
+<p>接続が失われたときはバックグラウンド サービスの更新を停止する、電池残量が低下したときは更新の頻度を下げるといった対策を講じることにより、ユーザー エクスペリエンスを損なうことなく、アプリが電池消費量に及ぼす影響を最小限に抑えることができます。</p>
+
+<h2>レッスン</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">電池残量と充電状態の監視</a></b></dt>
+  <dd>アプリの更新頻度を変更するために現在の電池残量や充電状態の変化を特定および監視する方法を学習します。</dd>
+
+  <dt><b><a href="docking-monitoring.html">ホルダーの装着状態とタイプの特定と監視</a></b></dt>
+  <dd>最適な更新頻度は、ホスト端末がどのように使用されているかによって異なります。ホルダーの装着状態とタイプに応じてアプリの動作を変更するために、これらを特定および監視する方法を学習します。</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">接続状態の特定と監視</a></b></dt>
+  <dd>インターネットに接続していないときは、オンライン ソースからアプリを更新することはできません。接続状態を調べ、それに応じてバックグラウンド更新の頻度を変更する方法を学習します。また、大量の帯域幅を消費する処理を開始する前に接続が Wi-Fi かモバイル データかを調べる方法も学習します。</dd>
+
+  <dt><b><a href="manifest-receivers.html">オンデマンドでのブロードキャスト レシーバ操作</a></b></dt>
+  <dd>マニフェスト内で宣言したブロードキャスト レシーバのオンとオフを実行時に切り替えます。端末の状態に応じて、不要なレシーバを無効にすることができます。効率を上げるために、状態変化レシーバのオンとオフを切り替える方法や、端末が特定の状態になるまでアクションを延期する方法を学習します。</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html-intl/ja/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/ja/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..7635d9f
--- /dev/null
+++ b/docs/html-intl/ja/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=オンデマンドでのブロードキャスト レシーバ操作
+parent.title=電池消費量の最適化
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=接続状態の特定と監視
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>このレッスンの内容</h2>
+<ol>
+  <li><a href="#ToggleReceivers">効率を上げるために状態変化レシーバのオンとオフを切り替える</a></li>
+</ol>
+
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>
+</ul>
+
+</div> 
+</div>
+
+<p>端末の状態変化を監視する最も単純な方法は、監視対象とする状態ごとに {@link android.content.BroadcastReceiver} を作成し、それぞれをアプリのマニフェスト内で登録するというものです。これらの各レシーバ内で、端末の現在の状態に基づいて反復アラームのスケジュールを再設定します。</p>
+
+<p>この方法のデメリットは、これらのレシーバのいずれかがトリガされるたびに端末がスリープから復帰することですが、このことは必要以上に頻繁に発生する可能性があります。</p>
+
+<p>これよりも良い方法は、実行時にブロードキャスト レシーバをオンまたはオフにするというものです。このようにすれば、マニフェスト内で宣言したレシーバを受動的アラームとして使用できます。つまり、このアラームは、必要なときにだけシステム イベントによって呼び出されます。</p>
+ 
+
+<h2 id="ToggleReceivers">効率を上げるために状態変化レシーバのオンとオフを切り替える </h2> 
+ 
+<p>{@link android.content.pm.PackageManager} を使用すると、マニフェスト内で定義されているコンポーネントの有効化状態を切り替えることができます。このコンポーネントにはブロードキャスト レシーバも該当するので、次に示すようにオンとオフを切り替えることができます。</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>この手法を使用すれば、接続が失われたことが判明した場合に、接続状態変化レシーバ以外のレシーバをすべて無効にすることができます。逆に、接続が確立された後は、接続状態変化の受信を停止します。オンラインかどうかを調べるのは、更新を実行する直前や、反復更新アラームのスケジュール再設定の直前だけで十分です。</p>
+
+<p>同じ手法を使用して、大量の帯域幅を必要とするダウンロードを延期することもできます。それには、接続状態の変化をリッスンするブロードキャスト レシーバを有効にしておき、端末が Wi-Fi に接続されたらダウンロードを開始します。</p>
diff --git a/docs/html-intl/ja/training/multiscreen/adaptui.jd b/docs/html-intl/ja/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..8b1e6ac
--- /dev/null
+++ b/docs/html-intl/ja/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=順応性のある UI フローの実装
+parent.title=複数画面のデザイン
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=さまざまな画面密度のサポート
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>このレッスンでの学習内容</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">現在のレイアウトを判別する</a></li>
+  <li><a href="#TaskReactToLayout">現在のレイアウトに合わせて応答する</a></li>
+  <li><a href="#TaskReuseFrag">他のアクティビティのフラグメントを再利用する</a></li>
+  <li><a href="#TaskHandleConfigChanges">画面設定の変更を処理する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">タブレットと携帯端末のサポート</a></li>
+</ul>
+ 
+<h2>試してみる</h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリのダウンロード</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>アプリが現在表示しているレイアウトによって、UI フローが異なる可能性があります。たとえば、アプリがデュアルペイン モードであれば、左ペインのアイテムをクリックすると、単に右ペインにコンテンツが表示されるだけですが、シングルペイン モードであれば、コンテンツは(別のアクティビティ内の)コンテンツ専用のペインに表示される必要があります。</p>
+
+
+<h2 id="TaskDetermineCurLayout">現在のレイアウトを判別する</h2>
+
+<p>レイアウトによって実装が多少異なるので、まず、ユーザーが現在どのようなレイアウトを表示しているかを判別する必要があります。たとえば、ユーザーが表示しているレイアウトが「シングルペイン」モードなのか、「デュアルペイン」モードなのかを確認する必要があります。それは、以下のようなコードで、ある特定のビューが存在し、かつ可視になっているかを照会することで可能です:</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>このコードにおいて「article」ペインが使用可能かどうかを照会している点に注目してください。特定のレイアウトの照会をハードコーディングするよりもはるかに柔軟性があります。</p>
+
+<p>その他にも、さまざまなコンポーネントでも対応できる方法として、コンポーネントを操作する前に使用可能かどうかを確認する方法もあります。たとえば、News Reader サンプル アプリでは、メニューを開くボタンがありますが、このボタンは Android 3.0 よりも古いバージョンで動作しているときにしか表示されません(この機能は、API レベル 11 以上の <PH>{@link android.app.ActionBar}</PH> で提供されるため)。そこで、以下のようなコードを追加して、このボタンのイベント リスナーを追加します:</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">現在のレイアウトに合わせて応答する</h2>
+
+<p>現在のレイアウトによって、一部のアクションの結果が異なる可能性があります。たとえば、News Reader サンプルでは、見出しリストで見出しをクリックしたとき、デュアルペイン モードの UI の場合は右ペインに記事が表示されますが、シングルペインの UI の場合は別のアクティビティが起動します:</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>同様に、アプリがデュアルペイン モードの場合は、ナビ用タブでアクション バーを設定し、一方、シングルペイン モードの場合は、スピナー ウィジェットでナビを設定することになります。したがって、コードでは以下のようにどちらのケースが適切かを調べることも必要です:</p>
+
+<pre>
+final String CATEGORIES[] = { "トップ ニュース 政治", "政治", "経済", "Technology" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">他のアクティビティのフラグメントを再利用する</h2>
+
+<p>複数の画面に対応するように設計する場合、あるパターンが繰り返されますが、そうしたパターンは、ある画面設定ではペインとして、別の画面設定では別のアクティビティとして実装されるインターフェースの一部に存在します。たとえば、News Reader サンプルでは、ラージ画面の場合はニュース記事のテキストが右ペインに表示されますが、それよりも小さい画面の場合は別のアクティビティになります。</p>
+
+<p>このような場合、通常、複数のアクティビティで同じ <PH>{@link android.app.Fragment}</PH> サブクラスを再利用することでコードの重複を回避できます。たとえば、<code>ArticleFragment</code> は以下のようにデュアルペイン レイアウトで使用されます:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>また、より小さな画面向けのアクティビティ レイアウト内では(レイアウトを使用せずに)再利用されます(<code>ArticleActivity</code>):</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>当然、これは XML レイアウトでフラグメントを宣言するのと同じ効果がありますが、この場合は、XML レイアウトは必要ありません。このアクティビティのコンポーネントは記事フラグメントしかないからです。</p>
+
+<p>フラグメントを設計する際に注意すべき非常に重要なポイントの 1 つとして、特定のアクティビティに対して強い結合を作成しないことがあります。通常、これは、フラグメントが自分のホスト アクティビティとやり取りするのに必要なあらゆる手段を抽象化したインターフェースを定義し、さらに、そのインターフェースをホスト アクティビティに実装することで可能になります:</p>
+
+<p>たとえば、News Reader アプリの <code>HeadlinesFragment</code> は、まさにそのようになっています:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>これにより、ユーザーが見出しを選択すると、フラグメントは以下のように(特定のハードコーディングされたアクティビティに通知するのではなく)ホスト アクティビティが指定したリスナーに通知します:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p>このテクニックについては、<a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">タブレットと携帯端末のサポート</a>で詳しく説明されています。</p>
+
+
+<h2 id="TaskHandleConfigChanges">画面設定の変更を処理する</h2>
+
+<p>インターフェースの各パーツを実装するのに個別のアクティビティを使用している場合、インターフェースの一貫性を維持するために、(向きの変更などの)特定の設定変更に対応できるように注意する必要があります。</p>
+
+<p>たとえば、Android 3.0 以上が動作する一般的な 7 インチ タブレットでは、News Reader サンプルがニュース記事を表示する場合、縦表示では個別のアクティビティを使用しますが、横表示では 2 ペイン レイアウトを使用します。</p>
+
+<p>つまり、縦表示のときに記事閲覧用アクティビティが画面上にある場合、画面の向きが横方向に変わったことを検出したら、コンテンツを 2 ペイン レイアウトで表示するために、そのアクティビティを終了してメインのアクティビティに戻り、適切に応答しなければなりません:</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html-intl/ja/training/multiscreen/index.jd b/docs/html-intl/ja/training/multiscreen/index.jd
new file mode 100644
index 0000000..ff84f8a
--- /dev/null
+++ b/docs/html-intl/ja/training/multiscreen/index.jd
@@ -0,0 +1,64 @@
+page.title=複数画面のデザイン
+
+trainingnavtop=true
+startpage=true
+next.title=さまざまな画面サイズのサポート
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>必要な知識と前提条件</h2> 
+
+<ul>
+  <li>Android 1.6 以上(サンプル アプリを使用するには 2.1 以上)</li>
+  <li><a
+href="http://developer.android.com/guide/components/activities.html">アクティビティ</a>と<a href="http://developer.android.com/guide/components/fragments.html">フラグメント</a>の基礎知識</li>
+  <li>Android <a
+href="http://developer.android.com/guide/topics/ui/index.html">ユーザー インターフェース</a>の開発経験</li>
+  <li><a
+href="{@docRoot}tools/extras/support-library.html">サポート ライブラリ</a>の利用(一部の機能で必要)</li>
+</ul>
+
+<h2>関連ドキュメント</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">複数画面のサポート</a></li>
+</ul>
+ 
+<h2>試してみる</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリのダウンロード</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>Android は、小さな携帯電話から大きなテレビまで、画面サイズも種類もさまざまなデバイスに搭載できます。そのため、できる限り多くのユーザーが使用できるように、すべての画面サイズに対応できるようアプリを設計することが重要になります。</p>
+
+<p>しかし、さまざまな種類のデバイスに対応できるだけでは十分ではありません。画面サイズによって、ユーザーが操作できることが決まってくるため、本当にユーザーを満足させてよい印象を持ってもらうためには、アプリが単に複数の画面をサポートするだけでは不十分です: 画面設定ごとにユーザー エクスペリエンスを最適化する必要があります。<em></em><em></em></p>
+
+<p>このクラスは、いくつかの画面設定に合わせて最適化されたユーザー インターフェースを実装する方法を提供します。</p>
+
+<p>各レッスンで紹介されているコードは、複数の画面に合わせて最適化する際、ベスト プラクティスとなるサンプル アプリから抜粋したものです。このサンプルを(右側から)ダウンロードして、再利用可能なコードのソースとしてご自分のアプリに使用することができます。</p>
+
+<p class="note"><strong>注:</strong> このクラスと関連サンプルでは、<a
+href="{@docRoot}tools/extras/support-library.html">サポート ライブラリ</a>を使用します。理由は、Android 3.0 未満のバージョンで <PH>{@link android.app.Fragment}</PH> API を使用するためです。このクラスのすべての API を使用するには、ライブラリをダウンロードして、アプリに追加する必要があります。</p>
+ 
+
+<h2>レッスン</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">さまざまな画面サイズのサポート</a></b></dt> 
+    <dd>このレッスンでは、さまざまな画面サイズに適したレイアウトを(柔軟なビュー サイズ、 <PH>{@link android.widget.RelativeLayout}</PH>、画面サイズと画面の向きの修飾子、エイリアス フィルタ、ナインパッチ ビットマップを使用して)設計する方法について学習します。</dd> 
+ 
+  <dt><b><a href="screendensities.html">さまざまな画面密度のサポート</a></b></dt> 
+    <dd>このレッスンでは、(密度非依存ピクセルを使用し、各密度に適したビットマップを提供して)ピクセル密度が異なる画面をサポートする方法について学習します。</dd> 
+ 
+  <dt><b><a href="adaptui.html">順応性のある UI フローの実装</a></b></dt> 
+    <dd>このレッスンでは、いくつかの画面サイズ/密度の組み合わせに適した方法(実行時にアクティブなレイアウトを検出する方法、現在のレイアウトに合わせて応答する方法、画面設定の変更を処理する方法)で UI を実装する方法について学習します。</dd> 
+</dl> 
diff --git a/docs/html-intl/ja/training/multiscreen/screendensities.jd b/docs/html-intl/ja/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..3482d5c
--- /dev/null
+++ b/docs/html-intl/ja/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=さまざまな画面密度のサポート
+parent.title=複数画面のデザイン
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=さまざまな画面サイズのサポート
+previous.link=screensizes.html
+next.title=順応性のある UI フローの実装
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#TaskUseDP">密度非依存ピクセルを使用する</a></li>
+  <li><a href="#TaskProvideAltBmp">代替ビットマップを生成する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">複数画面のサポート</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">アイコン設計のガイドライン</a></li>
+</ul>
+
+<h2>試してみる</h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリのダウンロード</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>このレッスンでは、異なるリソースを生成し、かつ解像度非依存単位を使用して、異なる画面密度をサポートする方法について学習します。</p>
+
+<h2 id="TaskUseDP">密度非依存ピクセルを使用する</h2>
+
+<p>レイアウトを設計する際に回避すべきよくある落とし穴の 1 つとして、絶対ピクセルを使用して距離やサイズを定義することがあります。ピクセルを使用してレイアウトのサイズを定義すると、画面によってピクセル密度が異なるため、問題が起こります。したがって、同じピクセル数では、デバイスが異なる場合に物理サイズが異なる可能性があります。そのため、サイズを指定する場合は、常に <code>dp</code> 単位や <code>sp</code> 単位を使用します。<code>dp</code> とは、1 ピクセルの物理サイズが 160 dpi に相当する密度非依存ピクセルです。<code>sp</code> も基本単位は同じですが、ユーザーの優先テキスト サイズによってサイズが決まるので(スケール非依存ピクセル)、テキスト サイズを定義する際にはこの単位を使用する必要があります(ただし、レイアウト サイズには絶対に使用しないこと)。</p>
+
+<p>たとえば、2 つのビューの間にスペースを挿入する場合は、<code>px</code> ではなくて <code>dp</code> を使用します:</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>テキスト サイズを指定する場合は、常に <code>sp</code> を使用します:</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">代替ビットマップを生成する</h2>
+
+<p>Android は、画面密度がさまざまなデバイスで動作するため、それぞれの汎用密度バケット(低密度、中密度、高密度、超高密度)に合わせてビットマップ リソースを生成する必要があります。そうすることで、すべての画面密度で画質とパフォーマンスが向上します。</p>
+
+<p>これらの画像を生成するには、ベクター形式の未加工リソースから、次のサイズ スケールを使用して密度別に画像を生成する必要があります:</p>
+
+<p><ul>
+  <li><code>xhdpi</code>: 2.0
+  <li><code>hdpi</code>: 1.5
+  <li><code>mdpi</code>: 1.0(基準)
+  <li><code>ldpi</code>: 0.75
+</ul></p>
+
+<p>つまり、200&times;200 画像(<code>xhdpi</code> デバイス用)を生成する場合、同じリソースを 150&times;150 画像(<code>hdpi</code> デバイス用)、100&times;100 画像(<code>mdpi</code> デバイス用)、75&times;75(<code>ldpi</code> デバイス用)でも生成する必要があります。</p>
+
+<p>さらに、生成した画像を <code>res/</code> 下の適切なサブディレクトリに配置することで、アプリが動作するデバイスの画面密度に基づいて、自動的に適切な画像が表示されます:</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>また、<code>&#64;drawable/awesomeimage</code> を参照する場合は常に画面の dpi に基づいて、適切なビットマップが選択されます。</p>
+
+<p>アプリ用のアイコン アセットを作成するためのヒントとガイドラインについては、<a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">アイコン設計のガイドライン</a>をご覧ください。</p>
+
diff --git a/docs/html-intl/ja/training/multiscreen/screensizes.jd b/docs/html-intl/ja/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..3655a33
--- /dev/null
+++ b/docs/html-intl/ja/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=さまざまな画面サイズのサポート
+parent.title=複数画面のデザイン
+parent.link=index.html
+
+trainingnavtop=true
+next.title=さまざまな画面密度のサポート
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">「wrap_content」と「match_parent」を使用する</a></li>
+  <li><a href="#TaskUseRelativeLayout">RelativeLayout を使用する</a></li>
+  <li><a href="#TaskUseSizeQuali">サイズ修飾子を使用する</a></li>
+  <li><a href="#TaskUseSWQuali">最小幅修飾子を使用する</a></li>
+  <li><a href="#TaskUseAliasFilters">レイアウト エイリアスを使用する</a></li>
+  <li><a href="#TaskUseOriQuali">画面の向きの修飾子を使用する</a></li>
+  <li><a href="#TaskUse9Patch">ナインパッチ ビットマップを使用する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">複数画面のサポート</a></li>
+</ul>
+
+<h2>試してみる</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリのダウンロード</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>このレッスンでは、異なる画面サイズを以下のような方法でサポートする方法について学習します:</p>
+<ul> 
+  <li>画面に収まるようにレイアウト サイズを適切に変更する</li> 
+  <li>画面設定に基づいて適切な UI レイアウトを表示する</li> 
+  <li>適切な画面に適切なレイアウトを適用する</li>
+  <li>適切にサイズ調整したビットマップを表示する</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">「wrap_content」と「match_parent」を使用する</h2> 
+
+<p>レイアウトをさまざまな画面サイズに柔軟に対応させるには、一部のビュー コンポーネントの幅と高さに <code>"wrap_content"</code> と <code>"match_parent"</code> を使用する必要があります。<code>"wrap_content"</code> を使用すると、ビューの幅や高さがそのビュー内にコンテンツが収まるのに必要な最小サイズに設定されます。一方、<code>"match_parent"</code>(API レベル 8 より前の名称は <code>"fill_parent"</code>)を使用すると、コンポーネントがその親ビューのサイズに一致するまで拡大されます。</p>
+
+<p>ハードコーディングされたサイズの代わりに <code>"wrap_content"</code> と <code>"match_parent"</code> を使用することで、ビューはそれぞれ、そのビューに必要なスペースだけを使用したり、空きスペースを埋めるまで拡大したりします。次に例を示します:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>このサンプルでは、特定のサイズではない <code>"wrap_content"</code> と <code>"match_parent"</code> をコンポーネント サイズにどのように使用しているかに注目してください。こうすることで、異なる画面のサイズと向きにレイアウトを正しく対応させることができます。</p>
+
+<p>たとえば、このレイアウトを縦表示と横表示で表示したときの見え方を以下に示します。コンポーネントのサイズが幅と高さに自動的に適合している点に注目してください:</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>図 1.</strong> News Reader サンプル アプリの縦表示(左)と横表示(右)</p>
+
+
+<h2 id="TaskUseRelativeLayout">RelativeLayout を使用する</h2> 
+
+<p>ネストされた <PH>{@link android.widget.LinearLayout} インスタンスや、</PH> <code>"wrap_content"</code> と <code>"match_parent"</code> のサイズの組み合わせを使用すると、かなり複雑なレイアウトを作成できます。しかし、 <PH>{@link android.widget.LinearLayout}</PH> では、子ビューの空間的な位置関係を正確に制御することはできません。 <PH>{@link android.widget.LinearLayout} のビューは、</PH> 単に一列に並ぶだけです。子ビューに対して直線以外のさまざまな配置を実現する必要がある場合は、 <PH>{@link android.widget.RelativeLayout}</PH>を使用することでうまくいくことがよくあります。たとえば、1 つの子ビューを画面の左側に配置し、もう 1 つの子ビューを右側に配置できます。</p>
+
+<p>次に例を示します:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>図 2 は、このレイアウトの QVGA 画面での見え方を示しています。</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>図 2.</strong> QVGA 画面(スモール画面)のスクリーンショット</p>
+
+<p>図 3 は、このレイアウトのラージ画面での見え方を示しています。</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>図 3.</strong> WSVGA 画面(ラージ画面)のスクリーンショット</p>
+
+<p>コンポーネントのサイズが変更されても、 <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>で指定されたとおりに空間的な位置関係が維持されていることがわかります。</p>
+
+ 
+<h2 id="TaskUseSizeQuali">サイズ修飾子を使用する</h2> 
+
+<p>柔軟なレイアウトや相対的なレイアウトから得られる恩恵は、前のセクションで説明したことくらいです。これらのレイアウトはコンポーネントの内部や周囲のスペースを引き延ばすことでさまざまな画面に対応しますが、それぞれの画面サイズに合った最高のユーザー エクスペリエンスを実現していない可能性があります。したがって、アプリでは、柔軟なレイアウトの実装だけではなく、さまざまな画面設定に合わせた複数の代替レイアウトも必要になります。これは、<a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">設定修飾子</a>を使用することで実現可能です。設定修飾子により、ランタイムが現在のデバイスの設定に基づいて適切なリソース(画面サイズ別のレイアウト デザインなど)を自動的に選択できます。</p>
+
+<p>たとえば、多くのアプリでは、ラージ画面用に「2 ペイン」パターンを実装しています(一方のペインに項目リスト、もう一方のペインにそのコンテンツを表示することが可能です)。タブレットやテレビは両方のペインを同時に表示できるほど十分に大きい画面ですが、携帯端末の画面では 2 つのペインを別々に表示する必要があります。そのようなレイアウトを実装するには、次のようなファイルが必要になります:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>、シングルペイン(デフォルト)レイアウト:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>、2 ペイン レイアウト:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>2 番目のレイアウトのディレクトリ名の <code>large</code> 修飾子に注目してください。このレイアウトは、ラージ(7 インチ以上のタブレットなど)と分類された画面のデバイスで選択されます。それよりも小さいデバイスでは、その他のレイアウト(修飾子なし)が選択されます。</p>
+
+
+<h2 id="TaskUseSWQuali">最小幅修飾子を使用する</h2>
+
+<p>Android 3.2 未満のデバイスでデベロッパーが抱えていた問題の 1 つに、Dell Streak、初代 Galaxy Tab、7 インチ タブレット全般を含む、「ラージ」画面サイズの分類があります。しかし、多くのアプリでは、すべて「ラージ」画面と見なされたとしても、このカテゴリ内のデバイスのサイズに合わせて異なるレイアウト(5 インチと 7 インチのデバイス用など)を表示したい場合があります。そこで、Android 3.2 では「最小幅」修飾子などが導入されました。</p>
+
+<p>最小幅修飾子を使用すると、dp で指定した特定の最小幅の画面を対象とすることができます。たとえば、一般的な 7 インチ タブレットは最小幅が 600 dp なので、これらの画面の UI で 2 つのペイン(ただし、それよりも小さい画面ではシングル リスト)を表示したい場合は、前のセクションで説明した 2 つのレイアウトをシングルペイン レイアウト用と 2 ペイン レイアウト用としてそのまま利用できます。ただし、<code>large</code> サイズ修飾子の代わりに、<code>sw600dp</code> を使用して、最小幅が 600 dp の画面では 2 ペイン レイアウトになるよう指定します:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>、シングルペイン(デフォルト)レイアウト:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>、2 ペイン レイアウト:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>つまり、最小幅が 600dp 以上のデバイスでは <code>layout-sw600dp/main.xml</code>(2 ペイン)レイアウトが選択され、それよりも小さい画面では <code>layout/main.xml</code>(シングルペイン)レイアウトが選択されるということです。</p>
+
+<p>ただし、Android 3.2 未満のデバイスではこの修飾子は機能しません。これは <code>sw600dp</code> をサイズ修飾子として認識できないためです。したがって、引き続き <code>large</code> 修飾子も使用する必要があります。そこで、<code>res/layout-sw600dp/main.xml</code> と同じ内容の <code>res/layout-large/main.xml</code> という名前のファイルも必要になります。次のセクションでは、このようにレイアウト ファイルの重複を避けるためのテクニックについて学習します。</p>
+
+
+<h2 id="TaskUseAliasFilters">レイアウト エイリアスを使用する</h2> 
+
+<p>最小幅修飾子は、Android 3.2 以上でしか利用できません。したがって、旧バージョンとの互換性を維持するために、あいまいなサイズ分類(small、normal、large、xlarge)も併用することが必要です。たとえば、携帯端末ではシングルペイン UI、7 インチ タブレットやテレビなどの大きなデバイスではマルチペイン UI を表示するよう UI を設計する場合、以下のようなファイルが必要になります:</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> シングルペイン レイアウト</li>
+<li><code>res/layout-large:</code> マルチペイン レイアウト</li>
+<li><code>res/layout-sw600dp:</code> マルチペイン レイアウト</li>
+</ul></p>
+
+<p>最後の 2 つのファイルは同じものです。一方は Android 3.2 デバイス用で、もう一方は旧バージョンの Android を搭載したタブレットとテレビ用です。</p>
+
+<p>このようにタブレット/テレビ用として同じファイルを使用することで起こる重複(さらに、その結果メンテナンスが困難になる状況)を避けるために、エイリアス ファイルを使用できます。たとえば、次のようなレイアウトを定義できます:</p>
+
+<ul>
+<li><code>res/layout/main.xml</code>、シングルペイン レイアウト</li>
+<li><code>res/layout/main_twopanes.xml</code>、2 ペイン レイアウト</li>
+</ul>
+
+<p>さらに、次の 2 つのファイルを追加します:</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>最後の 2 つのファイルの内容は同じですが、実際のレイアウトは定義していません。これらのファイルは、単に <PH>{@code main}</PH> を <PH>{@code main_twopanes}</PH>へのエイリアスになるように設定しただけです。これらのファイルには <code>large</code> と <code>sw600dp</code> セレクタが含まれているので、Android のバージョンに関係なく(
+<PH>Android 3.2 未満のタブレット/テレビは {@code large} に一致し、</PH>Android 3.2 以上のタブレット/テレビは <code>sw600dp</code> に一致します)タブレット/テレビに適用されます。</p>
+
+
+<h2 id="TaskUseOriQuali">画面の向きの修飾子を使用する</h2> 
+
+<p>横表示と縦表示が両方とも正しく表示されるレイアウトもありますが、ほとんどのレイアウトは調整が必要になります。以下に、News Reader サンプル アプリの各画面のサイズと向きでレイアウトがどのように表示されるかを示します:</p>
+
+<p><ul>
+<li><b>スモール画面、縦表示:</b> シングル ペイン、ロゴ付き</li>
+<li><b>スモール画面、横表示:</b> シングル ペイン、ロゴ付き</li>
+<li><b>7 インチ タブレット、縦表示:</b> シングル ペイン、アクション バー付き</li>
+<li><b>7 インチ タブレット、横表示:</b> デュアル ペイン、ワイド、アクション バー付き</li>
+<li><b>10 インチ タブレット、縦表示:</b> デュアル ペイン、ナロー、アクション バー付き</li>
+<li><b>10 インチ タブレット、横表示:</b> デュアル ペイン、ワイド、アクション バー付き</li>
+<li><b>テレビ、横表示:</b> デュアル ペイン、ワイド、アクション バー付き</li>
+</ul></p>
+
+<p>これらの各レイアウトは、<code>res/layout/</code> ディレクトリ内の XML ファイルに定義されています。各レイアウトをさまざまな画面設定に割り当てるには、アプリでレイアウト エイリアスを使用して、各設定に対応付けます:</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>これで、考えられるすべてのレイアウトが定義されました。あとは、設定修飾子を使用して、適切なレイアウトを各設定にマッピングするだけです。そのためには、以下のようなレイアウト エイリアス テクニックを使用することができます:</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">ナインパッチ ビットマップを使用する</h2>
+
+<p>異なる画面サイズをサポートするには、画像リソースも異なるサイズに対応できないといけません。たとえば、ボタンの背景は、適用されるボタンの形状が異なってもサイズが合わなければいけません。</p>
+
+<p>サイズ変更可能なコンポーネントでシンプルな画像を使用すると、ランタイムによって画像が一様に拡大縮小されるので、いくぶん期待はずれの結果になることがすぐにわかります。これは、ナインパッチ ビットマップを使用することで解決します。ナインパッチ ビットマップとは、拡大可能な領域と拡大不可能な領域が指定された特殊なフォーマットの PNG ファイルです。</p>
+
+<p>そのため、サイズが変化するコンポーネントで使用するビットマップをデザインする場合は、常にナインパッチを使用してください。ビットマップをナインパッチに変換するには、まず、通常の画像を用意します(図 4: わかりやすく 4 倍に拡大しています)。</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>図 4.</strong> <code>button.png</code></p>
+
+<p>次に、 <ode
+href="{@docRoot}tools/help/draw9patch.html">SDK の <code>draw9patch</code></a> ユーティリティ(<code>tools/</code> ディレクトリにあります)からナインパッチを実行して、左境界線と上境界線上にピクセル(ドット)を描くことで拡大する領域にマークを付けます。また、右境界線と下境界線上にピクセルを描くことで、コンテンツを入れる領域をマークできます(図 5)。</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>図 5.</strong> <code>button.9.png</code></p>
+
+<p>境界線上に黒いピクセルがあることに注目してください。左境界線と上境界線上のものは画像を拡大できる領域で、右境界線と下境界線上のものはコンテンツを配置する領域を示しています。</p>
+
+<p>さらに、<code>.9.png</code> という拡張子にも注目してください。この拡張子は必ず使用してください。そうすることで、通常の PNG 画像ではなく、ナインパッチ画像であることがフレームワークによって検出されます。</p>
+
+<p>この背景を(<code>android:background="&#64;drawable/button"</code> を設定して)コンポーネントに適用すると、ボタンのサイズに合わせて適切に画像が拡大します(図 6 のさまざまなサイズを参照)。</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>図 6</strong><code>button.9.png</code> ナインパッチを使用したさまざまなサイズのボタン</p>
+
diff --git a/docs/html-intl/ko/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/ko/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..2eacccf
--- /dev/null
+++ b/docs/html-intl/ko/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=배터리 수준 및 충전 상태 모니터링
+parent.title=배터리 수명 최적화
+parent.link=index.html
+
+trainingnavtop=true
+next.title=도킹 상태와 유형 확인 및 모니터링
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#DetermineChargeState">현재 충전 상태 확인</a></li>
+  <li><a href="#MonitorChargeState">충전 상태 변경사항 모니터링</a></li>
+  <li><a href="#CurrentLevel">현재 배터리 수준 확인</a></li>
+  <li><a href="#MonitorLevel">배터리 수준 중요 변경사항 모니터링</a></li>
+</ol>
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>백그라운드 업데이트가 배터리 수명에 미치는 영향을 줄이기 위하여 백그라운드 업데이트 빈도수를 변경하는 경우, 현재 배터리 수준과 충전 상태부터 확인하는 것이 좋습니다.</p>
+
+<p>애플리케이션 업데이트 수행이 배터리 수명에 미치는 영향은 배터리 수준 및 기기의 충전 상태에 따라 다릅니다. 기기를 AC 충전기로 충전하는 동안 업데이트 수행이 미치는 영향은 무시해도 좋습니다. 따라서 기기가 범용 충전기에 연결되어 있을 때는 대부분 새로고침 빈도를 최대화할 수 있습니다. 반대로 기기가 충전 중이 아니라면, 업데이트 빈도를 줄이는 것이 배터리 수명 연장에 도움이 됩니다.</p>
+
+<p>마찬가지로 배터리가 거의 방전된 경우, 업데이트 빈도를 줄이거나 중단할 수 있습니다.</p>
+
+
+<h2 id="DetermineChargeState">현재 충전 상태 확인</h2> 
+ 
+<p>먼저 현재 충전 상태를 확인하는 것부터 시작합니다. {@link android.os.BatteryManager}는 배터리 충전 상태 등 충전 정보를 스티키 {@link android.content.Intent}를 통해 브로드캐스트합니다.</p>
+
+<p>스티키 인텐트이므로 {@link android.content.BroadcastReceiver}를 등록할 필요가 없으며 아래 코드 상의 리시버와 같이 간단히 {@code registerReceiver}을(를) 호출하여 {@code null}에 제출하면 현재 배터리 상태가 담긴 인텐트가 반환됩니다. 여기에 실제 {@link android.content.BroadcastReceiver} 개체 사용할 수 있으나, 이후 섹션에서 업데이트를 다루게 되므로 그럴 필요는 없습니다.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>현재 충전 상태와 어떤 충전기(USB 또는 AC 전원)로 충전하는지 추출할 수 있습니다.<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>일반적으로 기기가 AC 충전기에 연결된 경우 백그라운드 업데이트 빈도를 최대화합니다. USB를 통해 충전하는 경우 업데이트 빈도를 낮춥니다. 배터리가 방전 중이라면 빈도를 더 많이 낮추도록 합니다.</p>
+
+
+<h2 id="MonitorChargeState">충전 상태 변경사항 모니터링</h2> 
+
+<p>충전 상태는 수시로 변하므로 충전 상태의 변경사항을 확인하고 이에 따라 업데이트 주기를 변경하는 것이 중요합니다.</p>
+
+<p>{@link android.os.BatteryManager}는 기기가 전원에 연결되어 있는지 여부와 관계없이 언제나 액션을 브로드캐스트합니다. 앱이 실행되지 않는 동안에도 이벤트를 수신하는 것이 중요합니다. 특히 백그라운드 업데이트를 실행하기 위해 앱을 시작하는 빈도수에 이벤트가 영향을 주기 때문입니다. 따라서 두 이벤트를 수신하려면 매니페스트에서 {@link android.content.BroadcastReceiver}를 등록하여 인텐트 필터 내에 {@link android.content.Intent#ACTION_POWER_CONNECTED}와 {@link android.content.Intent#ACTION_POWER_DISCONNECTED}를 정의해야 합니다.</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>다음의 {@link android.content.BroadcastReceiver} 구현에서 이전 단계에서 설명한 대로 현재 충전 상태와 방법을 알아낼 수 있습니다.</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">현재 배터리 수준 확인</h2> 
+
+<p>현재 배터리 수준을 확인하는 것이 유용한 경우도 있습니다. 배터리 충전이 수준 이하인 경우 백그라운드 업데이트 빈도를 줄일 수 있습니다.</p>
+
+<p>다음은 배터리 상태 정보가 담긴 인텐트에서 현재 배터리 수준 및 충전 상태를 추출하는 방법입니다.</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">배터리 수준 중요 변경사항 모니터링</h2> 
+
+<p>배터리 상태를 지속적으로 확인하는 것은 쉽지 않지만, 꼭 그럴 필요도 없습니다.</p>
+
+<p>배터리 수준을 지속적으로 모니터링하는 것은 앱의 다른 작업보다 배터리에 더 큰 영향을 미칩니다. 따라서 기기가 배터리 전원 부족 상태가 되거나 이를 벗어날 때 등 중요한 변경사항만 확인하는 것이 좋습니다.</p>
+
+<p>다음 코드는 매니페스트의 브로드캐스트 리시버 내의 인텐트 필터를 보여줍니다. 배터리가 얼마 남지 않거나{@link android.content.Intent#ACTION_BATTERY_LOW} 배터리 상태가 회복되었을 때{@link android.content.Intent#ACTION_BATTERY_OKAY} 전달되는 메시지를 수신할 수 있습니다.</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>배터리 충전 상태가 매우 낮은 경우 백그라운드 업데이트를 사용하지 않는 것이 좋습니다. 전화기가 꺼져버리면 최신 데이터를 제공하는 것이 의미가 없기 때문입니다.</p>
+
+<p>기기를 충전하는 것은 곧 기기를 도크에 집어넣는 것과 같은 경우가 많습니다. 다음 강의는 현재 도크 상태를 확인하고 기기 도킹의 변경사항을 모니터링하는 방법을 보여줍니다.</p>
+
diff --git a/docs/html-intl/ko/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/ko/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..5666b98
--- /dev/null
+++ b/docs/html-intl/ko/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=연결 상태 확인 및 모니터링
+parent.title=배터리 수명 최적화
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=도킹 상태와 유형 확인 및 모니터링
+previous.link=docking-monitoring.html
+next.title=온디맨드로 브로드캐스트 수신기 조작
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#DetermineConnection">인터넷에 연결되어 있는지 확인</a></li>
+  <li><a href="#DetermineType">인터넷 연결 유형 확인</a></li>
+  <li><a href="#MonitorChanges">연결 변경사항 모니터링</a></li>
+</ol>
+
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a>
+</ul>
+
+</div> 
+</div>
+
+<p>반복 알람과 백그라운드 서비스는 일반적으로 인터넷 리소스 및 캐시 데이터로부터 애플리케이션의 업데이트를 예약하거나 긴 시간이 필요한 다운로드를 실행하는 데 사용됩니다. 하지만 인터넷에 연결되어 있지 않거나 연결이 매우 느려 다운로드를 완료하지 못한다면 업데이트 예약을 해도 소용이 없겠죠?</p>
+
+<p>인터넷에 연결되었는지, 어떤 연결 방식인지를 확인하기 위하여 {@link android.net.ConnectivityManager}를 사용할 수 있습니다.</p>
+
+
+<h2 id="DetermineConnection">인터넷에 연결되어 있는지 확인</h2> 
+ 
+<p>인터넷에 연결되어 있지 않는 경우 인터넷 리소스를 기반으로 한 업데이트 예약을 할 필요가 없습니다. 다음은 활성 네트워크를 쿼리하고 인터넷이 연결되어 있는지 확인하기 위한 {@link android.net.ConnectivityManager} 사용법을 보여줍니다.</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">인터넷 연결 유형 확인</h2> 
+
+<p>현재 사용할 수 있는 인터넷 연결 유형을 확인할 수도 있습니다.</p>
+
+<p>연결은 모바일 데이터, WiMAZ, Wi-Fi 및 이더넷 연결을 통해 제공될 수 있습니다. 아래와 같이 활성 네트워크의 유형을 쿼리하면, 사용 가능한 대역폭에 따라 업데이트 빈도를 변경할 수 있습니다.</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>모바일 데이터 비용은 Wi-Fi보다 높은 경향이 있으므로, 모바일 연결인 경우 앱의 업데이트 빈도를 줄여야 합니다. 마찬가지로 Wi-Fi로 연결되기까지 큰 용량의 다운로드는 일시 중지해야 합니다.</p>
+
+<p>업데이트를 비활성화한 경우, 인터넷 연결이 재개되면 업데이트를 다시 시작하기 위해 연결 변경사항을 알고 있는 것이 중요합니다.</p>
+
+
+<h2 id="MonitorChanges">연결 변경사항 모니터링</h2> 
+
+<p>연결 정보가 변경될 때마다 {@link android.net.ConnectivityManager}는 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}({@code "android.net.conn.CONNECTIVITY_CHANGE"}) 액션을 브로드캐스트합니다. 변경사항을 수신하거나 적절히 백그라운드 업데이트를 다시 시작 또는 일시 중지하기 위해 매니페스트에서 브로드캐스트 리시버를 등록할 수 있습니다.</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>연결 정보는 수시로 변경될 수 있습니다. 모바일과 Wi-Fi 간에 이동할 때마다 브로드캐스트가 실행됩니다. 따라서 업데이트나 다운로드를 일시 중지한 경우에만 브로드캐스트를 확인하는 것이 좋습니다. 업데이트를 시작하기 전이나 이전에 업데이트를 일시 중지했던 경우에만 확인하는 것으로 충분합니다.</p>
+
+<p>이 기술은 다음 강의에서 설명하는 매니페스트에서 선언한 브로드캐스트 리시버의 전환이 필요합니다.</p>
diff --git a/docs/html-intl/ko/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/ko/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..0cd61a0
--- /dev/null
+++ b/docs/html-intl/ko/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=도킹 상태와 유형 확인 및 모니터링
+parent.title=배터리 수명 최적화
+parent.link=index.html
+
+trainingnavtop=true
+previous.title= 배터리 수준 및 충전 상태 모니터링
+previous.link=battery-monitoring.html
+next.title= 연결 상태 확인 및 모니터링
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#CurrentDockState">오디오 포커스 요청</a></li>
+  <li><a href="#DockType">현재 도크 유형 확인</a></li>
+  <li><a href="#MonitorDockState">도크 상태 또는 유형 변경사항 모니터링</a></li>
+</ol>
+
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Android 기기는 여러 종류의 도크로 도킹될 수 있습니다. 여기에는 카폰 또는 홈 도크와 디지털 및 아날로그 도크가 포함됩니다. 많은 도크가 도킹된 기기에 전기를 공급하므로 일반적으로 충전 상태와 도크 상태는 밀접한 관련이 있습니다.</p>
+
+<p>전화의 도크 상태가 업데이트 빈도에 어떻게 영향을 미치는지는 앱에 따라 다릅니다. 스포츠 센터 앱이라면 데스크톱 도크에서 업데이트 빈도를 높이고 카폰 도크에 연결된 경우 업데이트를 완전히 사용 중지해도 좋습니다. 반대로 교통 상황을 제공하는 앱이라면 카폰 도크에서 업데이트를 최대화해도 좋습니다.</p>
+
+<p>도크 상태는 스티키 {@link android.content.Intent}로 브로드캐스트되어 기기가 도킹되었는지 여부와 도킹되었다면 어떤 종류의 도크인지 알아낼 수 있습니다. </p>
+
+
+<h2 id="CurrentDockState">현재 도킹 상태 확인</h2> 
+ 
+<p>도크 상태의 세부사항은 {@link android.content.Intent#ACTION_DOCK_EVENT} 액션의 스티키 브로드캐스트 내에 추가로 포함됩니다. 스티키 브로드캐스트이므로 {@link android.content.BroadcastReceiver}를 등록할 필요가 없습니다. 다음 스니펫에 표시된 브로드캐스트 수신기와 같이 간단히 {@link android.content.Context#registerReceiver registerReceiver()}를 호출하여 {@code null}에 제출할 수 있습니다. </p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>{@code EXTRA_DOCK_STATE} 추가로부터 현재 도킹 상태를 추출할 수 있습니다.<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">현재 도크 유형 확인</h2> 
+
+<p>4가지 유형의 도크가 있습니다. 
+<ul><li>카폰</li>
+<li>데스크</li>
+<li>저가형(아날로그) 데스크</li>
+<li>고가형(디지털) 데스크</li></ul></p>
+
+<p>마지막 두 가지 옵션은 API 수준 11의 Android에만 제공되어 있으므로, 디지털 또는 아날로그에 상관하지 않고 관심 있는 세 가지 도크 유형에 대해 확인하는 것이 좋습니다.</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">도크 상태 또는 유형 변경사항 모니터링</h2> 
+
+<p>도킹 상태가 바뀌면 {@link android.content.Intent#ACTION_DOCK_EVENT} 액션이 브로드캐스트됩니다. 기기의 도크 상태 변경사항을 모니터링하려면 아래에 표시된 대로 애플리케이션 매니페스트에서 브로드캐스트 리시버를 등록하세요.</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>이전 단계에서 설명한 기술을 사용하여 리시버 구현에서 도크 유형 및 상태를 추출할 수 있습니다.</p>
diff --git a/docs/html-intl/ko/training/monitoring-device-state/index.jd b/docs/html-intl/ko/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..f96e2e1
--- /dev/null
+++ b/docs/html-intl/ko/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=배터리 수명 최적화
+
+trainingnavtop=true
+startpage=true
+next.title=배터리 수준 및 충전 상태 모니터링
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>요구사항과 선행조건</h2> 
+<ul>
+  <li>Android 2.0(API 수준 5) 또는 이상</li>
+  <li> <a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a> 사용 경험</li>
+</ul>
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">서비스</a>
+</ul>
+
+</div> 
+</div>
+
+<p>좋은 앱은 호스트 기기의 배터리 수명에 미치는 영향이 미미해야 합니다. 강의를 통해 호스트 기기의 상태에 따라 기능과 동작을 수정하는 것을 모니터링하는 앱을 구축할 수 있게 됩니다.</p>
+
+<p>연결이 끊겼을 때 백그라운드 서비스 업데이트를 사용 중지하거나, 배터리 수준이 낮을 때 업데이트 빈도를 줄이는 조치를 취하여, 사용자 환경을 손상시키지 않고 배터리 수명에 미치는 영향을 최소화할 수 있습니다.</p>
+
+<h2>강의</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">배터리 수준 및 충전 상태 모니터링</a></b></dt>
+  <dd>충전 상태에서 현재 배터리 수준 및 변경사항을 확인 및 모니터링하여 앱의 업데이트 빈도를 변경하는 법을 알아보세요.</dd>
+
+  <dt><b><a href="docking-monitoring.html">도킹 상태와 유형 확인 및 모니터링</a></b></dt>
+  <dd>최적의 새로고침 빈도는 호스트 기기의 사용 방법에 따라 달라질 수 있습니다. 앱의 동작에 영향을 미치는 도킹 상태와 도크 유형을 확인 및 모니터링하는 방법을 알아보세요.</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">연결 상태 확인 및 모니터링</a></b></dt>
+  <dd>인터넷 연결 없이 온라인 소스를 통해 앱을 업데이트할 수 없습니다. 연결 상태를 확인하여 백그라운드 업데이트 빈도를 변경하는 방법을 알아보세요. 고대역폭 작업을 시작하기 전에 Wi-Fi 또는 모바일 연결을 확인하는 방법도 알 수 있습니다.</dd>
+
+  <dt><b><a href="manifest-receivers.html">온디맨드로 브로드캐스트 수신기 조작</a></b></dt>
+  <dd>매니페스트 내에 선언했던 브로드캐스트 리시버는 현재 기기 상태에서 필요 없는 것을 사용 중지하도록 런타임 때 전환될 수 있습니다. 기기가 특정 상태에 도달할 때까지 상태 변화 리시버 및 지연 액션을 전환 및 단계적으로 연결하여 효율성을 향상하는 법을 알아보세요.</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html-intl/ko/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/ko/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..c5c311b
--- /dev/null
+++ b/docs/html-intl/ko/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=온디맨드로 브로드캐스트 수신기 조작
+parent.title=배터리 수명 최적화
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=연결 상태 확인 및 모니터링
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#ToggleReceivers">효율성 향상을 위한 상태 변화 리시버의 전환 및 단계적 연결</a></li>
+</ol>
+
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a>
+</ul>
+
+</div> 
+</div>
+
+<p>기기 상태 변경을 모니터링하는 가장 간단한 방법은 모니터링하는 각 상태에 대해 {@link android.content.BroadcastReceiver}를 만들어 각각을 애플리케이션 매니페스트에 등록하는 것입니다. 그러면 각 리시버 내에서 현재 기기 상태를 기반으로 반복 알람의 일정을 간단히 변경할 수 있습니다.</p>
+
+<p>이 방법의 부작용은 리시버 중 하나라도 실행되면 매번 앱이 기기의 절전 모드를 해제시킨다는 것입니다.</p>
+
+<p>더 나은 방법은 런타임 때 브로드캐스트 리시버를 사용 중지 또는 사용하도록 설정하는 것입니다. 이렇게 하면 매니페스트에 선언한 리시버를 필요할 때만 시스템 이벤트에 의해 실행되는 수동적인 알람으로 사용할 수 있습니다.</p>
+ 
+
+<h2 id="ToggleReceivers">효율성 향상을 위한 상태 변화 수신기의 전환 및 단계적 연결 </h2> 
+ 
+<p>{@link android.content.pm.PackageManager}를 사용하여 아래에서 표시된 대로 모든 사용 또는 사용 중지하기 원하는 브로드캐스트 리시버를 포함하여 매니페스트 내에 정의된 모든 요소의 사용 가능 상태를 전환할 수 있습니다.</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>이 방법을 사용하면 연결이 없음을 확인한 경우 연결 변경 리시버를 제외한 모든 리시버를 사용 중지할 수 있습니다. 반대로 한 번 연결되면 연결 변경사항의 수신을 중지할 수 있으며, 업데이트를 수행하고 반복 업데이트 알람의 일정을 변경하기 전에 온라인 상태인지만 간단히 확인할 수 있습니다.</p>
+
+<p>높은 대역폭을 요구하는 다운로드를 중지시키는 데 동일한 기술을 사용할 수 있습니다. 연결 변경을 수신하는 브로드캐스트 리시버를 사용하도록 설정하고 반드시 Wi-Fi에 연결한 후에 다운로드를 시작하도록 합니다.</p>
diff --git a/docs/html-intl/ko/training/multiscreen/adaptui.jd b/docs/html-intl/ko/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..cb7b66c
--- /dev/null
+++ b/docs/html-intl/ko/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=조정형 UI 플로우 구현
+parent.title=다양한 화면 지원
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=다양한 화면 밀도 지원
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>강의 목표</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">현재 레이아웃 확인</a></li>
+  <li><a href="#TaskReactToLayout">현재 레이아웃에 대한 대응</a></li>
+  <li><a href="#TaskReuseFrag">다른 액티비티에 프래그먼트 재사용</a></li>
+  <li><a href="#TaskHandleConfigChanges">화면 구성 변경의 처리</a></li>
+</ol>
+
+<h2>참고자료</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">태블릿 및 휴대전화 지원</a></li>
+</ul>
+ 
+<h2>다운로드 </h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>현재 애플리케이션이 표시하는 레이아웃에 따라 UI 플로가 달라질 수 있습니다. 예를 들어 애플리케이션이 이중 창 모드로 되어 있는 경우에는 왼쪽 창에 있는 항목을 클릭하면 오른쪽 창에 콘텐츠가 표시되고, 단일 창 모드로 되어 있는 경우에는 콘텐츠가 해당 창에 표시됩니다(다른 액티비티에서).</p>
+
+
+<h2 id="TaskDetermineCurLayout">현재 레이아웃 확인</h2>
+
+<p>각 레이아웃을 구현하는 방식이 약간씩 다르므로 가장 먼저 해야 할 일은 현재 사용자에게 어떤 레이아웃이 표시되는지 확인하는 것입니다. 예를 들어, 사용자가 '단일 창' 모드에 있는지 혹은 '이중 창' 모드에 있는지 파악할 수 있습니다. 이는 특정 뷰가 존재하고 그 뷰가 표시되는지 조회하면 됩니다.</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>이 코드는 'article' 창을 사용할 수 있는지 여부를 조회하며 이러한 방식이 특정 레이아웃에 대한 조회를 하드코딩하는 것보다 훨씬 유연한 방식입니다.</p>
+
+<p>다른 구성요소의 존재 여부에 맞게 앱을 조정하는 또 다른 방법은 구성요소에 대한 작업을 수행하기 전에 해당 구성요소를 사용할 수 있는지 확인하는 것입니다. 예를 들어 뉴스 리더 샘플 앱의 경우, 메뉴를 여는 버튼이 있긴 하지만 이 버튼은 Android 3.0 이전 버전에서 실행되는 경우에만 존재합니다(API 수준 11 이상에서  <PH>{@link android.app.ActionBar}</PH> 가 그 기능을 대신하기 때문). 따라서 이 버튼에 대한 이벤트 리스너를 추가하기 위해 다음과 같이 할 수 있습니다.</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">현재 레이아웃에 대한 대응</h2>
+
+<p>현재 레이아웃에 따라 일부 액션의 결과가 달라질 수 있습니다. 예를 들어 뉴스 리더 샘플의 헤드라인 목록에서 헤드라인을 클릭하면 UI가 이중 창 모드인 경우에는 기사가 오른쪽 창에서 열리지만, UI가 단일 창 모드인 경우에는 별도의 액티비티가 실행됩니다.</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>마찬가지로, 앱이 이중 창 모드인 경우에는 탐색용 탭이 포함된 작업 표시줄이 설정되지만, 앱이 단일 창 모드인 경우에는 스피너 위젯이 포함된 탐색 메뉴가 설정됩니다. 따라서 어떤 경우가 적합한지도 코드에서 확인해야 합니다.</p>
+
+<pre>
+final String CATEGORIES[] = { "Top Stories", "Politics", "Economy", "Technology" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">다른 액티비티에 프래그먼트 재사용</h2>
+
+<p>다양한 화면의 디자인에 반복되는 패턴에는 일부 화면 구성에서는 창으로 구현되고 다른 화면 구성에서는 별도의 액티비티로 구현되는 인터페이스가 일부 있습니다. 예를 들어 뉴스 리더 샘플에서 뉴스 기사 텍스트가 큰 화면에서는 오른쪽 창에 표시되지만 작은 화면에서는 별도의 액티비티입니다.</p>
+
+<p>이러한 경우 일반적으로 동일한  <PH>{@link android.app.Fragment}</PH> 하위 클래스를 여러 액티비티에 재사용하여 코드 중복을 피할 수 있습니다. 예를 들어 <code>ArticleFragment</code>는 이중 창 레이아웃에서 사용되며 </p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>작은 화면의 액티비티 레이아웃에 레이아웃 없이 재사용됩니다(<code>ArticleActivity</code>).</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>당연히 이는 XML 레이아웃에서 프래그먼트(fragment)를 명시하는 것과 같은 효과가 있지만 이 경우에는 아티클 프래그먼트가 이 액티비티의 유일한 구성요소이기 때문에 XML 레이아웃은 불필요한 작업이 됩니다.</p>
+
+<p>프래그먼트를 디자인할 때 염두에 두어야 할 매우 중요한 점 한 가지는 특정 액티비티에 대한 강한 커플링을 만들지 말아야 한다는 점입니다. 이렇게 하려면 일반적으로 프래그먼트가 호스트 액티비티와 상호작용해야 하는 모든 방식을 추상화하는 인터페이스를 정의하면 됩니다. 그러면 호스트 액티비티가 해당 인터페이스를 구현합니다.</p>
+
+<p>예를 들어 뉴스 리더 앱의 <code>HeadlinesFragment</code>가 정확하게 그 일을 해 줍니다.</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>그런 다음 사용자가 헤드라인을 선택하면 프래그먼트가 하드코딩된 특정 액티비티를 알리지 않고 호스트 액티비티가 지정한 리스너를 알립니다.</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p>이 기술은 <a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">태블릿 및 휴대전화 지원</a> 가이드에서 자세히 설명되어 있습니다.</p>
+
+
+<h2 id="TaskHandleConfigChanges">화면 구성 변경 처리</h2>
+
+<p>인터페이스 중 일부를 구현하는데 별도의 액티비티를 사용 중인 경우 인터페이스의 일관성을 유지하기 위해 특정 구성의 변경(예: 화면 전환)에 대응해야 합니다.</p>
+
+<p>예를 들어 Android 3.0 이상을 실행하는 일반적인 7인치 태블릿에서 뉴스 리더 샘플은 세로 모드에서 실행될 때에는 뉴스 기사를 표시하는 데 별도의 액티비티를 사용하지만 가로모드에서는 이중 창(two-pane) 레이아웃을 사용합니다.</p>
+
+<p>즉 사용자가 세로 모드에 있고 기사를 보기 위한 액티비티가 화면에 있는 경우, 방향이 가로로 바뀌었음을 감지하고, 액티비티를 종료한 다음 주요 액티비티로 돌아감으로써 콘텐츠가 이중 창 레이아웃에서 표시되도록 적절하게 대응해야 합니다.</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html-intl/ko/training/multiscreen/index.jd b/docs/html-intl/ko/training/multiscreen/index.jd
new file mode 100644
index 0000000..d9e09b0
--- /dev/null
+++ b/docs/html-intl/ko/training/multiscreen/index.jd
@@ -0,0 +1,64 @@
+page.title=다양한 화면 지원
+
+trainingnavtop=true
+startpage=true
+next.title=다양한 화면 크기 지원
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>요구사항과 선행조건</h2> 
+
+<ul>
+  <li>Android 1.6 이상(샘플 앱의 경우  2.1 이상)</li>
+  <li><a
+href="http://developer.android.com/guide/components/activities.html">액티비티</a> 및 <a href="http://developer.android.com/guide/components/fragments.html">프래그먼트</a>에 대한 기본 지식</li>
+  <li>Android <a
+href="http://developer.android.com/guide/topics/ui/index.html"> 사용자 인터페이스</a> 구축 경험</li>
+  <li><a
+href="{@docRoot}tools/extras/support-library.html">호환성 라이브러리</a>를 사용해야 하는 여러 기능</li>
+</ul>
+
+<h2>참고자료</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">다양한 화면 지원</a></li>
+</ul>
+ 
+<h2>다운로드 </h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>Android는 소형 휴대전화에서부터 대형 TV에 이르기까지 다양한 화면 크기의 수많은 기기 유형을 지원합니다. 따라서 애플리케이션이 모든 화면 크기와 호환되어 최대한 많은 사용자가 사용할 수 있도록 디자인하는 것이 중요합니다.</p>
+
+<p>하지만 다양한 기기 유형과 호환되는 것만으로는 충분하지 않습니다. 각 화면 크기에 따라 사용자 상호작용에 유리한 점과 불리한 점이 다릅니다. 따라서 사용자에게 만족을 주고 깊은 인상을 심어주려면 애플리케이션이 단지 여러 화면을 <em>지원</em>하는 데 그치지 않고 화면 구성별로 사용자 환경을 <em>최적화</em>해야 합니다.</p>
+
+<p>이번 강의에서는 여러 화면 구성에 최적화된 사용자 인터페이스를 구현하는 방법을 설명합니다.</p>
+
+<p>각 강의에서 사용되는 코드는 여러 화면에 대한 최적화의 모범 사례를 보여주는 샘플 애플리케이션에서 가져온 것입니다. 샘플(오른쪽)을 다운로드하여 본인의 애플리케이션에 코드로 재사용할 수 있습니다. </p>
+
+<p class="note"><strong>참고:</strong> 이 강의 및 강의와 관련된 샘플은 <a
+href="{@docRoot}tools/extras/support-library.html">호환성 라이브러리</a>를 사용하며 이는 Android 3.0 이하 버전에서 <PH>{@link android.app.Fragment}</PH> API를 사용하기 위해서입니다. 이 강의에서 API를 모두 사용하려면 라이브러리를 다운로드하여 애플리케이션에 추가해야 합니다.</p>
+ 
+
+<h2>강의</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">다양한 화면 크기 지원</a></b></dt> 
+    <dd>이 강의에서는 여러 다양한 화면 크기에 조정되는 레이아웃을 디자인하는 방법(유연한 보기 크기, <PH>{@link android.widget.RelativeLayout}</PH>, 화면 크기 및 방향 한정자, 별칭 필터 및 나인-패치 비트맵 사용하기)을 안내합니다.</dd> 
+ 
+  <dt><b><a href="screendensities.html">다양한 화면 밀도 지원</a></b></dt> 
+    <dd>이 강의에서는 다양한 픽셀 밀도를 가진 화면을 지원하는 방법(밀도 독립형 픽셀(density-independent pixel) 사용하기 및 밀도별로 적합한 비트맵 제공하기)을 설명합니다.</dd> 
+ 
+  <dt><b><a href="adaptui.html">조정형 UI 플로우 구현</a></b></dt> 
+    <dd>이 강의에서는 여러 화면 크기/밀도 조합에 조정되도록 UI 플로우를 구현하는 방법(활성 레이아웃의 런타임 감지, 현재 레이아웃에 따른 대응, 화면 구성 변경 처리)을 설명합니다.</dd> 
+</dl> 
diff --git a/docs/html-intl/ko/training/multiscreen/screendensities.jd b/docs/html-intl/ko/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..5d6e2f3
--- /dev/null
+++ b/docs/html-intl/ko/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=다양한 화면 밀도 지원
+parent.title=다양한 화면 지원
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=다양한 화면 크기 지원
+previous.link=screensizes.html
+next.title=조정형 UI 플로우 구현
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#TaskUseDP">DIP(Density Independent Pixel) 사용</a></li>
+  <li><a href="#TaskProvideAltBmp">대체 비트맵 제공</a></li>
+</ol>
+
+<h2>참고자료</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">여러 화면 지원</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">아이콘 디자인 가이드라인</a></li>
+</ul>
+
+<h2>다운로드 </h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>이 강의에서는 다양한 리소스를 제공하고 해상도 독립형(resolution-independent) 측정 단위를 사용함으로써 다양한 화면 밀도를 지원하는 방법을 설명합니다.</p>
+
+<h2 id="TaskUseDP">DIP(Density Independent Pixel) 사용</h2>
+
+<p>레이아웃을 디자인할 때 범하기 쉬운 실수 중 하나는 절대 픽셀(absolute pixel)을 사용하여 거리나 크기를 정의하는 것입니다. 각 화면은 픽셀 밀도가 서로 다른데 레이아웃 크기를 픽셀로 정의하면 동일한 픽셀 수치가 다른 기기에서 다른 물리적 크기와 대응할 수 있어 문제가 됩니다. 따라서 크기를 지정할 때에는 항상 <code>dp</code> 또는 <code>sp</code> 단위를 사용하시기 바랍니다. <code>dp</code>는 160dpi에서 픽셀의 물리적 크기에 대응하는 밀도 독립형 픽셀(Density Independent Pixel)입니다. <code>sp</code>는 동일한 기본 단위이지만 사용자의 기본 텍스트 크기에 따라 확대/축소될 수 있으므로(배율 독립형 픽셀(Scale Independent Pixel)임) 텍스트 크기를 정의할 때 이 측정 단위를 사용해야 합니다(레이아웃 크기에 사용해서는 안됨).</p>
+
+<p>예를 들어 두 개의 보기 사이에 여백을 지정할 때 <code>px</code>가 아닌 <code>dp</code>를 사용합니다.</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>텍스트 크기를 지정할 때에는 항상 <code>sp</code>를 사용합니다.</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">대체 비트맵 제공</h2>
+
+<p>Android는 화면 밀도가 다양한 기기에서 실행되므로 각각의 일반화된 밀도 종류(저, 중, 고 및 초고 밀도)에 맞춤화된 비트맵 리소스를 제공해야 합니다. 이렇게 하면 모든 화면 밀도에서 좋은 그래픽 품질 및 성능을 얻는데 도움이 됩니다.</p>
+
+<p>이러한 이미지를 생성하려면 벡터 형식의 원본 리소스부터 시작해야 하며 다음 크기 배율을 사용하여 각 밀도에 사용할 이미지를 생성해야 합니다.</p>
+
+<p><ul>
+  <li><code>xhdpi</code>: 2.0
+  <li><code>hdpi</code>: 1.5
+  <li><code>mdpi</code>: 1.0 (기선)
+  <li><code>ldpi</code>: 0.75
+</ul></p>
+
+<p>즉 <code>xhdpi</code> 기기에 대해 200x200 이미지를 생성하는 경우 <code>hdpi</code> 기기에 대해 동일한 리소스를 150x150으로 생성해야 하며 <code>mdpi</code> 기기에 대해서는 100x100, <code>ldpi</code> 기기에 대해서는 75x75으로 동일한 리소스를 생성해야 합니다.</p>
+
+<p>그런 다음 생성된 이미지 파일을 <code>res/</code> 아래의 적절한 하위 디렉토리에 배치하면 시스템에서 애플리케이션이 실행되는 기기의 화면 밀도에 따라 정확한 이미지 파일을 자동으로 선택합니다.</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>그런 다음 언제든지 <code>&#64;drawable/awesomeimage</code>를 참조하면 시스템이 화면의 dpi에 따라 적합한 비트맵을 선택합니다.</p>
+
+<p>애플리케이션에 사용할 아이콘 저작물 제작에 대한 자세한 도움말 및 가이드라인은 <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">아이콘 디자인 가이드라인</a>을 참조하세요.</p>
+
diff --git a/docs/html-intl/ko/training/multiscreen/screensizes.jd b/docs/html-intl/ko/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..f2e77a6
--- /dev/null
+++ b/docs/html-intl/ko/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=다양한 화면 크기 지원
+parent.title=다양한 화면 지원
+parent.link=index.html
+
+trainingnavtop=true
+next.title=다양한 화면 밀도 지원
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">'wrap_content' 및 'match_parent' 사용</a></li>
+  <li><a href="#TaskUseRelativeLayout">RelativeLayout 사용</a></li>
+  <li><a href="#TaskUseSizeQuali">크기 한정자 사용</a></li>
+  <li><a href="#TaskUseSWQuali">최소 너비 한정자 사용</a></li>
+  <li><a href="#TaskUseAliasFilters">레이아웃 별칭 사용</a></li>
+  <li><a href="#TaskUseOriQuali">방향 한정자 사용</a></li>
+  <li><a href="#TaskUse9Patch">나인-패치 비트맵 사용</a></li>
+</ol>
+
+<h2>참고자료</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">다양한 화면 지원</a></li>
+</ul>
+
+<h2>다운로드 </h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>이 강의에서는 다양한 화면 크기를 지원하는 방법을 설명합니다.</p>
+<ul> 
+  <li>화면에 맞게 레이아웃 크기 조정</li> 
+  <li>화면 구성에 따라 적합한 UI 레이아웃 제공</li> 
+  <li>올바른 화면에 올바른 레이아웃 적용</li>
+  <li>정확하게 확대되는 비트맵 제공</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">'wrap_content' 및 'match_parent' 사용</h2> 
+
+<p>레이아웃이 다양한 화면 크기에 따라 유연하게 조정되도록 하려면 일부 뷰 구성요소의 너비와 높이에 <code>"wrap_content"</code> 및 <code>"match_parent"</code>를 사용해야 합니다. <code>"wrap_content"</code>를 사용하면 뷰의 너비와 높이가 해당 뷰 내에 콘텐츠가 들어가는데 필요한 최소 크기로 설정되는 반면, <code>"match_parent"</code>(API 수준 8 이전에는 <code>"fill_parent"</code>라고도 함)를 사용하면 구성요소가 확장되어 부모뷰의 크기와 일치하게 됩니다.</p>
+
+<p>하드코딩된 크기 대신 <code>"wrap_content"</code> 크기 값을 사용하면 뷰가 해당 뷰에 필요한 여백만을 사용하며 <code>"match_parent"</code> 크기 값을 사용하면 뷰가 확대되어 사용 가능한 여백을 채웁니다. 예를 들면 다음과 같습니다.</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>샘플에서 구성요소 크기에 특정 크기가 아닌 <code>"wrap_content"</code> 및 <code>"match_parent"</code>가 사용된 것을 눈여겨 보시기 바랍니다. 이렇게 하면 레이아웃이 다양한 화면 크기 및 방향에 맞게 조정됩니다.</p>
+
+<p>예를 들어 세로 및 가로 모드에서 레이아웃은 다음과 같이 표시됩니다. 구성요소의 크기가 너비와 높이에 맞게 자동으로 조정됩니다.</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>그림 1.</strong> 세로 모드(왼쪽) 및 가로 모드(오른쪽)에서의 뉴스 리더 샘플 앱</p>
+
+
+<h2 id="TaskUseRelativeLayout">RelativeLayout 사용</h2> 
+
+<p>비교적 복잡한 레이아웃을 만들려면 <PH>{@link android.widget.LinearLayout}의 중첩 인스턴스와</PH> <code>"wrap_content"</code> 및 <code>"match_parent"</code> 크기의 조합을 사용합니다. 하지만 <PH>{@link android.widget.LinearLayout}</PH> 을 사용하면 자식뷰의 여백 관계를 정확하게 제어할 수 없으며 <PH>{@link android.widget.LinearLayout}</PH> 단순히 나란하게 표시됩니다. 자식뷰를 일직선이 아닌 다양한 방향으로 표시해야 하는 경우 구성요소 사이의 여백 관계를 중심으로 레이아웃을 지정할 수 있는 <PH>{@link android.widget.RelativeLayout}</PH>을 사용하는 것이 더 좋은 방법일 수 있습니다. 예를 들어 화면 왼쪽에 하나의 자식뷰를, 오른쪽에 다른 자식뷰를 정렬할 수 있습니다.</p>
+
+<p>예를 들면 다음과 같습니다.</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>그림 2는 이 레이아웃이 QVGA 화면에 어떻게 표시되는지 보여줍니다.</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>그림 2.</strong> QVGA 화면(작은 화면)의 스크린샷</p>
+
+<p>그림 3은 이 레이아웃이 큰 화면에서 어떻게 표시되는지 보여줍니다.</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>그림 3.</strong> WSVGA 화면(큰 화면)의 스크린샷</p>
+
+<p>구성요소의 크기가 변하더라도 여백 관계가  <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p>
+
+ 
+<h2 id="TaskUseSizeQuali">크기 한정자 사용</h2> 
+
+<p>이전 섹션에서 다룬 유연한 레이아웃이나 상대적 레이아웃으로는 한계가 있습니다. 이러한 레이아웃이 구성요소 내부 및 주위의 여백을 확장하여 다양한 화면에 맞게 조정되긴 하지만 화면 크기별로 최적의 사용자 환경을 제공하지는 못할 수 있습니다. 따라서 애플리케이션은 유연한 레이아웃을 구현할 뿐 아니라 다양한 화면 구성을 타겟팅할 수 있도록 다양한 대체 레이아웃을 제공해야 합니다. 그 방법은 런타임이 현재 기기의 구성에 따라 적합한 리소스(예: 화면 크기별로 다른 레이아웃 디자인)를 자동으로 선택하도록 해 주는 <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">구성 한정자</a>를 사용하는 것입니다.</p>
+
+<p>예를 들어 많은 애플리케이션이 큰 화면에 '이중 창(two pane)' 패턴을 구현합니다(한 쪽 창에는 아이템의 목록을 표시하고 다른 창에는 콘텐츠를 표시). 태블릿 및 TV는 두 개의 창 모두가 화면에 동시에 들어갈 정도로 크지만 휴대전화 화면은 두 창을 따로 표시해야 합니다. 따라서 이러한 레이아웃을 구현하려면 다음 파일이 있어야 합니다.</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, 단일 창(기본값) 레이아웃:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>, 이중 창 레이아웃:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>두 번째 레이아웃의 디렉토리 이름에서 <code>large</code> 한정자를 눈여겨 보시기 바랍니다. 이 레이아웃은 대형(예: 7인치 태블릿 이상)으로 분류된 화면을 가진 기기에서 선택됩니다. 한정자가 없는 다른 레이아웃은 소형 기기에서 선택됩니다.</p>
+
+
+<h2 id="TaskUseSWQuali">최소 너비 한정자 사용</h2>
+
+<p>Android 3.2 이전 기기에서 개발자가 어려움을 느꼈던 문제 중의 하나는 Dell Streak, 최초의 Galaxy 탭 및 7인치 태블릿에 두루 사용되는 '큰' 화면 크기 빈이었습니다. 하지만 많은 애플리케이션은 화면이 '큰' 기기라 하더라도 이 카테고리(예: 5인치 및 7인치 기기)에 속하는 다양한 기기에 다양한 레이아웃을 표시하고 싶어 합니다. 이것이 Android에서 Android 3.2에 '최소 너비' 한정자를 도입한 이유입니다.</p>
+
+<p>최소 너비 한정자를 사용하면 dp 단위의 특정 최소 너비를 가진 화면을 타겟팅할 수 있습니다. 예를 들어 일반적인 7인치 태블릿에는 600dp라는 최소 너비가 있으므로 이러한 화면에서 두 개의 창에 UI를 사용(작은 화면에서는 단일 목록 사용) 하고 싶은 경우 단일 및 이중 창 레이아웃에 이전 섹션과 동일한 레이아웃을 사용하면 되지만, 이중 창 레이아웃은 최소 너비가 600dp인 화면에 사용한다는 것을 나타내기 위해서 <code>large</code> 크기 한정자 대신 <code>sw600dp</code>를 사용해야 합니다.</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, 단일 창(기본값) 레이아웃:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>, 이중 창 레이아웃:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>이는 최소 너비가 600dp 이상인 기기는 <code>layout-sw600dp/main.xml</code>(이중 창) 레이아웃을 선택하는 반면 소형 화면은 <code>layout/main.xml</code> (단일 창) 레이아웃을 선택한다는 것을 의미합니다.</p>
+
+<p>하지만 Android 3.2 이전 기기는 <code>sw600dp</code>를 크기 한정자로 인식하지 않기 때문에 최소 너비 한정자가 제대로 작동하지 않으며 따라서 <code>large</code> 한정자도 계속 사용해야 합니다. 따라서 <code>res/layout-large/main.xml</code>라는 이름의 파일이 있어야 하며 이 파일은 <code>res/layout-sw600dp/main.xml</code>과 동일한 파일입니다. 다음 섹션에서는 이런 식으로 레이아웃 파일이 중복되지 않게 하는 기술을 살펴보겠습니다.</p>
+
+
+<h2 id="TaskUseAliasFilters">레이아웃 별칭 사용</h2> 
+
+<p>최소 너비 한정자는 Android 3.2 이상 버전에서만 사용할 수 있습니다. 따라서 이전 버전과 호환되도록 하려면 추상화 크기 빈(소형, 보통, 대형 및 초대형)을 계속 사용해야 합니다. 예를 들어 휴대전화에서는 단일 창 UI가 표시되고 7인치 태블릿, TV 및 기타 대형 기기에서는 다중 창 UI가 표시되도록 UI를 디자인하려면 다음 파일을 제공해야 합니다.</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> 단일 창 레이아웃</li>
+<li><code>res/layout-large:</code> 다중 창 레이아웃</li>
+<li><code>res/layout-sw600dp:</code> 다중 창 레이아웃</li>
+</ul></p>
+
+<p>마지막 두 개의 파일은 하나는 Android 3.2 기기와 일치하고 다른 하나는 이전 버전의 Android가 탑재된 태블릿 및 TV를 위한 것으로 서로 동일한 파일입니다.</p>
+
+<p>이 경우 별칭 파일을 사용하면 태블릿 및 TV용으로 동일한 파일이 중복되지 않도록 하고 이를 관리해야 하는 번거로움을 없앨 수 있습니다. 예를 들어 다음 레이아웃을 지정할 수 있습니다.</p>
+
+<ul>
+<li><code>res/layout/main.xml</code>, 단일 창 레이아웃</li>
+<li><code>res/layout/main_twopanes.xml</code>, 이중 창 레이아웃</li>
+</ul>
+
+<p>또한 다음 두 개의 파일을 추가합니다.</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>뒤에 있는 두 개의 파일은 콘텐츠는 동일하지만 실제로 레이아웃을 지정하지는 않으며 단지 <PH>{@code main}</PH> 이 <PH>{@code main_twopanes}에 대한 별칭이 되도록 설정합니다.</PH> 이 파일에는 <code>large</code> 및 <code>sw600dp</code> 선택기가 있으므로 Android 버전에 관계없이 태블릿 및 TV에 적용됩니다(3.2 버전 이전의 태블릿 및 TV는
+<PH>{@code large}</PH>,3.2 이후 버전은 <code>sw600dp</code>와 일치).</p>
+
+
+<h2 id="TaskUseOriQuali">방향 한정자 사용</h2> 
+
+<p>일부 레이아웃은 가로 및 세로 방향 모두에서 잘 작동하지만 대부분의 레이아웃은 조정을 통해 많은 이점을 누릴 수 있습니다. 다음은 뉴스 리더 샘플 앱에서 화면 크기와 방향별로 레이아웃이 어떻게 작동하는지 보여줍니다.</p>
+
+<p><ul>
+<li><b>소형 화면, 세로:</b> 단일 창, 로고 표시</li>
+<li><b>소형 화면, 가로:</b> 단일 창, 로고 표시</li>
+<li><b>7인치 태블릿, 세로:</b> 단일 창, 작업 표시줄 표시</li>
+<li><b>7인치 태블릿, 가로:</b> 이중 창, 와이드, 작업 표시줄 표시</li>
+<li><b>10인치 태블릿, 세로:</b> 이중 창, 내로우, 작업 표시줄 표시</li>
+<li><b>10인치 태블릿, 가로:</b> 이중 창, 와이드, 작업 표시줄 표시</li>
+<li><b>TV, 가로:</b> 이중 창, 와이드, 작업 표시줄 표시</li>
+</ul></p>
+
+<p>따라서 이러한 각 레이아웃은 <code>res/layout/</code> 디렉토리의 XML 파일에서 지정됩니다. 그러면 앱은 각 레이아웃을 다양한 화면 구성에 지정하기 위해 레이아웃 별칭을 사용해 레이아웃을 각 구성과 일치시킵니다.</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>가능한 레이아웃을 모두 지정했으므로 구성 한정자를 사용하여 올바른 레이아웃을 각 구성에 매핑하기만 하면 되며 이는 레이아웃 별칭 기술을 사용하면 됩니다.</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">나인-패치 비트맵 사용</h2>
+
+<p>일반적으로 다양한 화면 크기를 지원하려면 이미지 리소스도 다양한 크기에 맞게 조정될 수 있어야 합니다. 예를 들어 버튼 배경은 버튼 배경이 적용되는 모든 버튼 모양과 맞아야 합니다.</p>
+
+<p>구성요소에 크기가 바뀔 수 있는 단순한 이미지를 사용하는 경우 런타임이 이미지를 균등하게 확대하거나 축소하기 때문에 기대에 미치지 못하는 결과가 나옵니다. 이에 대한 해결 방법은 확대될 수 있는 영역과 확대될 수 없는 영역을 나타내는 특별한 형식의 PNG 파일인 나인-패치 비트맵을 사용하는 것입니다.</p>
+
+<p>따라서 다양한 크기를 가진 구성요소에 사용할 비트맵을 디자인할 때에는 항상 나인-패치를 사용하시기 바랍니다. 비트맵을 나인-패치로 변환하려면 일반적인 이미지부터 시작합니다(그림 4, 명확하게 보이도록 4배 줌으로 표시).</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>그림 4.</strong> <code>button.png</code></p>
+
+<p>그 다음 이 이미지에 <ode
+href="{@docRoot}tools/help/draw9patch.html">SDK의 <code>draw9patch</code></a> 유틸리티(<code>tools/</code> 디렉토리에 있음)를 실행합니다. 이 때 왼쪽 및 상단 테두리를 따라 픽셀을 그려 확대되어야 할 영역을 표시할 수 있습니다. 또한 오른쪽 및 하단 테두리를 따라 픽셀을 그려 콘텐츠가 들어가야 할 영역을 표시할 수 있으며 그 결과는 그림 5와 같습니다.</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>그림 5.</strong> <code>button.9.png</code></p>
+
+<p>테두리를 따라 있는 검은색 픽셀을 눈여겨 보시기 바랍니다. 상단 및 왼쪽 테두리의 픽셀은 이미지가 확대될 수 있는 영역을 나타내며 오른쪽 및 하단 테두리는 콘텐츠가 위치해야 하는 영역을 나타냅니다.</p>
+
+<p>또한 <code>.9.png</code> 확장자를 확인하시기 바랍니다. 프레임워크는 이 확장자를 통해 이미지가 일반적인 PNG 이미지가 아닌 나인-패치 이미지임을 감지할 수 있으므로 이 확장자를 사용해야 합니다.</p>
+
+<p><code>android:background="&#64;drawable/button"</code>을 설정하여 이 배경을 구성요소에 적용하면 그림 6의 다양한 크기로 표시된 것처럼 프레임워크가 버튼의 크기를 수용할 수 있도록 이미지를 올바르게 확대합니다.</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>그림 6.</strong> 다양한 크기에 <code>button.9.png</code> 나인-패치를 사용하는 버튼</p>
+
diff --git a/docs/html-intl/ru/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/ru/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..26daf04
--- /dev/null
+++ b/docs/html-intl/ru/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=Monitoring the Battery Level and Charging State
+parent.title=Optimizing Battery Life
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Determining and Monitoring the Docking State and Type
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#DetermineChargeState">Определение текущего состояния зарядки</a></li>
+  <li><a href="#MonitorChargeState">Отслеживание изменений состояния зарядки</a></li>
+  <li><a href="#CurrentLevel">Определение текущего уровня заряда батареи</a></li>
+  <li><a href="#MonitorLevel">Отслеживание существенных изменений уровня заряда батареи</a></li>
+</ol>
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>Если вы хотите изменить частоту фоновых обновлений, чтобы продлить время работы устройства от батареи, сначала рекомендуется проверить текущий уровень заряда и состояние зарядки.</p>
+
+<p>Именно от этих двух факторов зависит, как обновления повлияют на время работы устройства от батареи. Когда устройство подключено к сети переменного тока, приложение можно обновлять максимально часто, поскольку процесс обновления не будет сказываться на уровне заряда батареи. Если устройство не подключено к сети, следует воздержаться от обновлений, чтобы продлить время его работы от батареи.</p>
+
+<p>Если заряд батареи практически исчерпан, можно снизить частоту обновлений (вплоть до их полного прекращения).</p>
+
+
+<h2 id="DetermineChargeState">Определение текущего состояния зарядки</h2> 
+ 
+<p>Начните с определения текущего состояния зарядки. {@link android.os.BatteryManager} передает все сведения о батарее и зарядке в закрепленном намерении {@link android.content.Intent}, которое содержит также информацию о состоянии зарядки.</p>
+
+<p>Поскольку это намерение является закрепленным, регистрировать {@link android.content.BroadcastReceiver} не нужно. Чтобы получить текущее состояние батареи в виде намерения, нужно вызвать {@code registerReceiver}, передав {@code null} в качестве приемника, как показано в коде ниже. Можно также передать фактический объект {@link android.content.BroadcastReceiver}, но это необязательно, поскольку обработка обновлений будет выполняться позднее.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>Можно извлечь данные как о текущем состоянии, так и об источнике зарядки (USB или сеть переменного тока), если устройство заряжается:<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>Как правило, если устройство подключено к сети переменного тока, фоновые обновления можно выполнять с максимальной частотой. Если устройство заряжается через USB, частоту можно несколько сократить, а если устройство не подключено к сети&nbsp;– сократить еще больше.</p>
+
+
+<h2 id="MonitorChargeState">Отслеживание изменений состояния зарядки</h2> 
+
+<p>Состояние зарядки изменяется всякий раз, когда пользователь подключает устройство к источнику питания. Поскольку это случается довольно часто, важно отслеживать изменения этого состояния и соответствующим образом корректировать частоту обновления приложения.</p>
+
+<p>{@link android.os.BatteryManager} передает действие каждый раз, когда устройство подключается к источнику питания или отключается от него. Важно получать эти события, даже если приложение не работает. Они помогут, в частности, определить, как часто будет запускаться приложение для выполнения фоновых обновлений. Чтобы отслеживать их, зарегистрируйте {@link android.content.BroadcastReceiver} в манифесте, задав {@link android.content.Intent#ACTION_POWER_CONNECTED} и {@link android.content.Intent#ACTION_POWER_DISCONNECTED} в фильтре намерений.</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>Соответствующая реализация {@link android.content.BroadcastReceiver} позволяет извлечь данные о текущем состоянии и способе зарядки, как описано в предыдущем шаге.</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">Определение текущего уровня заряда батареи</h2> 
+
+<p>В некоторых случаях целесообразно определять текущий уровень заряда батареи. Если он ниже определенного значения, частоту фоновых обновлений следует уменьшить.</p>
+
+<p>Узнать, каков в настоящий момент заряд батареи, можно путем извлечения данных о текущем и максимальном уровне заряда из намерения состояния батареи, как показано в этом коде:</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">Отслеживание существенных изменений уровня заряда батареи</h2> 
+
+<p>Отслеживать состояние батареи непрерывно не следует,</p>
+
+<p>поскольку при этом нагрузка на батарею будет значительно выше, чем при обычной работе приложения. Рекомендуется отслеживать только существенные изменения уровня заряда, в частности, переход устройства в состояние низкого заряда и обратно.</p>
+
+<p>Фрагмент манифеста, приведенный ниже, относится к фильтру намерений в приемнике широковещательных намерений. Приемник срабатывает, когда батарея устройства переходит в состояние низкого заряда или выходит из него. Для этого прослушиваются события {@link android.content.Intent#ACTION_BATTERY_LOW} и {@link android.content.Intent#ACTION_BATTERY_OKAY}.</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>Общепринятой практикой является отключение всех фоновых обновлений, когда заряд батареи достигает критически низкого уровня. Будет уже неважно, насколько актуальны данные в вашем приложении, если телефон самопроизвольно выключится, прежде чем пользователь успеет их просмотреть.</p>
+
+<p>Во многих случаях начало зарядки устройства совпадает с моментом его установки в док-станцию. В следующем уроке описаны способы определения текущего состояния подключения устройства к док-станции и отслеживания изменений этого состояния.</p>
+
diff --git a/docs/html-intl/ru/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/ru/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..ca1a942
--- /dev/null
+++ b/docs/html-intl/ru/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=Determining and Monitoring the Connectivity Status
+parent.title=Optimizing Battery Life
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Determining and Monitoring the Docking State and Type
+previous.link=docking-monitoring.html
+next.title=Manipulating Broadcast Receivers On Demand
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#DetermineConnection">Определение наличия подключения к Интернету</a></li>
+  <li><a href="#DetermineType">Определение типа подключения к Интернету</a></li>
+  <li><a href="#MonitorChanges">Отслеживание изменения возможностей подключения</a></li>
+</ol>
+
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Чаще всего повторяющиеся оповещения и фоновые службы используются для планового обновления приложения из Интернета, кэширования или загрузки больших объемов данных. Однако если подключение к Интернету не установлено или скорость соединения слишком низкая, выполнять загрузку не имеет смысла.</p>
+
+<p>Проверить наличие подключения к Интернету и его тип можно с помощью {@link android.net.ConnectivityManager}.</p>
+
+
+<h2 id="DetermineConnection">Определение наличия подключения к Интернету</h2> 
+ 
+<p>Если подключение отсутствует, нет смысла планировать обновление из Интернета. В приведенном ниже коде показано, как использовать {@link android.net.ConnectivityManager} для отправки запросов об активной сети и определять возможности подключения.</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">Определение типа подключения к Интернету</h2> 
+
+<p>Также можно определить тип доступного в настоящий момент подключения к Интернету.</p>
+
+<p>Устройство может подключаться по сети мобильной связи, WiMAX, Wi-Fi и Ethernet. Получив ответ на запрос о типе активной сети, как показано ниже, можно изменить частоту обновлений на основе ее пропускной способности.</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>Стоимость передачи данных по мобильной сети, как правило, значительно выше, чем по сети Wi-Fi, поэтому частота обновлений в первом случае должна быть ниже. То же касается загрузки большого количества данных: ее следует отложить, пока не будет установлено подключение к сети Wi-Fi.</p>
+
+<p>Когда обновления отключены, необходимо отслеживать изменения доступных соединений, чтобы возобновить их сразу после подключения устройства к Интернету.</p>
+
+
+<h2 id="MonitorChanges">Отслеживание изменения возможностей подключения</h2> 
+
+<p>{@link android.net.ConnectivityManager} передает действие {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) при каждом изменении сведений о подключении. Зарегистрируйте в манифесте приемник широковещательных намерений, чтобы отслеживать эти изменения и запускать (или приостанавливать) фоновые обновления соответствующим образом.</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>Доступные соединения могут меняться очень часто&nbsp;– эта передача инициируется при каждом переключении между сетью мобильной связи и Wi-Fi. Ее рекомендуется отслеживать, только когда необходимо запускать ранее приостановленные обновления или загрузки. Как правило, достаточно проверить наличие подключения к Интернету перед запуском обновления и, если оно отсутствует, приостановить дальнейшие обновления до восстановления соединения.</p>
+
+<p>Для использования этого метода необходимо включать и отключать приемники широковещательных намерений, объявленные в манифесте. В следующем уроке описано, как это делать.</p>
diff --git a/docs/html-intl/ru/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/ru/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..d94f357
--- /dev/null
+++ b/docs/html-intl/ru/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=Determining and Monitoring the Docking State and Type
+parent.title=Optimizing Battery Life
+parent.link=index.html
+
+trainingnavtop=true
+previous.title= Monitoring the Battery Level and Charging State
+previous.link=battery-monitoring.html
+next.title= Determining and Monitoring the Connectivity Status
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#CurrentDockState">Запрос аудиофокуса</a></li>
+  <li><a href="#DockType">Определение типа док-станции</a></li>
+  <li><a href="#MonitorDockState">Отслеживание изменений состояния подключения к док-станции и ее типа</a></li>
+</ol>
+
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Устройства под управлением ОС Android можно подключать к нескольким типам док-станций: настольным, которые делятся на цифровые и аналоговые, и автомобильным. В большинстве случаев устройства заряжаются при подключении к док-станции, поэтому состояние подключения к док-станции часто связано с состоянием зарядки.</p>
+
+<p>Насколько состояние подключения к док-станции влияет на частоту обновления, зависит от конкретного приложения. Например, можно увеличить частоту обновлений приложения, показывающего спортивные новости, когда устройство подключено к настольной док-станции, и полностью отключить обновления при подключении к автомобильной. И наоборот, если используется приложение, которое в фоновом режиме загружает данные о дорожной обстановке, то при подключении устройства к автомобильной док-станции следует выполнять обновления максимально часто.</p>
+
+<p>Состояние подключения к док-станции также передается в виде закрепленного намерения {@link android.content.Intent}, что позволяет запрашивать сведения о наличии подключения к док-станции и ее типе.</p>
+
+
+<h2 id="CurrentDockState">Определение текущего состояния подключения к док-станции</h2> 
+ 
+<p>Сведения о состоянии подключения к док-станции передаются в качестве дополнительных данных в закрепленном оповещении действия {@link android.content.Intent#ACTION_DOCK_EVENT}. Поскольку это закрепленное намерение, регистрировать {@link android.content.BroadcastReceiver} не требуется. Достаточно вызвать {@link android.content.Context#registerReceiver registerReceiver()}, передав {@code null} в качестве приемника широковещательных намерений, как показано в коде ниже.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>Сведения о текущем состоянии подключения к док-станции можно извлечь из дополнительных данных {@code EXTRA_DOCK_STATE}:<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">Определение типа док-станции</h2> 
+
+<p>Док-станция, к которой подключено устройство, может быть одного из четырех типов: 
+<ul><li>автомобильная;</li>
+<li>настольная;</li>
+<li>настольная с минимальным набором функций (аналоговая);</li>
+<li>настольная с широким набором функций (цифровая).</li></ul></p>
+
+<p>Обратите внимание, что последние два типа поддерживаются только на уровне API&nbsp;11, поэтому, даже если вас не интересует, является ли док-станция цифровой или аналоговой, а интересует только ее тип, рекомендуется выполнять проверку по всем трем типам:</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">Отслеживание изменений состояния подключения к док-станции и ее типа</h2> 
+
+<p>При каждом подключении устройства к док-станции или отключении от нее передается действие {@link android.content.Intent#ACTION_DOCK_EVENT}. Чтобы отслеживать состояние подключения к док-станции, достаточно зарегистрировать в манифесте приложения приемник широковещательных намерений, как показано ниже.</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>Данные о типе док-станции и о состоянии подключения к ней можно извлечь внутри реализации приемника с помощью методов, описанных в предыдущем шаге.</p>
diff --git a/docs/html-intl/ru/training/monitoring-device-state/index.jd b/docs/html-intl/ru/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..c87d9af
--- /dev/null
+++ b/docs/html-intl/ru/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=Optimizing Battery Life
+
+trainingnavtop=true
+startpage=true
+next.title=Monitoring the Battery Level and Charging State
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Требования</h2> 
+<ul>
+  <li>Android 2.0 (API уровня&nbsp;5) или более поздней версии</li>
+  <li>Опыт работы с <a href="{@docRoot}guide/components/intents-filters.html">намерениями и фильтрами намерений</a></li>
+</ul>
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">Службы</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Качественное приложение должно оказывать минимальное влияние на время работы устройства от батареи. В этом уроке вы научитесь создавать приложения, способные изменять функционал и режим работы в зависимости от состояния устройства.</p>
+
+<p>Отключение обновления данных фоновых служб при потере подключения и снижение частоты обновления при низком заряде батареи позволяет снизить расход энергии и продлить работу устройства без подзарядки.</p>
+
+<h2>Уроки</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">Отслеживание уровня заряда батареи и состояния зарядки</a></b></dt>
+  <dd>Вы узнаете, как изменять частоту обновления приложения, определяя и отслеживая текущий уровень заряда батареи и изменение состояния зарядки.</dd>
+
+  <dt><b><a href="docking-monitoring.html">Отслеживание состояния подключения к док-станции и определение ее типа</a></b></dt>
+  <dd>Оптимальная частота обновления зависит от способа использования устройства. Вы узнаете, как определять и отслеживать состояние подключения к док-станции и ее тип, чтобы соответствующим образом корректировать работу приложения.</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">Определение и отслеживание состояния подключения</a></b></dt>
+  <dd>Приложение невозможно обновить через Интернет, если отсутствует подключение. Вы узнаете, как проверить состояние подключения, чтобы при необходимости изменить частоту фоновых обновлений. Также вы научитесь проверять наличие мобильного подключения или подключения по сети Wi-Fi перед началом операций, требующих передачи больших объемов данных.</dd>
+
+  <dt><b><a href="manifest-receivers.html">Операции с приемниками широковещательных намерений по запросу</a></b></dt>
+  <dd>Приемники широковещательных намерений, объявленные в манифесте, можно включать и отключать во время работы приложения. Это позволяет отключать ненужные приемники в зависимости от состояния устройства. Вы узнаете, как повысить эффективность путем включения, отключения или каскадирования приемников изменения состояния и как отложить действие до момента перехода устройства в заданное состояние.</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html-intl/ru/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/ru/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..724ee93
--- /dev/null
+++ b/docs/html-intl/ru/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=Manipulating Broadcast Receivers On Demand
+parent.title=Optimizing Battery Life
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Determining and Monitoring the Connectivity Status
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#ToggleReceivers">Включение, отключение и каскадирование приемников изменения состояния для повышения эффективности</a></li>
+</ol>
+
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Самый простой способ отслеживать изменения состояния устройства&nbsp;– создать приемники {@link android.content.BroadcastReceiver} для каждого отслеживаемого состояния и зарегистрировать их в манифесте приложения. Затем в каждом из этих приемников можно переопределять график повторяющихся оповещений в зависимости от текущего состояния устройства.</p>
+
+<p>Этот способ имеет недостатки: приложение активирует устройство при каждом запуске любого из этих приемников, что далеко не всегда оправданно.</p>
+
+<p>Оптимальный вариант&nbsp;– включать и выключать приемники широковещательных намерений во время работы приложения. Это позволяет использовать приемники, объявленные в манифесте, как пассивные оповещения, которые инициируются системными событиями только в случае необходимости.</p>
+ 
+
+<h2 id="ToggleReceivers">Включение, отключение и каскадирование приемников изменения состояния для повышения эффективности </h2> 
+ 
+<p>{@link android.content.pm.PackageManager} позволяет включать и выключать любые компоненты, определенные в манифесте, в том числе все приемники широковещательных намерений:</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>При разрыве соединения этот метод позволяет выключить все приемники, кроме приемника изменения состояния подключения. И наоборот, когда подключение уже установлено, отслеживать изменения его состояния не требуется. Достаточно проверить наличие подключения к Интернету непосредственно перед обновлением или изменением графика оповещений о регулярном обновлении.</p>
+
+<p>Точно так же можно отложить загрузку, для выполнения которой требуется более высокая пропускная способность. Просто включите приемник широковещательных намерений, который будет отслеживать изменения возможности подключения и инициировать загрузку только после подключения к сети Wi-Fi.</p>
diff --git a/docs/html-intl/ru/training/multiscreen/adaptui.jd b/docs/html-intl/ru/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..490a64a
--- /dev/null
+++ b/docs/html-intl/ru/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=Implementing Adaptative UI Flows
+parent.title=Designing for Multiple Screens
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Supporting Different Screen Densities
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>Содержание урока</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">Определение текущего макета</a></li>
+  <li><a href="#TaskReactToLayout">Дальнейшие действия в зависимости от текущего макета</a></li>
+  <li><a href="#TaskReuseFrag">Повторное использование фрагментов в других активностях</a></li>
+  <li><a href="#TaskHandleConfigChanges">Обработка изменений конфигурации экрана</a></li>
+</ol>
+
+<h2>Дополнительные материалы</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Поддержка планшетных ПК и мобильных телефонов</a></li>
+</ul>
+ 
+<h2>Упражнение</h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>Алгоритм пользовательского интерфейса зависит от макета, который в данный момент отображается. Например, если приложение работает в двухпанельном режиме, то при нажатии на элемент в левой панели содержание отобразится в правой. В однопанельном режиме содержание откроется отдельно (в другой активности).</p>
+
+
+<h2 id="TaskDetermineCurLayout">Определение текущего макета</h2>
+
+<p>Так как в реализации макетов существуют отличия, первое, что необходимо сделать,&nbsp;– определить, какой макет отображается в данный момент. Например, работает ли приложение в однопанельном или двухпанельном режиме. Для этого создадим запрос о том, существует ли данное представление и отображается ли оно в настоящий момент:</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>Обратите внимание: представленный выше код содержит запрос о том, доступна ли панель article, поскольку это удобнее, чем писать отдельные запросы для каждого макета.</p>
+
+<p>Кроме того, для работы с учетом существующих компонентов можно также проверять их доступность, прежде чем выполнять с ними какие-либо операции. Например, в учебном приложении News Reader есть кнопка, которая служит для доступа в меню, однако она отображается только в операционных системах Android версии ниже, чем 3.0, потому что в последующих версиях ее функцию выполняет элемент <PH>{@link android.app.ActionBar}</PH> на уровне API 11 и выше. Чтобы проверить наличие этой кнопки, добавим прослушиватель событий с помощью следующего кода:</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">Дальнейшие действия в зависимости от текущего макета</h2>
+
+<p>Результаты некоторых операций зависят от текущего макета. Например, если в приложении News Reader в двухпанельном режиме нажать на заголовок в списке, то статья откроется в правой панели. Если же интерфейс работает в однопанельном режиме, будет запущена отдельная активность:</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>Аналогично, в двухпанельном режиме должна отображаться панель действий с навигационными вкладками, а в однопанельном навигация должна быть реализована с помощью раскрывающегося списка. Приложение должно проверять, какой из этих вариантов следует использовать:</p>
+
+<pre>
+final String CATEGORIES[] = { "Лучшие статьи", "Политика", "Экономика", "Новости технологий" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">Повторное использование фрагментов в других активностях</h2>
+
+<p>Одним из примеров повторяющегося фрагмента является реализация части интерфейса как панели в одних конфигурациях и как отдельной активности в других. Например, если приложение News Reader работает на достаточно большом экране, текст новостной статьи отображается в правой панели, а если на маленьком, то он открывается в отдельной активности.</p>
+
+<p>В таких случаях следует повторно использовать подкласс <PH>{@link android.app.Fragment}</PH> в нескольких активностях. Например, в двухпанельном макете используется подкласс <code>ArticleFragment</code>:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>Он же (без макета) используется при работе на маленьком экране (активность <code>ArticleActivity</code>):</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>Результат будет таким же, как если бы мы объявили фрагмент в макете XML, однако в этом случае макет XML не требуется, так как фрагмент article является единственным компонентом этой активности.</p>
+
+<p>При создании фрагментов важно не привязывать их строго к конкретной активности. Для этого можно определить интерфейс с абстрактным описанием всех необходимых способов взаимодействия фрагмента с активностью, в которой он содержится. Затем этот интерфейс нужно реализовать в самой активности.</p>
+
+<p>Например, именно так работает фрагмент <code>HeadlinesFragment</code> в приложении News Reader:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>Затем, когда пользователь выбирает заголовок, фрагмент оповещает об этом не указанную в коде активность, а заданный ею прослушиватель:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p>Этот метод рассматривается подробнее в разделе <a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">Поддержка планшетных ПК и мобильных телефонов</a>.</p>
+
+
+<h2 id="TaskHandleConfigChanges">Обработка изменений конфигурации экрана</h2>
+
+<p>При реализации отдельных частей интерфейса с помощью разных активностей нужно учитывать, что интерфейс должен уметь реагировать на определенные изменения конфигурации, такие как поворот экрана.</p>
+
+<p>Например, на типичном планшетном ПК с размером экрана 7&nbsp;дюймов под управлением ОС Android 3.0 или более поздней версии при вертикальной ориентации статья в приложении News Reader открывается с помощью отдельной активности, а при горизонтальной используется двухпанельный макет.</p>
+
+<p>Это означает, что если пользователь держит планшетный ПК вертикально и на экране запущена активность для просмотра статьи, приложение должно уметь определить, что ориентация была изменена на горизонтальную. Затем оно должно соответствующим образом отреагировать на изменение, то есть завершить эту активность и вернуться к основной активности, чтобы содержание отобразилось в двухпанельном макете:</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html-intl/ru/training/multiscreen/index.jd b/docs/html-intl/ru/training/multiscreen/index.jd
new file mode 100644
index 0000000..023eaec
--- /dev/null
+++ b/docs/html-intl/ru/training/multiscreen/index.jd
@@ -0,0 +1,64 @@
+page.title=Designing for Multiple Screens
+
+trainingnavtop=true
+startpage=true
+next.title=Supporting Different Screen Sizes
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>Требования</h2> 
+
+<ul>
+  <li>Android 1.6 или более поздней версии (для запуска учебного приложения требуется версия 2.1 или более поздняя)</li>
+  <li>Начальные знания о компонентах <a
+href="http://developer.android.com/guide/components/activities.html">Activity</a> (активность) и <a href="http://developer.android.com/guide/components/fragments.html">Fragment</a> (фрагмент)</li>
+  <li>Опыт создания <a
+href="http://developer.android.com/guide/topics/ui/index.html">пользовательских интерфейсов</a> для Android</li>
+  <li>Некоторые функции требуют использования <a
+href="{@docRoot}tools/extras/support-library.html">вспомогательной библиотеки</a></li>
+</ul>
+
+<h2>Дополнительные материалы</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Поддержка нескольких экранов</a></li>
+</ul>
+ 
+<h2>Упражнение</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>На платформе Android работают устройства с самыми разными размерами экрана: от телефонов до телевизоров. Чтобы с вашим приложением могли работать как можно больше пользователей, оно должно корректно отображаться на всех этих устройствах.</p>
+
+<p>Однако совместимость с разными типами устройств&nbsp;– это еще не все. От размера экрана зависит, какие возможности будет иметь пользователь при работе с приложением. Чтобы пользователи действительно остались довольны вашим приложением, оно должно не просто <em>поддерживать</em> разные экраны, но и быть <em>оптимизировано</em> для каждого из них.</p>
+
+<p>Этот модуль посвящен реализации пользовательского интерфейса, оптимизированного для разных конфигураций экрана.</p>
+
+<p>Код, приведенный в каждом уроке, взят из учебного приложения, в котором демонстрируются способы оптимизации для разных экранов. Вы можете загрузить его (в правой части экрана) и использовать части кода в собственном приложении.</p>
+
+<p class="note"><strong>Примечание</strong>. В этом модуле и в учебном приложении используется <a
+href="{@docRoot}tools/extras/support-library.html">вспомогательная библиотека</a>, позволяющая работать с API  <PH>{@link android.app.Fragment}</PH> в версиях до Android 3.0. Чтобы иметь возможность использовать все необходимые API, загрузите библиотеку и добавьте ее в свое приложение.</p>
+ 
+
+<h2>Уроки</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">Поддержка разных размеров экрана</a></b></dt> 
+    <dd>В этом уроке рассказывается, как создать макет, который адаптируется к разным размерам экрана, используя масштабируемые представления, объекты <PH>{@link android.widget.RelativeLayout}</PH>, квалификаторы размера и ориентации, фильтры псевдонимов и растровые изображений формата nine-patch.</dd> 
+ 
+  <dt><b><a href="screendensities.html">Поддержка разных разрешений экрана</a></b></dt> 
+    <dd>В этом уроке рассказывается, как работать с экранами разного разрешения с помощью не зависящих от разрешения пикселей и как подготовить растровые изображения для каждого из них.</dd> 
+ 
+  <dt><b><a href="adaptui.html">Реализация адаптируемых алгоритмов работы пользовательского интерфейса</a></b></dt> 
+    <dd>В этом уроке рассказывается, как реализовать алгоритм работы интерфейса, адаптирующийся к размеру и разрешению экрана, то есть способный определять активный макет во время выполнения приложения, выбирать дальнейшие действия на основе текущего макета и обрабатывать изменения конфигурации экрана.</dd> 
+</dl> 
diff --git a/docs/html-intl/ru/training/multiscreen/screendensities.jd b/docs/html-intl/ru/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..cfd4724
--- /dev/null
+++ b/docs/html-intl/ru/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=Supporting Different Densities
+parent.title=Designing for Multiple Screens
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Supporting Different Screen Sizes
+previous.link=screensizes.html
+next.title=Implementing Adaptative UI Flows
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#TaskUseDP">Использование пикселей, не зависящих от разрешения</a></li>
+  <li><a href="#TaskProvideAltBmp">Предоставление альтернативных растровых изображений</a></li>
+</ol>
+
+<h2>Дополнительные материалы</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Поддержка нескольких экранов</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Рекомендации по созданию значков</a></li>
+</ul>
+
+<h2>Упражнение</h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>В этом уроке рассказывается, как создать интерфейс, поддерживающий разные разрешения экрана, за счет использования разных ресурсов и не зависящих от разрешения единиц измерения.</p>
+
+<h2 id="TaskUseDP">Использование пикселей, не зависящих от разрешения</h2>
+
+<p>Разработчики часто допускают одну и ту же ошибку при создании макетов&nbsp;– указывают размеры и расстояния с помощью абсолютных значений в пикселях. Задавать размеры в пикселях не рекомендуется, поскольку из-за различной плотности пикселей на экранах разных устройств фактический размер макета будет неодинаков. Всегда задавайте размеры в единицах <code>dp</code> или <code>sp</code>. <code>dp</code>&nbsp;– это не зависящий от разрешения пиксель, равный физическому пикселю на экране с плотностью 160&nbsp;точек/дюйм. <code>sp</code> является аналогичной единицей измерения, но масштабируется на основе выбранного пользователем размера текста, поэтому ее следует применять для указания величины шрифта, но не размера макета.</p>
+
+<p>Например, если вы задаете расстояние между двумя представлениями, рекомендуется использовать <code>dp</code>, а не <code>px</code>:</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>Для определения размера шрифта всегда используйте <code>sp</code>:</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">Предоставление альтернативных растровых изображений</h2>
+
+<p>Так как платформа Android предназначена для устройств с разными разрешениями экрана, необходимо позаботиться о наличии растровых изображений для каждого из четырех обобщенных типов разрешения: низкого, среднего, высокого и очень высокого. Это обеспечит оптимальное сочетание качества графики и производительности на всех устройствах.</p>
+
+<p>На основе исходного векторного рисунка создайте растровые изображения для каждого из указанных разрешений согласно следующей шкале размеров:</p>
+
+<p><ul>
+  <li><code>xhdpi</code>: 2,0
+  <li><code>hdpi</code>: 1,5
+  <li><code>mdpi</code>: 1,0 (стандартный размер)
+  <li><code>ldpi</code>: 0,75
+</ul></p>
+
+<p>Это означает, что изображение, которое на устройствах с разрешением экрана <code>xhdpi</code> имеет размер 200&nbsp;x&nbsp;200, на устройствах <code>hdpi</code> должно иметь размер 150&nbsp;x&nbsp;150, на устройствах <code>mdpi</code>&nbsp;– 100&nbsp;x&nbsp;100, а на устройствах <code>ldpi</code>&nbsp;– 75&nbsp;x&nbsp;75.</p>
+
+<p>Поместите файлы изображений в соответствующие подкаталоги в папке <code>res/</code>, и система автоматически выберет подходящий в зависимости от разрешения экрана устройства, на котором выполняется приложение:</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>При каждом обращении к файлу <code>&#64;drawable/awesomeimage</code> система будет выбирать изображение, отвечающее разрешению экрана.</p>
+
+<p>Дополнительную информацию и советы можно найти в разделе <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Рекомендации по созданию значков</a>.</p>
+
diff --git a/docs/html-intl/ru/training/multiscreen/screensizes.jd b/docs/html-intl/ru/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..9684d77
--- /dev/null
+++ b/docs/html-intl/ru/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=Supporting Different Screen Sizes
+parent.title=Designing for Multiple Screens
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Supporting Different Screen Densities
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">Использование параметров wrap_content и match_parent</a></li>
+  <li><a href="#TaskUseRelativeLayout">Использование объекта RelativeLayout</a></li>
+  <li><a href="#TaskUseSizeQuali">Использование квалификаторов размера</a></li>
+  <li><a href="#TaskUseSWQuali">Использование квалификатора Smallest-width</a></li>
+  <li><a href="#TaskUseAliasFilters">Использование псевдонимов макетов</a></li>
+  <li><a href="#TaskUseOriQuali">Использование квалификаторов ориентации</a></li>
+  <li><a href="#TaskUse9Patch">Использование растровых изображений nine-patch</a></li>
+</ol>
+
+<h2>Дополнительные материалы</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Поддержка нескольких экранов</a></li>
+</ul>
+
+<h2>Упражнение</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>В этом уроке описаны следующие аспекты обеспечения совместимости интерфейса с разными экранами:</p>
+<ul> 
+  <li>обеспечение способности макета адаптироваться к размеру экрана;</li> 
+  <li>выбор макета интерфейса, отвечающего конфигурации экрана;</li> 
+  <li>контроль правильности применяемого макета;</li>
+  <li>использование масштабируемых растровых изображений.</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">Использование параметров wrap_content и match_parent</h2> 
+
+<p>Чтобы создать масштабируемый макет, способный адаптироваться к разным экранам, используйте в качестве значений ширины и высоты отдельных компонентов представления параметры <code>"wrap_content"</code> и <code>"match_parent"</code>. Если используется <code>"wrap_content"</code>, для ширины или высоты представления устанавливается минимальное значение, позволяющее уместить содержание на экран, а параметр <code>"match_parent"</code> (известный как <code>"fill_parent"</code> в API до 8&nbsp;уровня) служит для растягивания компонента по размеру родительского представления.</p>
+
+<p>Если указать параметры <code>"wrap_content"</code> и <code>"match_parent"</code> вместо строго заданных размеров, в представлениях будет использоваться минимально необходимое место или они будут растягиваться на всю доступную длину и ширину соответственно. Например:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>Обратите внимание на то, что в коде учебного приложения размеры компонентов заданы с помощью параметров <code>"wrap_content"</code> и <code>"match_parent"</code>. В результате макет правильно отображается на экранах разных размеров при разных ориентациях.</p>
+
+<p>Например, вот так он выглядит в вертикальной и горизонтальной ориентациях. Обратите внимание на то, как размеры компонентов автоматически адаптируются к длине и ширине:</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>Рисунок 1</strong>. Приложение News Reader при вертикальной (слева) и горизонтальной (справа) ориентации.</p>
+
+
+<h2 id="TaskUseRelativeLayout">Использование объекта RelativeLayout</h2> 
+
+<p>С помощью вложенных экземпляров объекта <PH>{@link android.widget.LinearLayout}</PH> и параметров <code>"wrap_content"</code> и <code>"match_parent"</code> можно создавать достаточно сложные макеты. Однако <PH>{@link android.widget.LinearLayout}</PH> не дает возможности точно управлять взаимным расположением дочерних представлений: в <PH>{@link android.widget.LinearLayout}</PH> они просто помещаются в ряд друг за другом. Если необходимо расположить дочерние представления иным образом, используйте объект <PH>{@link android.widget.RelativeLayout}</PH>, позволяющий задать относительные позиции компонентов. Например, одно дочернее представление можно выровнять по левому краю экрана, а другое&nbsp;– по правому.</p>
+
+<p>Например:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>На рис.&nbsp;2 показано, как этот макет выглядит на экране QVGA.</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;2</strong>. Скриншот экрана QVGA (маленького размера).</p>
+
+<p>На рис.&nbsp;3 показано, как он выглядит на экране с большей диагональю.</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;3</strong>. Скриншот экрана WSVGA (большего размера).</p>
+
+<p>Обратите внимание: несмотря на изменение размера компонентов их взаимное расположение остается прежним, так как оно задано объектом <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p>
+
+ 
+<h2 id="TaskUseSizeQuali">Использование квалификаторов размера</h2> 
+
+<p>Масштабируемые или относительные макеты, один из которых продемонстрирован выше, имеют свои ограничения. Хотя они позволяют создать интерфейс, способный адаптироваться к разным экранам за счет растягивания пространства внутри и вокруг компонентов, пользователю может оказаться не слишком удобно работать с таким интерфейсом. Поэтому в приложении должен использоваться не один масштабируемый макет, а несколько альтернативных вариантов для разных конфигураций экрана. Их можно создать с помощью <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">квалификаторов конфигураций</a>, которые позволяют оперативно выбирать ресурсы, отвечающие текущим параметрам экрана (например, разные варианты макетов для экранов разных размеров).</p>
+
+<p>Многие приложения отображаются на больших экранах в двухпанельном режиме, при котором список элементов расположен в одной панели, а их содержание открывается в другой. Такой режим просмотра удобен на достаточно больших экранах планшетных ПК и телевизоров, однако на экране телефона эти панели следует отображать по отдельности. Для каждого режима просмотра нужно создать отдельный файл.</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, однопанельный макет (по умолчанию):
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>, двухпанельный макет:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>Обратите внимание, что во втором случае в названии каталога использован квалификатор <code>large</code>. Этот макет будет выбран на устройствах, экраны которых считаются большими (например, 7&nbsp;дюймов и более). Первый макет (без квалификаторов) будет выбран для устройств с маленьким экраном.</p>
+
+
+<h2 id="TaskUseSWQuali">Использование квалификатора Smallest-width</h2>
+
+<p>Одной из проблем, с которой сталкивались разработчики приложений для устройств Android версий до 3.2, было слишком общее определение "большого" экрана. Это касалось устройств Dell Streak, первой модели Galaxy Tab и планшетных ПК с экраном размером 7&nbsp;дюймов. Многие приложения требовалось по-разному отображать на разных устройствах (например, с 5- и 7-дюймовыми экранами), хотя они и относились к одной категории "больших" экранов. В Android версии 3.2 и более поздних доступен квалификатор Smallest-width.</p>
+
+<p>Он позволяет определять экраны с заданной минимальной шириной в dp. Например, типичный планшетный ПК с экраном 7&nbsp;дюймов имеет минимальную ширину 600&nbsp;dp, и если вы хотите, чтобы приложение работало на нем в двухпанельном режиме (а на меньших экранах в однопанельном), используйте два макета из предыдущего раздела, но вместо квалификатора размера <code>large</code> укажите <code>sw600dp</code>. В таком случае на экранах, минимальная ширина которых составляет 600&nbsp;dp, будет использоваться двухпанельный макет.</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, однопанельный макет (по умолчанию):
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>, двухпанельный макет:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>Это означает, что на устройствах, минимальная ширина экрана которых не меньше 600&nbsp;dp, будет выбран <code>layout-sw600dp/main.xml</code> (двухпанельный макет), а на экранах меньшего размера&nbsp;– <code>layout/main.xml</code> (однопанельный макет).</p>
+
+<p>Следует учесть, что на Android-устройствах до версии 3.2 квалификатор <code>sw600dp</code> не будет работать, поэтому для них по-прежнему нужно использовать <code>large</code>. Таким образом, вам потребуется еще один файл с названием <code>res/layout-large/main.xml</code>, идентичный файлу <code>res/layout-sw600dp/main.xml</code>. В следующем разделе вы познакомитесь с методом, который позволяет избежать дублирования таких файлов макета.</p>
+
+
+<h2 id="TaskUseAliasFilters">Использование псевдонимов макетов</h2> 
+
+<p>Квалификатор Smallest-width работает только на устройствах Android 3.2 или более поздних версий. Для совместимости с более ранними устройствами по-прежнему следует использовать абстрактные размеры (small, normal, large и xlarge). Например, чтобы интерфейс открывался в однопанельном режиме на телефонах и в многопанельном на планшетных ПК с 7-дюймовым экраном, телевизорах и других крупных устройствах, подготовьте следующие файлы:</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> однопанельный макет;</li>
+<li><code>res/layout-large:</code> многопанельный макет;</li>
+<li><code>res/layout-sw600dp:</code> многопанельный макет.</li>
+</ul></p>
+
+<p>Последние два файла идентичны: один из них предназначен для устройств Android 3.2 и новее, а второй для более старых планшетных ПК и телевизоров на платформе Android.</p>
+
+<p>Чтобы не создавать дубликаты файлов и упростить процесс поддержки приложения, используйте псевдонимы. Например, можно определить следующие макеты:</p>
+
+<ul>
+<li><code>res/layout/main.xml</code> (однопанельный макет);</li>
+<li><code>res/layout/main_twopanes.xml</code> (двухпанельный макет).</li>
+</ul>
+
+<p>Затем добавьте следующие два файла:</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>Содержание последних двух файлов одинаково, но сами по себе они не определяют макет. Они служат для того, чтобы назначить файл <PH>{@code main}</PH> в качестве псевдонима <PH>{@code main_twopanes}</PH>. Так как в них используются селекторы <code>large</code> и <code>sw600dp</code>, они применяются к планшетным ПК и телевизорам на платформе Android независимо от версии (для версий до 3.2 используется
+<PH>{@code large}</PH>, а для более новых&nbsp;– <code>sw600dp</code>).</p>
+
+
+<h2 id="TaskUseOriQuali">Использование квалификаторов ориентации</h2> 
+
+<p>Хотя некоторые макеты одинаково хорошо смотрятся в вертикальной и горизонтальной ориентациях, в большинстве случаев интерфейс все же приходится адаптировать. Ниже показано, как изменяется макет в приложении News Reader в зависимости от размера и ориентации экрана.</p>
+
+<p><ul>
+<li><b>Маленький экран, вертикальная ориентация</b>: однопанельный вид с логотипом.</li>
+<li><b>Маленький экран, горизонтальная ориентация</b>: однопанельный вид с логотипом.</li>
+<li><b>Планшетный ПК с 7-дюймовым экраном, вертикальная ориентация</b>: однопанельный вид с панелью действий.</li>
+<li><b>Планшетный ПК с 7-дюймовым экраном, горизонтальная ориентация</b>: двухпанельный вид с панелью действий.</li>
+<li><b>Планшетный ПК с 10-дюймовым экраном, вертикальная ориентация</b>: двухпанельный вид (узкий вариант) с панелью действий.</li>
+<li><b>Планшетный ПК с 10-дюймовым экраном, горизонтальная ориентация</b>: двухпанельный вид (широкий вариант) с панелью действий.</li>
+<li><b>Телевизор, горизонтальная ориентация</b>: двухпанельный вид с панелью действий.</li>
+</ul></p>
+
+<p>Каждый из этих макетов определен в XML-файле в каталоге <code>res/layout/</code>. Чтобы сопоставить их с определенными конфигурациями экрана, в приложении используются псевдонимы:</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>После того как все возможные макеты определены, остается сопоставить каждый из них с подходящей конфигурацией, используя квалификаторы конфигураций. Воспользуемся псевдонимами макетов:</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">Использование растровых изображений nine-patch</h2>
+
+<p>Чтобы интерфейс был совместим с экранами разных размеров, используемые в нем графические элементы также должны быть адаптированы соответствующим образом. Например, фон кнопки должен одинаково хорошо выглядеть независимо от ее формы.</p>
+
+<p>Если использовать для компонентов, размеры которых меняются, обычные изображения, то они будут равномерно сжиматься и растягиваться, и результат будет далек от идеального. Решением являются растровые изображения формата nine-patch&nbsp;– специальные PNG-файлы, содержащие информацию о том, какие области можно растягивать, а какие нет.</p>
+
+<p>Создавая растровые изображения для масштабируемых компонентов, обязательно используйте формат nine-patch. На рис.&nbsp;4 показано обычное растровое изображение (увеличенное в 4&nbsp;раза для наглядности), которое мы переведем в формат nine-patch.</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;4</strong>. <code>button.png</code></p>
+
+<p>Откройте его с помощью утилиты <ode
+href="{@docRoot}tools/help/draw9patch.html"><code>draw9patch</code></a>, входящей в комплект разработчика (в каталоге <code>tools/</code>). Установите метки на левом и верхнем краях, чтобы ограничить области, которые можно растягивать. Можно также провести линию вдоль правого и нижнего краев, как показано на рис.&nbsp;5, чтобы отметить области, в которых содержание должно быть зафиксировано.</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;5</strong>. <code>button.9.png</code></p>
+
+<p>Обратите внимание на черные пиксели по краям. Метки у верхней и левой границ обозначают те области, которые можно растягивать, а метки у правой и нижней границ&nbsp;– те, куда должно быть помещено содержание.</p>
+
+<p>Также обратите внимание на расширение <code>.9.png</code>. Оно должно быть задано именно в таком виде, чтобы система могла определить, что это формат nine-patch, а не обычный PNG-файл.</p>
+
+<p>При применении этого фона к компоненту (с помощью <code>android:background="&#64;drawable/button"</code>) изображение будет растянуто по размеру кнопки, как показано на рис.&nbsp;6.</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;6</strong>. Кнопки разных размеров с файлом фона <code>button.9.png</code> в формате nine-patch.</p>
+
diff --git a/docs/html-intl/zh-cn/training/monitoring-device-state/battery-monitoring.jd b/docs/html-intl/zh-cn/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..0e1ccb7
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=监控电池电量和充电状态
+parent.title=优化电池使用时间
+parent.link=index.html
+
+trainingnavtop=true
+next.title=确定和监控基座对接状态和类型
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#DetermineChargeState">确定当前的充电状态</a></li>
+  <li><a href="#MonitorChargeState">监控充电状态的变化</a></li>
+  <li><a href="#CurrentLevel">确定当前的电池电量</a></li>
+  <li><a href="#MonitorLevel">监控电池电量的显著变化</a></li>
+</ol>
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>如果您要更改后台更新频率,从而减少更新对电池使用时间的影响,最好先查看当前的电池电量和充电状态。</p>
+
+<p>对应用进行更新会影响电池使用时间,具体取决于设备的电池电量和充电状态。如果用户正在通过交流电源为设备充电,更新应用的影响就可以忽略不计。因此,在大多数情况下,只要设备连接了充电器,您就可以最大程度地提高刷新频率。相反,如果设备在消耗电池电量,那么降低更新频率就可以延长电池使用时间。</p>
+
+<p>同样,您也可以查看电池电量,如果电量即将耗尽,您就可以降低更新频率,甚至停止更新。</p>
+
+
+<h2 id="DetermineChargeState">确定当前的充电状态</h2> 
+ 
+<p>请先确定当前的充电状态。{@link android.os.BatteryManager} 会通过一个包含充电状态的持续 {@link android.content.Intent} 广播所有的电池详情和充电详情。</p>
+
+<p>由于这是个持续 intent,因此您无需通过将传入 {@code null} 的 {@code registerReceiver} 作为接收器直接调用(如下一代码段所示)来注册 {@link android.content.BroadcastReceiver},系统会返回当前电池状态 intent。您可以在此处传入实际的 {@link android.content.BroadcastReceiver} 对象,不过我们会在下文中介绍如何处理更新,因此您不一定要执行此操作。</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>如果设备正在充电,则您可以提取当前的充电状态和充电方式(无论是通过 USB 还是交流充电器),如下所示:<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>通常,如果设备连接了交流充电器,您就应最大程度地提高后台更新频率;如果设备通过 USB 充电,请降低更新频率;如果电池在耗电,请进一步降低更新频率。</p>
+
+
+<h2 id="MonitorChargeState">监控充电状态的变化</h2> 
+
+<p>充电状态的改变就像设备连接电源那样容易,因此监控充电状态的变化并相应地调整刷新频率就很重要了。</p>
+
+<p>只要设备连接或断开电源,{@link android.os.BatteryManager} 就会广播相应的操作。即使您的应用没有运行,也请务必接收这些事件,尤其是当这些事件会影响您启动应用以执行后台更新的频率时。因此,您应该通过在 intent 过滤器中定义 {@link android.content.Intent#ACTION_POWER_CONNECTED} 和 {@link android.content.Intent#ACTION_POWER_DISCONNECTED},在清单中注册 {@link android.content.BroadcastReceiver} 来侦听这两个事件。</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>在实施相关的 {@link android.content.BroadcastReceiver} 时,您可以按上一步骤所述提取当前的充电状态和充电方式。</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">确定当前的电池电量</h2> 
+
+<p>在某些情况下,确定当前的电池电量会对您有所帮助。如果电池电量低于一定水平,您可以降低后台更新频率。</p>
+
+<p>您可以从电池状态 intent 中提取要了解的当前电池电量以及电池容量,具体如下所示:</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">监控电池电量的显著变化</h2> 
+
+<p>您无法轻松地对电池状态进行持续监控,不过也无需这么做。</p>
+
+<p>一般来说,与应用的正常行为相比,持续监控电池电量会消耗更多电量。因此,比较合适的做法是只监控电池电量的显著变化(尤其是在设备进入或结束低电量状态的情况下)。</p>
+
+<p>以下清单代码段提取自广播接收器中的 intent 过滤器元素。通过侦听 {@link android.content.Intent#ACTION_BATTERY_LOW} 和 {@link android.content.Intent#ACTION_BATTERY_OKAY},只要设备的电池进入或结束低电量状态,系统就会触发接收器。</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>如果电池电量极低,通常比较合适的做法是停用所有后台更新。如果您还没用上更新的数据,手机就自动关机了,那这些数据再新也没有意义。</p>
+
+<p>在很多情况下,将设备插入基座就可以为其充电。下一教程将向您介绍如何确定当前基座状态及如何监控设备对接的变化。</p>
+
diff --git a/docs/html-intl/zh-cn/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html-intl/zh-cn/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..8313e08
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=确定和监控网络连接状态
+parent.title=优化电池使用时间
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=确定和监控基座对接状态和类型
+previous.link=docking-monitoring.html
+next.title=根据需要操作广播接收器
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#DetermineConnection">确定是否已连接互联网</a></li>
+  <li><a href="#DetermineType">确定互联网连接的类型</a></li>
+  <li><a href="#MonitorChanges">监控连接情况的变化</a></li>
+</ol>
+
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>
+</ul>
+
+</div> 
+</div>
+
+<p>重复提醒和后台服务最常见的用途之一,就是为来自互联网资源的应用数据、缓存数据安排定期更新或执行长时间运行的下载任务。但是,如果您没有连接互联网,或因连接过慢而无法完成下载,那就根本没必要唤醒设备并安排更新了。</p>
+
+<p>您可以使用 {@link android.net.ConnectivityManager} 查看是否确实已连接互联网,如果已连接,您还可以了解当前的连接类型。</p>
+
+
+<h2 id="DetermineConnection">确定是否已连接互联网</h2> 
+ 
+<p>如果设备未连接互联网,就没有必要根据互联网资源安排更新了。以下代码段说明如何使用 {@link android.net.ConnectivityManager} 查询有效网络并确定该网络是否已连接互联网。</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">确定互联网连接的类型</h2> 
+
+<p>您也可以确定当前可用的互联网连接的类型。</p>
+
+<p>通过移动数据、WiMAX、Wi-Fi 和以太网连接可提供设备连接。您可以查询有效网络的类型(具体如下所示),以便根据可用带宽调整刷新频率。</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>移动数据的费用往往比 Wi-Fi 高很多,因此在大多数情况下,如果您使用的是移动连接,就应降低应用更新频率。同样,在没有 Wi-Fi 连接的情况下,您就应暂停较大的下载任务。</p>
+
+<p>停用更新后,请务必侦听连接情况的变化,以便在建立互联网连接后恢复更新。</p>
+
+
+<h2 id="MonitorChanges">监控连接情况的变化</h2> 
+
+<p>只要连接的具体情况发生变化,{@link android.net.ConnectivityManager} 就会广播 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) 操作。您可以在清单中注册广播接收器,以便侦听这些变化并相应地恢复(或暂停)后台更新。</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>设备连接情况的变化可能会非常频繁,只要您在移动数据和 Wi-Fi 之间相互切换,系统就会触发此广播。因此比较合适的做法是,仅当之前暂停了更新或下载时才监控此广播,以便恢复更新或下载。通常,您只需在开始更新前检查互联网连接情况即可,如果未连接互联网,请暂停后续更新,直到连接恢复。</p>
+
+<p>此技巧需要切换您在清单中声明的广播接收器,具体说明请见下一教程。</p>
diff --git a/docs/html-intl/zh-cn/training/monitoring-device-state/docking-monitoring.jd b/docs/html-intl/zh-cn/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..53b951d
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=确定和监控基座对接状态和类型
+parent.title=优化电池使用时间
+parent.link=index.html
+
+trainingnavtop=true
+previous.title= 监控电池电量和充电状态
+previous.link=battery-monitoring.html
+next.title= 确定和监控网络连接状态
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#CurrentDockState">确定当前的基座状态</a></li>
+  <li><a href="#DockType">确定当前的基座类型</a></li>
+  <li><a href="#MonitorDockState">监控基座状态或类型的变化</a></li>
+</ol>
+
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Android 设备支持几种不同类型的基座。这些类型包括车载或家用基座以及数字和模拟基座。许多基座可用于为插入的设备充电,因此基座状态通常与充电状态紧密相关。</p>
+
+<p>您可以根据手机的基座状态调整更新频率,具体取决于相关应用。如果设备插入的是桌面基座,您就可以提高体育中心类应用的更新频率;如果设备插入的是车载基座,您就可以完全停用此类更新。相反,如果设备插入的是车载基座且后台服务正在更新路况,您就可以最大程度地提高更新频率。</p>
+
+<p>系统是以持续 {@link android.content.Intent} 的形式广播基座状态的,这样您就可以查询设备是否插入了基座,如果已插入,您还可以查询基座类型。</p>
+
+
+<h2 id="CurrentDockState">确定当前的基座状态</h2> 
+ 
+<p>基座状态详情是以附加信息的形式包含在 {@link android.content.Intent#ACTION_DOCK_EVENT} 操作的持续广播中的。由于这属于持续广播,因此您无需注册 {@link android.content.BroadcastReceiver}。您可以将传入 {@code null} 的 {@link android.content.Context#registerReceiver registerReceiver()} 作为广播接收器直接调用,具体如下一代码段所示。</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>您可以从 {@code EXTRA_DOCK_STATE} 附加信息中提取当前的基座对接状态:<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">确定当前的基座类型</h2> 
+
+<p>用户可以将设备插入以下四种类型的基座: 
+<ul><li>车载基座</li>
+<li>桌面基座</li>
+<li>低端(模拟)桌面基座</li>
+<li>高端(数字)桌面基座</li></ul></p>
+
+<p>请注意,后两种类型仅适用于 API 级别为 11 及以上的 Android,因此如果您只关注基座类型,而不在意基座究竟是数字的还是模拟的,那么比较合适的做法就是查看全部三种类型:</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">监控基座状态或类型的变化</h2> 
+
+<p>无论设备是否插入了基座,系统都会广播 {@link android.content.Intent#ACTION_DOCK_EVENT} 操作。要监控设备基座状态的变化,您只需在应用清单中注册广播接收器即可,具体如以下代码段所示:</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>您可以使用上一步骤中所述的技术在接收器实施过程中提取基座的类型和状态。</p>
diff --git a/docs/html-intl/zh-cn/training/monitoring-device-state/index.jd b/docs/html-intl/zh-cn/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..aa10753
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=优化电池使用时间
+
+trainingnavtop=true
+startpage=true
+next.title=监控电池电量和充电状态
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>依存关系和前提条件</h2> 
+<ul>
+  <li>Android 2.0(API 级别 5)或更高版本</li>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>的使用经验</li>
+</ul>
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">服务</a>
+</ul>
+
+</div> 
+</div>
+
+<p>为了打造一个优秀的应用,您应设法降低应用对电池使用时间的影响。阅读完本教程后,您就可以让自己构建的应用根据其所在设备的状态来监控和调整自身的功能和行为。</p>
+
+<p>要确保在不影响用户体验的情况下最大程度地降低应用对电池使用时间的影响,您可以采取一些措施,例如在网络连接断开时停用后台服务更新,或在电池电量较低时降低此类更新的频率。</p>
+
+<h2>教程</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">监控电池电量和充电状态</a></b></dt>
+  <dd>了解如何通过确定和监控当前的电池电量和充电状态的变化来相应地调整应用的更新频率。</dd>
+
+  <dt><b><a href="docking-monitoring.html">确定和监控基座对接状态和类型</a></b></dt>
+  <dd>最佳刷新频率可能各有不同,具体取决于安装了相关应用的设备的使用方式。了解如何确定和监控所用基座的对接状态和类型,以便相应地调整应用的行为。</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">确定和监控网络连接状态</a></b></dt>
+  <dd>如果没有互联网连接,您就无法通过在线来源更新应用。了解如何查看连接状态,以便相应地调整后台更新频率。您还可以了解如何在执行高带宽操作前查看 Wi-Fi 或移动连接的状态。</dd>
+
+  <dt><b><a href="manifest-receivers.html">根据需要操作广播接收器</a></b></dt>
+  <dd>您可以在运行时切换自己在清单中声明的广播接收器,以便根据当前设备状态停用不需要的接收器。了解如何在设备未处于特定状态的情况下切换和层叠状态变化接收器和延迟操作,以便提高效率。</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html-intl/zh-cn/training/monitoring-device-state/manifest-receivers.jd b/docs/html-intl/zh-cn/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..07c014f
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=根据需要操作广播接收器
+parent.title=优化电池使用时间
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=确定和监控网络连接状态
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#ToggleReceivers">切换和层叠状态变化接收器以提高效率</a></li>
+</ol>
+
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>
+</ul>
+
+</div> 
+</div>
+
+<p>监控设备状态变化的最简单方法就是,为您监控的每种状态创建 {@link android.content.BroadcastReceiver} 并在应用清单中逐一进行注册。然后,您只需根据当前设备状态在每个接收器中重新安排重复提醒即可。</p>
+
+<p>此方法的负面影响在于,只要系统触发了这些接收器中的任何一个,相关应用就会唤醒设备,其频率可能会远远超过所需的水平。</p>
+
+<p>更好的方法是在运行时停用或启用广播接收器。这样的话,您就可以将自己在清单中声明的接收器用作被动提醒,只有在需要时才会由系统事件触发。</p>
+ 
+
+<h2 id="ToggleReceivers">切换和层叠状态变化接收器以提高效率 </h2> 
+ 
+<p>您可以使用 {@link android.content.pm.PackageManager} 切换清单中定义的任意组件的启用状态(包括您要启用或停用的任意广播接收器),具体如以下片段所示:</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>在使用此技巧时,如果您确定连接已断开,就可以停用除连接变化接收器外的所有接收器。相反,成功连接后,您就可以停止侦听连接变化,同时只需在执行更新和重新安排重复更新提醒前查看是否在线即可。</p>
+
+<p>您可以使用同样的方法来延迟需要较高带宽的下载任务。只有在连接 Wi-Fi 后,您才能直接启用用于侦听连接变化和启动下载任务的广播接收器。</p>
diff --git a/docs/html-intl/zh-cn/training/multiscreen/adaptui.jd b/docs/html-intl/zh-cn/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..89908fe
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=实施自适应用户界面流程
+parent.title=针对多种屏幕进行设计
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=支持各种屏幕密度
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>本教程将指导您</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">确定当前布局</a></li>
+  <li><a href="#TaskReactToLayout">根据当前布局做出响应</a></li>
+  <li><a href="#TaskReuseFrag">重复使用其他活动中的片段</a></li>
+  <li><a href="#TaskHandleConfigChanges">处理屏幕配置变化</a></li>
+</ol>
+
+<h2>您还应参阅</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">支持平板电脑和手持设备</a></li>
+</ul>
+ 
+<h2>试试看</h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>根据您的应用当前显示的布局,用户界面流程可能会有所不同。例如,如果您的应用处于双面板模式下,点击左侧面板上的项即可直接在右侧面板上显示相关内容;如果该应用处于单面板模式下,相关内容就应以其他活动的形式在同一面板上显示。</p>
+
+
+<h2 id="TaskDetermineCurLayout">确定当前布局</h2>
+
+<p>由于每种布局的实施都会稍有不同,因此您可能需要先确定当前向用户显示的布局。例如,您可以了解用户所处的是“单面板”模式还是“双面板”模式。要做到这一点,您可以查询指定视图是否存在以及是否已显示出来。</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>请注意,这段代码用于查询“报道”面板是否可用,与针对具体布局的硬编码查询相比,这段代码的灵活性要大得多。</p>
+
+<p>再举一个适应各种组件的存在情况的方法示例:在对这些组件执行操作前先查看它们是否可用。例如,新闻阅读器示例应用中有一个用于打开菜单的按钮,但只有在版本低于 3.0 的 Android 上运行该应用时,这个按钮才会存在,因为 API 级别 11 或更高级别中的  <PH>{@link android.app.ActionBar}</PH>  已取代了该按钮的功能。因此,您可以使用以下代码为此按钮添加事件侦听器:</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">根据当前布局做出响应</h2>
+
+<p>有些操作可能会因当前的具体布局而产生不同的结果。例如,在新闻阅读器示例中,如果用户界面处于双面板模式下,那么点击标题列表中的标题就会在右侧面板中打开相应报道;但如果用户界面处于单面板模式下,那么上述操作就会启动一个独立活动:</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>同样,如果该应用处于双面板模式下,就应设置带导航标签的操作栏;但如果该应用处于单面板模式下,就应使用旋转窗口小部件设置导航栏。因此您的代码还应确定哪种情况比较合适:</p>
+
+<pre>
+final String CATEGORIES[] = { "热门报道", "政治", "经济", "Technology" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">重复使用其他活动中的片段</h2>
+
+<p>多屏幕设计中的重复模式是指,对于某些屏幕配置,已实施界面的一部分会用作面板;但对于其他配置,这部分就会以独立活动的形式存在。例如,在新闻阅读器示例中,对于较大的屏幕,新闻报道文本会显示在右侧面板中;但对于较小的屏幕,这些文本就会以独立活动的形式存在。</p>
+
+<p>在类似情况下,您通常可以在多个活动中重复使用相同的  <PH>{@link android.app.Fragment}</PH>  子类以避免代码重复。例如,您在双面板布局中使用了 <code>ArticleFragment</code>:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>然后又在小屏幕的活动布局中重复使用(无布局)了它 (<code>ArticleActivity</code>):</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>当然,这与在 XML 布局中声明片段的效果是一样的,但在这种情况下却没必要使用 XML 布局,因为报道片段是此活动中的唯一组件。</p>
+
+<p>请务必在设计片段时注意,不要针对具体活动创建强耦合。要做到这一点,您通常可以定义一个界面,该界面概括了相关片段与其主活动交互所需的全部方式,然后让主活动实施该界面:</p>
+
+<p>例如,新闻阅读器应用的 <code>HeadlinesFragment</code> 会精确执行以下代码:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>然后,如果用户选择某个标题,相关片段就会通知由主活动指定的侦听器(而不是通知某个硬编码的具体活动):</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p><a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">支持平板电脑和手持设备</a>的指南中进一步介绍了此技术。</p>
+
+
+<h2 id="TaskHandleConfigChanges">处理屏幕配置变化</h2>
+
+<p>如果您使用独立活动实施界面的独立部分,那么请注意,您可能需要对特定配置变化(例如屏幕方向的变化)做出响应,以便保持界面的一致性。</p>
+
+<p>例如,在运行 Android 3.0 或更高版本的标准 7 英寸平板电脑上,如果新闻阅读器示例应用运行在纵向模式下,就会在使用独立活动显示新闻报道;但如果该应用运行在横向模式下,就会使用双面板布局。</p>
+
+<p>也就是说,如果用户处于纵向模式下且屏幕上显示的是用于阅读报道的活动,那么您就需要在检测到屏幕方向变化(变成横向模式)后执行相应操作,即停止上述活动并返回主活动,以便在双面板布局中显示相关内容:</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html-intl/zh-cn/training/multiscreen/index.jd b/docs/html-intl/zh-cn/training/multiscreen/index.jd
new file mode 100644
index 0000000..35c48e0
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/multiscreen/index.jd
@@ -0,0 +1,64 @@
+page.title=针对多种屏幕进行设计
+
+trainingnavtop=true
+startpage=true
+next.title=支持各种屏幕尺寸
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>依存关系和前提条件</h2> 
+
+<ul>
+  <li>Android 1.6 或更高版本(示例应用则需要 2.1 或更高版本)</li>
+  <li><a
+href="http://developer.android.com/guide/components/activities.html">活动</a>和<a href="http://developer.android.com/guide/components/fragments.html">片段</a>的基本知识</li>
+  <li>构建 Android <a
+href="http://developer.android.com/guide/topics/ui/index.html">用户界面</a>的经验</li>
+  <li>多个功能需要用到<a
+href="{@docRoot}tools/extras/support-library.html">支持库</a></li>
+</ul>
+
+<h2>您还应参阅</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">支持多种屏幕</a></li>
+</ul>
+ 
+<h2>试试看</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>Android 支持数百种屏幕尺寸不同的设备,包括小型手机和大型电视机。因此,请务必将您的应用设计为与所有的屏幕尺寸兼容,以便让尽可能多的用户使用该应用。</p>
+
+<p>不过,与各种类型的设备兼容还远远不够。由于各种屏幕尺寸对用户互动产生的利弊有所不同,因此要真正满足用户需求并广获好评,您的应用不仅需要支持多种屏幕,还应针对各类屏幕配置的用户体验进行优化。<em></em><em></em></p>
+
+<p>本教程将向您介绍如何针对多种屏幕配置优化和实施相应的用户界面。</p>
+
+<p>各教程中都提及了一种来自一个示例应用的代码,该应用展示了关于针对多种分辨率进行优化的最佳实践。您可以在右侧下载该示例,并在自己的应用内重复使用其中的代码。</p>
+
+<p class="note"><strong>请注意</strong>:本教程和相关的示例使用了<a
+href="{@docRoot}tools/extras/support-library.html">支持库</a>,以便在 3.0 版以下的 Android 上使用  <PH>{@link android.app.Fragment}</PH>  API。因此,您需要下载该库并将其添加到您的应用,才能使用本教程中涉及的所有 API。</p>
+ 
+
+<h2>教程</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">支持各种屏幕尺寸</a></b></dt> 
+    <dd>本教程将向您介绍如何设计可适应多种屏幕尺寸的布局(使用灵活的视图尺寸、 <PH>{@link android.widget.RelativeLayout}</PH>、屏幕尺寸和屏幕方向限定符、别名过滤器以及自动拉伸位图)。</dd> 
+ 
+  <dt><b><a href="screendensities.html">支持各种屏幕密度</a></b></dt> 
+    <dd>本教程将向您介绍如何支持具有不同像素密度的屏幕(使用非密度制约像素并提供各种密度的相应位图)。</dd> 
+ 
+  <dt><b><a href="adaptui.html">实施自适应用户界面流程</a></b></dt> 
+    <dd>本教程将向您介绍如何以可适应多种屏幕尺寸/屏幕密度组合的方式实施用户界面流程(运行时对当前布局的检测,根据当前布局做出响应,处理屏幕配置变化)。</dd> 
+</dl> 
diff --git a/docs/html-intl/zh-cn/training/multiscreen/screendensities.jd b/docs/html-intl/zh-cn/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..cdb9b7f
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=支持各种屏幕密度
+parent.title=针对多种屏幕进行设计
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=支持各种屏幕尺寸
+previous.link=screensizes.html
+next.title=实施自适应用户界面流程
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#TaskUseDP">使用非密度制约像素</a></li>
+  <li><a href="#TaskProvideAltBmp">提供备用位图</a></li>
+</ol>
+
+<h2>您还应参阅</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">支持多种屏幕</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">图标设计指南</a></li>
+</ul>
+
+<h2>试试看</h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>本教程将向您介绍如何通过提供不同资源和使用独立于分辨率的测量单位来支持不同屏幕密度。</p>
+
+<h2 id="TaskUseDP">使用非密度制约像素</h2>
+
+<p>在设计布局时,大家经常会误使用绝对像素来定义距离或尺寸,您一定要避免犯这种错误。由于各种屏幕的像素密度都有所不同,因此相同数量的像素在不同设备上的实际大小也有所差异,这样使用像素定义布局尺寸就会产生问题。因此,请务必使用 <code>dp</code> 或 <code>sp</code> 单位指定尺寸。<code>dp</code> 是一种非密度制约像素,其尺寸与 160 dpi 像素的实际尺寸相同。<code>sp</code> 也是一种基本单位,但它可根据用户的偏好文字大小进行调整(即尺度独立性像素),因此您应将该测量单位用于定义文字大小(请勿用其定义布局尺寸)。</p>
+
+<p>例如,请使用 <code>dp</code>(而非 <code>px</code>)指定两个视图间的间距:</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>请务必使用 <code>sp</code> 指定文字大小:</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">提供备用位图</h2>
+
+<p>由于 Android 可在具有各种屏幕密度的设备上运行,因此您提供的位图资源应始终可以满足各类普遍密度范围的要求:低密度、中等密度、高密度以及超高密度。这将有助于您的图形在所有屏幕密度上都能得到出色的质量和效果。</p>
+
+<p>要生成这些图片,您应先提取矢量格式的原始资源,然后根据以下尺寸范围针对各密度生成相应的图片。</p>
+
+<p><ul>
+  <li><code>xhdpi</code>:2.0
+  <li><code>hdpi</code>:1.5
+  <li><code>mdpi</code>:1.0(最低要求)
+  <li><code>ldpi</code>:0.75
+</ul></p>
+
+<p>也就是说,如果您为 <code>xhdpi</code> 设备生成了 200x200 尺寸的图片,就应该使用同一资源为 <code>hdpi</code>、<code>mdpi</code> 和 <code>ldpi</code> 设备分别生成 150x150、100x100 和 75x75 尺寸的图片。</p>
+
+<p>然后,将生成的图片文件放在 <code>res/</code> 下的相应子目录中(如下所示),系统就会根据运行您应用的设备的屏幕密度自动选择合适的图片:</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>这样一来,无论您何时引用 <code>&#64;drawable/awesomeimage</code>,系统都能根据相应屏幕的 dpi 选取合适的位图。</p>
+
+<p>有关为您的应用创建图标资产的更多提示和指南,请参阅<a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">图标设计指南</a>。</p>
+
diff --git a/docs/html-intl/zh-cn/training/multiscreen/screensizes.jd b/docs/html-intl/zh-cn/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..904d097
--- /dev/null
+++ b/docs/html-intl/zh-cn/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=支持各种屏幕尺寸
+parent.title=针对多种屏幕进行设计
+parent.link=index.html
+
+trainingnavtop=true
+next.title=支持各种屏幕密度
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">使用“wrap_content”和“match_parent”</a></li>
+  <li><a href="#TaskUseRelativeLayout">使用相对布局</a></li>
+  <li><a href="#TaskUseSizeQuali">使用尺寸限定符</a></li>
+  <li><a href="#TaskUseSWQuali">使用最小宽度限定符</a></li>
+  <li><a href="#TaskUseAliasFilters">使用布局别名</a></li>
+  <li><a href="#TaskUseOriQuali">使用屏幕方向限定符</a></li>
+  <li><a href="#TaskUse9Patch">使用自动拉伸位图</a></li>
+</ol>
+
+<h2>您还应参阅</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">支持多种屏幕</a></li>
+</ul>
+
+<h2>试试看</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>此教程将向您介绍如何通过以下方法支持各种尺寸的屏幕:</p>
+<ul> 
+  <li>确保系统可以适当地调整您布局的尺寸以便适应屏幕</li> 
+  <li>根据屏幕配置提供合适的用户界面布局</li> 
+  <li>确保正确的布局应用到了正确的屏幕上</li>
+  <li>提供可正确缩放的位图</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">使用“wrap_content”和“match_parent”</h2> 
+
+<p>要确保布局的灵活性并适应各种尺寸的屏幕,您应使用 <code>"wrap_content"</code> 和 <code>"match_parent"</code> 控制某些视图组件的宽度和高度。如果您使用 <code>"wrap_content"</code>,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 <code>"match_parent"</code>(在低于 API 级别 8 的级别中称为 <code>"fill_parent"</code>)则会展开组件以匹配其父视图的尺寸。</p>
+
+<p>如果使用 <code>"wrap_content"</code> 和 <code>"match_parent"</code> 尺寸值而不是硬编码的尺寸,您的视图就会相应地仅使用自身所需的空间或展开以填满可用空间。例如:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>请注意示例中使用 <code>"wrap_content"</code> 和 <code>"match_parent"</code> 控制组件尺寸的方法,而不是关注具体的尺寸。此方法可让布局正确适应各种屏幕尺寸和屏幕方向。</p>
+
+<p>此视图在纵向模式和横向模式下的显示效果如下所示。请注意,组件的尺寸会自动适应屏幕的高度和宽度:</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>图 1</strong>。纵向模式(左)和横向模式(右)下的新闻阅读器示例应用。</p>
+
+
+<h2 id="TaskUseRelativeLayout">使用相对布局</h2> 
+
+<p>您可以使用  <PH>{@link android.widget.LinearLayout}</PH>  的嵌套实例并结合 <code>"wrap_content"</code> 和 <code>"match_parent"</code> 尺寸,以便构建相当复杂的布局。不过,您无法通过  <PH>{@link android.widget.LinearLayout}</PH>  精确控制子视图的特殊关系;系统会将  <PH>{@link android.widget.LinearLayout}</PH>  中的视图直接并排列出。如果您需要将子视图排列出各种效果而不是一条直线,通常更合适的解决方法是使用  <PH>{@link android.widget.RelativeLayout}</PH>,这样您就可以根据各组件之间的特殊关系指定布局了。例如,您可以将某个子视图对齐到屏幕左侧,同时将另一个视图对齐到屏幕右侧。</p>
+
+<p>例如:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>图 2 展示的是此布局在 QVGA 屏幕上的显示效果。</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>图 2</strong>。QVGA 屏幕(小屏幕)上的截图。</p>
+
+<p>图 3 展示的是此布局在较大屏幕上的显示效果。</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>图 3</strong>。WSVGA 屏幕(大屏幕)上的截图。</p>
+
+<p>请注意,虽然组件的尺寸有所变化,但它们的空间关系仍会保留,具体由  <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH> 指定。</p>
+
+ 
+<h2 id="TaskUseSizeQuali">使用尺寸限定符</h2> 
+
+<p>上文所述的灵活布局或相对布局可以为您带来的优势就只有这么多了。虽然这些布局可以拉伸组件内外的空间以适应各种屏幕,但它们不一定能为每种屏幕都提供最佳的用户体验。因此,您的应用不仅应实施灵活布局,还应针对各种屏幕配置提供一些备用布局。要做到这一点,您可以使用<a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">配置限定符</a>,这样就可以在运行时根据当前的设备配置自动选择合适的资源了(例如根据各种屏幕尺寸选择不同的布局)。</p>
+
+<p>例如,很多应用会在较大的屏幕上实施“双面板”模式(相关应用可能会在一个面板上显示项目列表,并在另一面板上显示对应内容)。平板电脑和电视的屏幕已经大到可以同时容纳这两个面板了,但手机屏幕就需要分别显示。因此,您可以使用以下文件以便实施这些布局:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>,单面板(默认)布局:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>,双面板布局:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>请注意第二种布局名称目录中的 <code>large</code> 限定符。系统会在属于较大屏幕(例如 7 英寸或更大的平板电脑)的设备上选择此布局。系统会在较小的屏幕上选择其他布局(无限定符)。</p>
+
+
+<h2 id="TaskUseSWQuali">使用最小宽度限定符</h2>
+
+<p>在版本低于 3.2 的 Android 设备上,开发人员遇到的问题之一是“较大”屏幕的尺寸范围,该问题会影响戴尔 Streak、早期的 Galaxy Tab 以及大部分 7 英寸平板电脑。即使这些设备的屏幕属于“较大”的尺寸,但很多应用可能会针对此类别中的各种设备(例如 5 英寸和 7 英寸的设备)显示不同的布局。这就是 Android 3.2 版在引入其他限定符的同时引入“最小宽度”限定符的原因。</p>
+
+<p>最小宽度限定符可让您通过指定某个最小宽度(以 dp 为单位)来定位屏幕。例如,标准 7 英寸平板电脑的最小宽度为 600 dp,因此如果您要在此类屏幕上的用户界面中使用双面板(但在较小的屏幕上只显示列表),您可以使用上文中所述的单面板和双面板这两种布局,但您应使用 <code>sw600dp</code> 指明双面板布局仅适用于最小宽度为 600 dp 的屏幕,而不是使用 <code>large</code> 尺寸限定符:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>,单面板(默认)布局:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>,双面板布局:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>也就是说,对于最小宽度大于等于 600 dp 的设备,系统会选择 <code>layout-sw600dp/main.xml</code>(双面板)布局,否则系统就会选择 <code>layout/main.xml</code>(单面板)布局。</p>
+
+<p>但 Android 版本低于 3.2 的设备不支持此技术,原因是这些设备无法将 <code>sw600dp</code> 识别为尺寸限定符,因此您仍需使用 <code>large</code> 限定符。这样一来,就会有一个名称为 <code>res/layout-large/main.xml</code> 的文件(与 <code>res/layout-sw600dp/main.xml</code> 一样)。您将在下一教程中了解到避免此类布局文件出现重复的技术。</p>
+
+
+<h2 id="TaskUseAliasFilters">使用布局别名</h2> 
+
+<p>最小宽度限定符仅适用于 Android 3.2 及更高版本。因此,您仍需使用与较低版本兼容的概括尺寸范围(小、正常、大和特大)。例如,如果您要将用户界面设计成在手机上显示单面板,但在 7 英寸平板电脑、电视和其他较大的设备上显示多面板,请提供以下文件:</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> 单面板布局</li>
+<li><code>res/layout-large:</code> 多面板布局</li>
+<li><code>res/layout-sw600dp:</code> 多面板布局</li>
+</ul></p>
+
+<p>后两个文件是相同的,因为其中一个用于和 Android 3.2 设备匹配,而另一个则是为使用较低版本 Android 的平板电脑和电视准备的。</p>
+
+<p>要避免平板电脑和电视的文件出现重复(以及由此带来的维护问题),您可以使用别名文件。例如,您可以定义以下布局:</p>
+
+<ul>
+<li><code>res/layout/main.xml</code>,单面板布局</li>
+<li><code>res/layout/main_twopanes.xml</code>,双面板布局</li>
+</ul>
+
+<p>然后添加这两个文件:</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>后两个文件的内容相同,但它们并未实际定义布局。它们只是将  <PH>{@code main}</PH> 设置成了  <PH>{@code main_twopanes}</PH> 的别名。由于这些文件包含 <code>large</code> 和 <code>sw600dp</code> 选择器,因此无论 Android 版本如何,系统都会将这些文件应用到平板电脑和电视上(版本低于 3.2 的平板电脑和电视会匹配 
+<PH>{@code large}</PH>,版本低于 3.2 的平板电脑和电视则会匹配 <code>sw600dp</code>)。</p>
+
+
+<h2 id="TaskUseOriQuali">使用屏幕方向限定符</h2> 
+
+<p>某些布局会同时支持横向模式和纵向模式,但您可以通过调整优化其中大部分布局的效果。在新闻阅读器示例应用中,每种屏幕尺寸和屏幕方向下的布局行为方式如下所示:</p>
+
+<p><ul>
+<li><b>小屏幕,纵向</b>:单面板,带徽标</li>
+<li><b>小屏幕,横向</b>:单面板,带徽标</li>
+<li><b>7 英寸平板电脑,纵向</b>:单面板,带操作栏</li>
+<li><b>7 英寸平板电脑,横向</b>:双面板,宽,带操作栏</li>
+<li><b>10 英寸平板电脑,纵向</b>:双面板,窄,带操作栏</li>
+<li><b>10 英寸平板电脑,横向</b>:双面板,宽,带操作栏</li>
+<li><b>电视,横向</b>:双面板,宽,带操作栏</li>
+</ul></p>
+
+<p>因此,这些布局中的每一种都定义在了 <code>res/layout/</code> 目录下的某个 XML 文件中。为了继续将每个布局分配给各种屏幕配置,该应用会使用布局别名将两者相匹配:</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>既然您已定义了所有可能的布局,那就只需使用配置限定符将正确的布局映射到各种配置即可。您现在只需使用布局别名技术即可做到这一点:</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">使用自动拉伸位图</h2>
+
+<p>支持各种屏幕尺寸通常意味着您的图片资源还必须能适应各种尺寸。例如,无论要应用到什么形状的按钮上,按钮背景都必须能适应。</p>
+
+<p>如果在可以更改尺寸的组件上使用了简单的图片,您很快就会发现显示效果多少有些不太理想,因为系统会在运行时平均地拉伸或收缩您的图片。解决方法为使用自动拉伸位图,这是一种格式特殊的 PNG 文件,其中会指明可以拉伸以及不可以拉伸的区域。</p>
+
+<p>因此,如果设计的是用于尺寸可变的组件上的位图,请务必使用自动拉伸技术。要将某个位图转换成自动拉伸位图,您可以先准备好普通图片(图 4,放大了 4 倍以便清楚显示)。</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>图 4</strong>。<code>button.png</code></p>
+
+<p>然后通过 SDK 的  <ode
+href="{@docRoot}tools/help/draw9patch.html"><code>draw9patch</code></a> 实用工具(位于 <code>tools/</code> 目录中)运行该图片,您可以在该工具中绘制像素以标出要拉伸的区域以及左侧和顶部的边界。您还可以沿右侧和底部边界绘制像素以标出用于放置内容的区域,具体如图 5 所示。</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>图 5</strong>。<code>button.9.png</code></p>
+
+<p>请注意沿边界显示的黑色像素。顶部和左侧边界上的像素用于指定可以拉伸的图片区域,右侧和底部边界上的像素则用于指定放置内容的区域。</p>
+
+<p>另请注意 <code>.9.png</code> 的扩展名。您必须使用此扩展名,因为系统框架需要通过此扩展名确定相关图片是自动拉伸位图,而不是普通 PNG 图片。</p>
+
+<p>如果您将此背景应用到某个组件(通过设置 <code>android:background="&#64;drawable/button"</code>),系统框架就会正确拉伸图片以适应按钮的尺寸,具体如图 6 中的各种尺寸所示。</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>图 6</strong>。在各种尺寸下使用 <code>button.9.png</code> 自动拉伸位图的按钮。</p>
+
diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml
new file mode 100644
index 0000000..2ca77dd
--- /dev/null
+++ b/docs/html/_redirects.yaml
@@ -0,0 +1,328 @@
+# Redirects file.
+# This file contains the list of rewrite rules that are applied when serving
+# pages. Add "pattern: True" to use python regex in to or from.
+#
+#   WATCH OUT -- FROM LINE HAS TO START WITH A HYPHEN
+
+redirects:
+- from: ^/sdk/android-(.*$)
+  to: /about/versions/android-\1
+  pattern: True
+
+- from: /sdk/adding-components.html
+  to: /sdk/exploring.html
+
+- from: /sdk/compatibility-library.html
+  to: /tools/extras/support-library.html
+
+- from: /sdk/eclipse-adt.html
+  to: /tools/sdk/eclipse-adt.html
+
+- from: /sdk/installing.html
+  to: /sdk/installing/index.html
+
+- from: /sdk/installing/next.html
+  to: /training/basics/firstapp/index.html
+
+- from: /sdk/ndk/...
+  to: /tools/sdk/ndk/...
+
+- from: /sdk/oem-usb.html
+  to: /tools/extras/oem-usb.html
+
+- from: /sdk/tools-notes.html
+  to: /tools/sdk/tools-notes.html
+
+- from: /sdk/requirements.html
+  to: /sdk/index.html
+
+# ------------------- GUIDE -------------------
+
+- from: /guide/market/...
+  to: /google/play/...
+
+- from: /guide/google/gcm/client-javadoc/...
+  to: /reference/com/google/android/gcm/package-summary.html
+
+- from: /guide/google/gcm/server-javadoc/...
+  to: /reference/com/google/android/gcm/server/package-summary.html
+
+- from: /guide/google/play/services.html
+  to: /google/play-services/index.html
+
+- from: /guide/google/...
+  to: /google/...
+
+- from: /guide/publishing/licensing.html
+  to: /google/play/licensing/index.html
+
+- from: /google/play/billing/billing_about.html
+  to: /google/play/billing/index.html
+
+- from: /guide/developing/tools/...
+  to: /tools/help/...
+
+- from: /guide/developing/...
+  to: /tools/...
+
+- from: /tools/aidl.html
+  to: /guide/components/aidl.html
+
+- from: /guide/publishing/publishing.html
+  to: /distribute/googleplay/publish/preparing.html
+
+- from: /guide/publishing/...
+  to: /tools/publishing/...
+
+- from: /guide/topics/fundamentals.html
+  to: /guide/components/fundamentals.html
+
+- from: /guide/topics/intents/intents-filters.html
+  to: /guide/components/intents-filters.html
+
+- from: /guide/topics/fundamentals/...
+  to: /guide/components/...
+
+- from: /guide/topics/clipboard/copy-paste.html
+  to: /guide/topics/text/copy-paste.html
+
+- from: /guide/topics/ui/notifiers/index.html
+  to: /guide/topics/ui/notifiers/notifications.html
+
+- from: /guide/topics/wireless/...
+  to: /guide/topics/connectivity/...
+
+- from: /guide/topics/drawing/...
+  to: /guide/topics/graphics/opengl.html
+
+- from: /guide/topics/connectivity/usb/adk.html
+  to: /tools/adk/index.html
+
+- from: /tools/adk/aoa.html
+  to: http://source.android.com/tech/accessories/aoap/aoa.html
+
+- from: /tools/adk/aoa2.html
+  to: http://source.android.com/tech/accessories/aoap/aoa2.html
+
+- from: /guide/topics/usb/...
+  to: /guide/topics/connectivity/usb/...
+
+- from: /guide/appendix/api-levels.html
+  to: /guide/topics/manifest/uses-sdk-element.html#ApiLevels
+
+- from: /guide/appendix/install-location.html
+  to: /guide/topics/data/install-location.html
+
+- from: /guide/basics/what-is-android.html
+  to: /about/index.html
+
+- from: /guide/topics/security/security.html
+  to: /training/articles/security-tips.html
+#  type: permanent
+#  comment: Move content and then adjust this
+
+- from: /guide/appendix/market-filters.html
+  to: /google/play/filters.html
+
+- from: /guide/topics/testing/...
+  to: /tools/testing/...
+
+- from: /guide/topics/graphics/animation.html
+  to: /guide/topics/graphics/overview.html
+
+- from: /guide/topics/graphics/renderscript.html
+  to: /guide/topics/renderscript/index.html
+
+- from: /guide/topics/graphics/renderscript/
+  to: /guide/topics/renderscript/index.html
+
+- from: /guide/topics/location/obtaining-user-location.html
+  to: /guide/topics/location/strategies.html
+
+- from: /guide/topics/nfc/...
+  to: /guide/topics/connectivity/nfc/...
+
+- from: /guide/topics/wireless/...
+  to: /guide/topics/connectivity/...
+
+- from: /guide/topics/network/...
+  to: /guide/topics/connectivity/...
+
+- from: /resources/articles/creating-input-method.html
+  to: /guide/topics/text/creating-input-method.html
+
+- from: /resources/articles/spell-checker-framework.html
+  to: /guide/topics/text/spell-checker-framework.html
+
+- from: /resources/tutorials/notepad/...
+  to: /training/notepad/...
+
+- from: /resources/faq/...
+  to: /guide/faq/...
+
+- from: /resources/tutorials/hello-world.html
+  to: /training/basics/firstapp/index.html
+
+# add the rest of the tutorials here
+
+- from: /guide/practices/design/...
+  to: /guide/practices/...
+
+- from: /guide/practices/accessibility.html
+  to: /guide/topics/ui/accessibility/index.html
+
+# move best practices to training
+
+- from: /guide/practices/app-design/performance.html
+  to: /training/articles/perf-tips.html
+
+- from: /guide/practices/performance.html
+  to: /training/articles/perf-tips.html
+
+- from: /guide/practices/app-design/responsiveness.html
+  to: /training/articles/perf-anr.html
+
+- from: /guide/practices/responsiveness.html
+  to: /training/articles/perf-anr.html
+
+- from: /guide/practices/security.html
+  to: /training/articles/security-tips.html
+
+- from: /guide/practices/jni.html
+  to: /training/articles/perf-jni.html
+
+- from: /guide/tutorials/...
+  to: /resources/tutorials/...
+
+# ------------------- RESOURCES -------------------
+
+- from: /resources/dashboard/...
+  to: /about/dashboards/index.html
+
+- from: /resources/community-groups.html
+  to: /support.html
+
+- from: /resources/tutorials/views/hello-linearlayout.html
+  to: /guide/topics/ui/layout/linear.html
+
+- from: /resources/tutorials/views/hello-relativelayout.html
+  to: /guide/topics/ui/layout/relative.html
+
+- from: /resources/tutorials/views/hello-listview.html
+  to: /guide/topics/ui/layout/listview.html
+
+- from: /resources/tutorials/views/hello-gridview.html
+  to: /guide/topics/ui/layout/gridview.html
+
+- from: /resources/tutorials/views/hello-webview.html
+  to: /guide/webapps/webview.html
+
+- from: /resources/tutorials/views/hello-formstuff.html
+  to: /guide/topics/ui/controls.html
+
+- from: /resources/tutorials/views/hello-datepicker.html
+  to: /guide/topics/ui/controls/pickers.html
+
+- from: /resources/tutorials/views/hello-timepicker.html
+  to: /guide/topics/ui/controls/pickers.html
+
+- from: /resources/tutorials/views/hello-autocomplete.html
+  to: /guide/topics/ui/controls/text.html
+
+- from: /resources/tutorials/views/hello-spinner.html
+  to: /guide/topics/ui/controls/spinner.html
+
+- from: /resources/tutorials/opengl/opengl-es10.html
+  to: /training/graphics/opengl/index.html
+
+- from: /resources/tutorials/opengl/opengl-es20.html
+  to: /training/graphics/opengl/index.html
+
+- from: /resources/tutorials/views/hello-mapview.html
+  to: https://developers.google.com/maps/documentation/android/hello-mapview
+
+- from: /resources/tutorials/views/...
+  to: /guide/topics/ui/declaring-layout.html#CommonLayouts
+
+- from: /guide/topics/ui/layout-objects.html
+  to: /guide/topics/ui/declaring-layout.html#CommonLayouts
+
+- from: /resources/tutorials/localization/...
+  to: /training/basics/supporting-devices/languages.html
+
+- from: /resources/samples/...
+  to: /tools/samples/index.html
+
+- from: /guide/
+  to: /guide/components/index.html
+  # comment: this redirects guide/ and guide/index.html only
+
+# ------------------- TRAINING -------------------
+
+- from: /training/cloudsync/aesync.html
+  to: /google/gcm/index.html
+
+# -------------------- MISC ----------------------
+
+- from: /shareables/...
+  to: http://commondatastorage.googleapis.com/androiddevelopers/shareables/...
+
+- from: /downloads/...
+  to: http://commondatastorage.googleapis.com/androiddevelopers/...
+
+- from: /search.html
+  to: /index.html
+
+- from: /videos/index.html
+  to: /develop/index.html
+
+- from: /live/index.html
+  to: https://developers.google.com/live/
+
+# ---------- PLATFORM VERSIONS ----------------
+
+- from: /4.2
+  to: /about/versions/android-4.2.html
+
+- from: /4.1
+  to: /about/versions/android-4.1.html
+
+- from: /4.0
+  to: /about/versions/android-4.0.html
+
+- from: /(j|jb|jellybean)/?$
+  to: /about/versions/jelly-bean.html
+  pattern: True
+
+- from: /(i|ics|icecreamsandwich)/?$
+  to: /about/versions/android-4.0-highlights.html
+  pattern: True
+
+- from: /(h|hc|honeycomb)/?$
+  to: /about/versions/android-3.0-highlights.html
+  pattern: True
+
+- from: /(g|gb|gingerbread)/?$
+  to: /about/versions/android-2.3-highlights.html
+  pattern: True
+
+# ---------- MISC -----------------
+
+- from: /\+/?$
+  to: https://plus.google.com/108967384991768947849/posts
+  pattern: True
+
+- from: /blog
+  to: http://android-developers.blogspot.com
+
+- from: /stats
+  to: /about/dashboards/index.html
+
+- from: /youtube
+  to: http://www.youtube.com/user/androiddevelopers
+
+- from: /playbadge
+  to: http://developer.android.com/distribute/googleplay/promote/badges.html
+
+- from: /deviceart
+  to: http://developer.android.com/distribute/promote/device-art.html
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index aa0e010..4100b8d 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -31,32 +31,32 @@
   <th>Distribution</th>
 </tr>
 <tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td>    <td>4</td><td>0.2%</td></tr>
-<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td>   <td>7</td><td>2.4%</td></tr>
-<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td>    <td>8</td><td>9.0%</td></tr>
+<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td>   <td>7</td><td>2.2%</td></tr>
+<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td>    <td>8</td><td>8.1%</td></tr>
 <tr><td><a href="/about/versions/android-2.3.html">2.3 - 2.3.2</a>
                                    </td><td rowspan="2">Gingerbread</td>    <td>9</td><td>0.2%</td></tr>
 <tr><td><a href="/about/versions/android-2.3.3.html">2.3.3 - 2.3.7
-        </a></td><!-- Gingerbread -->                                       <td>10</td><td>47.4%</td></tr>
+        </a></td><!-- Gingerbread -->                                       <td>10</td><td>45.4%</td></tr>
 <tr><td><a href="/about/versions/android-3.1.html">3.1</a></td>
-                                                   <td rowspan="2">Honeycomb</td>      <td>12</td><td>0.4%</td></tr>
-<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td>      <!-- Honeycomb --><td>13</td><td>1.1%</td></tr>
+                                                   <td rowspan="2">Honeycomb</td>      <td>12</td><td>0.3%</td></tr>
+<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td>      <!-- Honeycomb --><td>13</td><td>1.0%</td></tr>
 <tr><td><a href="/about/versions/android-4.0.3.html">4.0.3 - 4.0.4</a></td>
-                                                            <td>Ice Cream Sandwich</td><td>15</td><td>29.1%</td></tr> 
+                                                            <td>Ice Cream Sandwich</td><td>15</td><td>29.0%</td></tr> 
 <tr><td><a href="/about/versions/android-4.1.html">4.1</a></td>
-                                                   <td rowspan="2">Jelly Bean</td><td>16</td><td>9.0%</td></tr>
-<tr><td><a href="/about/versions/android-4.2.html">4.2</a></td><!--Jelly Bean-->  <td>17</td><td>1.2%</td></tr>  
+                                                   <td rowspan="2">Jelly Bean</td><td>16</td><td>12.2%</td></tr>
+<tr><td><a href="/about/versions/android-4.2.html">4.2</a></td><!--Jelly Bean-->  <td>17</td><td>1.4%</td></tr>  
 </table>
 
 </div>
 
 <div class="col-8" style="margin-right:0">
 <img alt=""
-src="http://chart.apis.google.com/chart?&cht=p&chs=460x245&chf=bg,s,00000000&chd=t:2.6,9.0,47.6,1.5,29.1,10.2&chl=Eclair%20%26%20older|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=c4df9b,6fad0c"
+src="//chart.apis.google.com/chart?&cht=p&chs=460x245&chf=bg,s,00000000&chd=t:2.4,8.1,45.4,0.3,29,13.6&chl=Eclair%20%26%20older|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=c4df9b,6fad0c"
 />
 
 </div><!-- end dashboard-panel -->
 
-<p style="clear:both"><em>Data collected during a 14-day period ending on January 3, 2013</em></p>
+<p style="clear:both"><em>Data collected during a 14-day period ending on February 4, 2013</em></p>
 <!--
 <p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p>
 -->
@@ -81,9 +81,9 @@
 Google Play within a 14-day period ending on the date indicated on the x-axis.</p>
 
 <img alt="" height="250" width="660"
-src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C07/01%7C07/15%7C08/01%7C08/15%7C09/01%7C09/15%7C10/01%7C10/15%7C11/01%7C11/15%7C12/01%7C12/15%7C01/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2013%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:99.2,99.2,99.2,99.2,99.3,99.4,99.5,99.5,99.5,99.6,100.0,100.0,100.0|94.5,94.7,95.0,95.2,95.6,95.8,96.1,96.3,96.4,96.7,96.9,97.2,97.4|77.1,78.3,79.5,80.4,81.4,82.3,83.2,83.8,84.7,85.6,86.4,87.0,88.2|13.0,15.7,18.9,21.2,23.7,25.5,27.4,28.7,31.1,33.0,35.4,36.8,40.3|10.6,13.3,16.6,19.0,21.5,23.5,25.5,26.8,29.4,31.4,33.8,35.2,38.8|0.0,0.0,0.8,0.9,1.1,1.4,1.8,2.1,3.2,4.8,6.5,7.5,9.9&chm=b,c3df9b,0,1,0|tFroyo,689326,1,0,15,,t::-5|b,b4db77,1,2,0|tGingerbread,547a19,2,0,15,,t::-5|b,a5db51,2,3,0|b,96dd28,3,4,0|tIce%20Cream%20Sandwich,293f07,4,0,15,,t::-5|b,83c916,4,5,0|B,6fad0c,5,6,0&chg=7,25&chdl=Eclair|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=add274,9dd14f,8ece2a,7ab61c,659b11,507d08"
+src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C08/01%7C08/15%7C09/01%7C09/15%7C10/01%7C10/15%7C11/01%7C11/15%7C12/01%7C12/15%7C01/01%7C01/15%7C02/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2013%7C%7C2013%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:99.2,99.2,99.3,99.4,99.5,99.5,99.5,99.6,100.0,100.0,100.0,100.0,100.0|95.0,95.2,95.6,95.8,96.1,96.3,96.4,96.7,96.9,97.2,97.4,97.4,97.6|79.5,80.4,81.4,82.3,83.2,83.8,84.7,85.6,86.4,87.0,88.2,88.8,89.4|18.9,21.2,23.7,25.5,27.4,28.7,31.1,33.0,35.4,36.8,40.3,42.0,43.6|16.6,19.0,21.5,23.5,25.5,26.8,29.4,31.4,33.8,35.2,38.8,40.7,42.3|0.8,0.9,1.1,1.4,1.8,2.1,3.2,4.8,6.5,7.5,9.9,11.7,13.3&chm=b,c3df9b,0,1,0|tFroyo,689326,1,0,15,,t::-5|b,b4db77,1,2,0|tGingerbread,547a19,2,0,15,,t::-5|b,a5db51,2,3,0|b,96dd28,3,4,0|tIce%20Cream%20Sandwich,293f07,4,0,15,,t::-5|b,83c916,4,5,0|tJelly%20Bean,131d02,5,11,15,,t::-5|B,6fad0c,5,6,0&chg=7,25&chdl=Eclair|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=add274,9dd14f,8ece2a,7ab61c,659b11,507d08"
 />
-<p><em>Last historical dataset collected during a 14-day period ending on January 1, 2013</em></p>
+<p><em>Last historical dataset collected during a 14-day period ending on February 1, 2013</em></p>
 
 
 
@@ -112,11 +112,11 @@
 
 
 <img alt="" style="float:right;"
-src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=Xlarge%7CLarge%7CNormal%7CSmall&chd=t%3A4.6,6.1,86.6,2.7" />
+src="//chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=Xlarge%7CLarge%7CNormal%7CSmall&chd=t%3A4.6,6.1,86.6,2.7" />
 
 
 <img alt="" style="float:right;clear:right"
-src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=ldpi%7Cmdpi%7Chdpi%7Cxhdpi&chd=t%3A2.2,18,51.1,28.7" />
+src="//chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=ldpi%7Cmdpi%7Chdpi%7Cxhdpi&chd=t%3A2.2,18,51.1,28.7" />
 
 
 <p>This section provides data about the relative number of active devices that have a particular
@@ -194,7 +194,7 @@
 
 
 <img alt="" style="float:right"
-src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1%20only|GL%202.0%20%26%201.1&chd=t%3A9.2,90.8&chf=bg,s,00000000" />
+src="//chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1%20only|GL%202.0%20%26%201.1&chd=t%3A9.2,90.8&chf=bg,s,00000000" />
 
 <p>To declare which version of OpenGL ES your application requires, you should use the {@code
 android:glEsVersion} attribute of the <a
diff --git a/docs/html/about/versions/android-1.6-highlights.jd b/docs/html/about/versions/android-1.6-highlights.jd
index edfd7ff..0c56e8e 100644
--- a/docs/html/about/versions/android-1.6-highlights.jd
+++ b/docs/html/about/versions/android-1.6-highlights.jd
@@ -27,7 +27,7 @@
 <object width="278" height="180">
 <param name="movie" value="http://www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&"></param>
 <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
-<embed src="http://www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&" type="application/x-shockwave-flash" 
+<embed src="//www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&" type="application/x-shockwave-flash" 
 allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
 </object>
 </div>
diff --git a/docs/html/about/versions/android-2.0-highlights.jd b/docs/html/about/versions/android-2.0-highlights.jd
index 58b5fda..bec49a3 100644
--- a/docs/html/about/versions/android-2.0-highlights.jd
+++ b/docs/html/about/versions/android-2.0-highlights.jd
@@ -32,7 +32,7 @@
 <object width="278 height="180">
 <param name="movie" value="http://www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&"></param>
 <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
-<embed src="http://www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&" type="application/x-shockwave-flash" 
+<embed src="//www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&" type="application/x-shockwave-flash" 
 allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
 </object>
 </div>
diff --git a/docs/html/about/versions/android-2.2-highlights.jd b/docs/html/about/versions/android-2.2-highlights.jd
index 190e301..334d036 100644
--- a/docs/html/about/versions/android-2.2-highlights.jd
+++ b/docs/html/about/versions/android-2.2-highlights.jd
@@ -44,7 +44,7 @@
 <param name="movie" value="http://www.youtube.com/v/yAZYSVr2Bhc&hl=en&fs=1&"></param>
 <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess"
 value="always"></param>
-<embed src="http://www.youtube.com/v/yAZYSVr2Bhc&hl=en&fs=1&" type="application/x-shockwave-flash"
+<embed src="//www.youtube.com/v/yAZYSVr2Bhc&hl=en&fs=1&" type="application/x-shockwave-flash"
 allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
 </object>
 </div>
diff --git a/docs/html/about/versions/android-3.0.jd b/docs/html/about/versions/android-3.0.jd
index 68ac03a..d0b41d3 100644
--- a/docs/html/about/versions/android-3.0.jd
+++ b/docs/html/about/versions/android-3.0.jd
@@ -571,7 +571,7 @@
 can accelerate graphics operations and data processing. Renderscript is an ideal way to create
 high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
 <p>For more information, see the <a
-href="{@docRoot}guide/topics/graphics/renderscript.html">3D Rendering and Computation with
+href="{@docRoot}guide/topics/renderscript/index.html">3D Rendering and Computation with
 Renderscript</a> documentation.</p></li>
 </ul>
 
diff --git a/docs/html/design/videos/index.jd b/docs/html/design/videos/index.jd
index 272183f..8ddd4aa 100644
--- a/docs/html/design/videos/index.jd
+++ b/docs/html/design/videos/index.jd
@@ -12,7 +12,7 @@
     <p>You have a great idea for an Android app. You want it to stand out among hundreds of thousands. You want your users to love it and tell everyone they know. The Android User Experience team is here to help. We talk about the Android Design guide and other tricks of the trade for creating apps that delight users and help them accomplish their goals. No design background is required.</p>
   </div>
   <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="http://www.youtube.com/embed/2NL_83EG0no" frameborder="0" allowfullscreen=""></iframe>
+    <iframe width="355" height="200" src="//www.youtube.com/embed/2NL_83EG0no" frameborder="0" allowfullscreen=""></iframe>
   </div>
 </div>
 
@@ -24,7 +24,7 @@
     <p>Design isn't black magic, it's a field that people can learn. In this talk two elite designers from Google give you an advanced crash course in interactive and visual design. Topics include mental models, natural mappings, metaphors, mode errors, visual hierarchies, typography and gestalt principles. Correctly applied, this knowledge can drastically improve the quality of your work.</p>
   </div>
   <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="http://www.youtube.com/embed/iJDoxOTyMdk" frameborder="0" allowfullscreen=""></iframe>
+    <iframe width="355" height="200" src="//www.youtube.com/embed/iJDoxOTyMdk" frameborder="0" allowfullscreen=""></iframe>
   </div>
 </div>
 
@@ -36,7 +36,7 @@
     <p>An app is useless if people can't find their way around it. Android introduced big navigation-support changes in 3.0 and 4.0. The Action Bar offers a convenient control for Up navigation, the Back key's behavior became more consistent within tasks, and the Recent Tasks UI got an overhaul. In this talk, we discuss how and why we got where we are today, how to think about navigation when designing your app's user experience, and how to write apps that offer effortless navigation in multiple Android versions.</p>
   </div>
   <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="http://www.youtube.com/embed/XwGHJJYBs0Q" frameborder="0" allowfullscreen=""></iframe>
+    <iframe width="355" height="200" src="//www.youtube.com/embed/XwGHJJYBs0Q" frameborder="0" allowfullscreen=""></iframe>
   </div>
 </div>
 
@@ -48,7 +48,7 @@
     <p>The Android Design Guide describes how to design beautiful Android apps, but not how to build them. In this talk we give practical tips for how to apply fit &amp; finish as you implement your design, we show you how to avoid some common pitfalls, we describe some useful patterns, and show how tools can help.</p>
   </div>
   <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="http://www.youtube.com/embed/2jCVmfCse1E" frameborder="0" allowfullscreen=""></iframe>
+    <iframe width="355" height="200" src="//www.youtube.com/embed/2jCVmfCse1E" frameborder="0" allowfullscreen=""></iframe>
   </div>
 </div>
 
@@ -60,7 +60,7 @@
     <p>Best-in-class application designers and developers talk about their experience in developing for Android, showing screenshots from their app, exploring the challenges they faced, and offering creative solutions congruent with the Android Design guide. Guests are invited to show examples of visual and interaction patterns in their application that manage to keep it simultaneously consistent and personal.</p>
   </div>
   <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="http://www.youtube.com/embed/8iUbr8RZKtg" frameborder="0" allowfullscreen=""></iframe>
+    <iframe width="355" height="200" src="//www.youtube.com/embed/8iUbr8RZKtg" frameborder="0" allowfullscreen=""></iframe>
   </div>
 </div>
 
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index 57fa498..beb5ac5 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -70,7 +70,7 @@
                    <h2>In-app Subscriptions with Trials</h2>
                    <p>You can now set up a <strong>free trial period</strong> for any Google Play in-app subscription, making it easy for users try your subscriber content before automatically converting to a full subscription. Free trials give you a new way to bring users into your products and engage them effectively. </p>
                    <p><a class="button"
-href="{@docRoot}google/play/billing/billing_subscriptions.html#trials">Read
+href="{@docRoot}google/play/billing/v2/billing_subscriptions.html#trials">Read
 more</a></p>
                    </div>                
                 </li>
diff --git a/docs/html/distribute/googleplay/about/distribution.jd b/docs/html/distribute/googleplay/about/distribution.jd
index 982bb1f..e09e300 100644
--- a/docs/html/distribute/googleplay/about/distribution.jd
+++ b/docs/html/distribute/googleplay/about/distribution.jd
@@ -8,13 +8,13 @@
 <h2 id="instant">Instant publishing, instant updates</h2>
 
 <p>On Google Play, you can publish your products to customers instantly. Just
-upload and configure your product in the <span style="font-weight:500;">Google Play Android Developer Console</span>
+upload and configure your product in the <span style="font-weight:500;">Google Play Developer Console</span>
 and press the Publish button&mdash;your app appears in the store listings within
 hours, not weeks.</p>
 
 <p>Once your app is published, you can update it as often as you want. You can
 change prices, configuration, and distribution options at any time through the
-Google Play Android Developer Console, without needing to update your app
+Google Play Developer Console, without needing to update your app
 binary.</p>
 
 <p>Later, as you add features or address code issues, you can publish an updated
@@ -37,7 +37,7 @@
 
 <h3 id="geotargeting">Geographic targeting</h3>
 
-<p>You can use controls in the Google Play Android Developer Console to easily
+<p>You can use controls in the Google Play Developer Console to easily
 manage the geographic distribution of your apps, without any changes in your
 application binary. You can specify which countries and territories you want to
 distribute to, and even which carriers (for some countries). </p>
@@ -45,7 +45,7 @@
 <p>When users visit the store, Google Play makes sure that they are in one of
 your targeted countries before downloading your app. You can change your country
 and carrier targeting at any time just by saving changes in the Google Play
-Android Developer Console.</p>
+Developer Console.</p>
 
 <p>To help you market to users around the world, you
 can <a href="{@docRoot}distribute/googleplay/publish/preparing.html#localize">localize
@@ -72,13 +72,13 @@
 
 <p>For pinpoint control over distribution, Google Play lets you see all of the
 devices your app is available to based on its dependencies (if any). From the
-Google Play Android Developer Console, you can list the supported devices and
+Google Play Developer Console, you can list the supported devices and
 even exclude specific devices if needed.</p>
 
 <h2 id="stats">Statistics for analyzing installs</h2>
 
 <p>Once you’ve published your app, Google Play makes it easy to see how it’s
-doing. The Google Play Android Developer Console gives you access to a variety
+doing. The Google Play Developer Console gives you access to a variety
 of anonymized metrics that show your app’s installation performance measured by
 unique users and unique devices, across a variety of different dimensions such
 as country, Android version, device, country, carrier, and app version.</p>
diff --git a/docs/html/distribute/googleplay/about/monetizing.jd b/docs/html/distribute/googleplay/about/monetizing.jd
index cabd56b..8bafd53 100644
--- a/docs/html/distribute/googleplay/about/monetizing.jd
+++ b/docs/html/distribute/googleplay/about/monetizing.jd
@@ -133,7 +133,7 @@
 manage shifts in exchange rates.</p>
 
 <p>You can set and manage prices for your apps and in-app products from the
-Google Play Android Developer Console.</p>
+Google Play Developer Console.</p>
 
 <h2 id="payouts">Monthly payouts in your local currency</h2>
 
diff --git a/docs/html/distribute/googleplay/promote/badges.jd b/docs/html/distribute/googleplay/promote/badges.jd
index 081c8f7..23a116d 100644
--- a/docs/html/distribute/googleplay/promote/badges.jd
+++ b/docs/html/distribute/googleplay/promote/badges.jd
@@ -1,8 +1,8 @@
 page.title=Google Play Badges
 @jd:body
 
-<p>Google Play badges allow you to promote your app with official branding in your
-online ads, promotional materials, or anywhere else you want a link to your app.</p>
+<p itemprop="description">Google Play badges allow you to promote your app with official branding
+in your online ads, promotional materials, or anywhere else you want a link to your app.</p>
 
 <p>In the form below,
 input your app's package name or publisher name, choose the badge style,
diff --git a/docs/html/distribute/googleplay/promote/linking.jd b/docs/html/distribute/googleplay/promote/linking.jd
index 46607f5..4fdc5db 100644
--- a/docs/html/distribute/googleplay/promote/linking.jd
+++ b/docs/html/distribute/googleplay/promote/linking.jd
@@ -51,7 +51,7 @@
 
 <p>Here's an example:</p>
 
-<p style="margin-left:1em;"><code><a href="http://play.google.com/store/apps/details?id=com.google.android.apps">http://play.google.com/store/apps/details?id=com.google.android.apps</a></code></p>
+<p style="margin-left:1em;"><code><a href="http://play.google.com/store/apps/details?id=com.google.android.apps.maps">http://play.google.com/store/apps/details?id=com.google.android.apps.maps</a></code></p>
 
 <p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
 
diff --git a/docs/html/distribute/googleplay/publish/preparing.jd b/docs/html/distribute/googleplay/publish/preparing.jd
index 097f163..e93b211 100644
--- a/docs/html/distribute/googleplay/publish/preparing.jd
+++ b/docs/html/distribute/googleplay/publish/preparing.jd
@@ -439,7 +439,7 @@
 <ul style="margin-top:-.5em;">
 <li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1078870">Graphic Assets for your Application
 </a></strong> &mdash; Details about the graphic assets you need to upload before publishing.</li>
-<li><strong><a href="http://android-developers.blogspot.com/b/post-preview?token=hbE_njsBAAA.dLFzPbe-VFYCS6R3xP16HQ.Z4XO2iUmCqyYpoFPQ4OhiQ&postId=687446965502713273&type=POST">Google Play Featured Image Guidelines
+<li><strong><a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">Google Play Featured Image Guidelines
 </a></strong> &mdash; Blog post that highlights key design considerations for your app's featured image.</li>
 </ul>
 </td>
diff --git a/docs/html/distribute/googleplay/publish/register.jd b/docs/html/distribute/googleplay/publish/register.jd
index 7ca6696..335d335 100644
--- a/docs/html/distribute/googleplay/publish/register.jd
+++ b/docs/html/distribute/googleplay/publish/register.jd
@@ -13,7 +13,7 @@
 
 <h2>Get Started</h2>
 <ol>
-  <li><a href="https://play.google.com/apps/publish/">Google Play Android Developer Console</a></li>
+  <li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li>
 </ol>
 
 </div>
@@ -24,13 +24,13 @@
 <ul>
 <li>Register for a Google Play publisher account</li>
 <li>If you will sell apps, set up a Google Checkout Merchant Account</li>
-<li>Explore the Google Play Android Developer Console and learn about the tools for publishing</li>
+<li>Explore the Google Play Developer Console and learn about the tools for publishing</li>
 </ul>
 
 
 <h3>Register for a publisher account</h3>
 
-<p>The first step is to visit the Google Play Android Developer Console and register for a publisher account.</p>
+<p>The first step is to visit the Google Play Developer Console and register for a publisher account.</p>
 
 <p>Here's what you will do during registration: </p>
 
@@ -46,7 +46,7 @@
 
 
 <ol>
-<li>Visit the Google Play Android Developer Console at <a href="https://play.google.com/apps/publish/">https://play.google.com/apps/publish/</a>.
+<li>Visit the Google Play Developer Console at <a href="https://play.google.com/apps/publish/">https://play.google.com/apps/publish/</a>.
 <li>Enter basic information about your <strong>developer identity</strong> &mdash; developer name, email address, and so on. You can modify this information later.</li>
 <li>Read and accept the <strong>Developer Distribution Agreement</strong> that applies to your country or region. Note that apps and store listings that you publish on Google Play must comply with the Developer Program Policies and US export law,</li>
 <li>Pay a <strong>$25 USD registration fee</strong> using Google Checkout. If you don't have a Google Checkout account, you can quickly set one up during the process.</li>
@@ -61,7 +61,7 @@
 <p>To set up a Merchant account from the Developer Console:</p>
 
 <ol>
-<li><strong>Sign in</strong> to your Google Play Android Developer Console at <a href="https://play.google.com/apps/publish/">https://play.google.com/apps/publish/</a>
+<li><strong>Sign in</strong> to your Google Play Developer Console at <a href="https://play.google.com/apps/publish/">https://play.google.com/apps/publish/</a>
 <li>Click on the "<strong>Edit profile</strong>" link.
 <li>Select "<strong>Setup a Merchant Account at Google Checkout</strong>".</li>
 </ol>
@@ -69,4 +69,4 @@
 <p>This will take you to the Google Checkout site to sign up as a Merchant; you'll need to have information about your business handy to complete this step.</p>
 
 <h3>Explore the Developer Console</h3>
-<p>When your registration is verified, you can sign in to your Android Developer Console, which will be the home for your app publishing operations and tools on Google Play. </p>
+<p>When your registration is verified, you can sign in to your Developer Console, which will be the home for your app publishing operations and tools on Google Play. </p>
diff --git a/docs/html/distribute/googleplay/quality/tablet.jd b/docs/html/distribute/googleplay/quality/tablet.jd
index cc7ba3f..24a30f1 100644
--- a/docs/html/distribute/googleplay/quality/tablet.jd
+++ b/docs/html/distribute/googleplay/quality/tablet.jd
@@ -507,7 +507,7 @@
 <td><p>Related resources:</p>
 <ul style="margin-top:-.5em;">
 <li><strong><a href="https://play.google.com/apps/publish/">Publishing Checklist</a></strong> &mdash; Recommendations on how to prepare your app for publishing, test it, and launch successfully on Google Play.</li>
-<li><strong><a href="https://play.google.com/apps/publish/">Google Play Android Developer Console</a></strong> &mdash; The tools console for publishing your app to Android users.</li>
+<li><strong><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></strong> &mdash; The tools console for publishing your app to Android users.</li>
 </ul>
 </td>
 </tr>
diff --git a/docs/html/distribute/googleplay/spotlight/tablets.jd b/docs/html/distribute/googleplay/spotlight/tablets.jd
index ee256bc..7e1ca43 100644
--- a/docs/html/distribute/googleplay/spotlight/tablets.jd
+++ b/docs/html/distribute/googleplay/spotlight/tablets.jd
@@ -55,7 +55,7 @@
     <div style="padding:.5em 0 0 1em;">
 <a href="http://play.google.com/store/apps/details?id=com.mint">
   <img alt="Android app on Google Play"
-       src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+       src="//developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
 </a>
       
     </div>
@@ -145,7 +145,7 @@
     <div style="padding:.5em 0 0 1em;">
 <a href="http://play.google.com/store/apps/details?id=com.tinyco.village">
   <img alt="Android app on Google Play"
-       src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+       src="//developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
 </a>
       
     </div>
@@ -235,7 +235,7 @@
     <div style="padding:.5em 0 0 1em;">
 <a href="http://play.google.com/store/apps/details?id=com.instapaper.android">
   <img alt="Android app on Google Play"
-       src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+       src="//developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
 </a>
       
     </div>
diff --git a/docs/html/google/gcm/c2dm.jd b/docs/html/google/gcm/c2dm.jd
index e8a7edb..5c4a86e 100644
--- a/docs/html/google/gcm/c2dm.jd
+++ b/docs/html/google/gcm/c2dm.jd
@@ -43,7 +43,7 @@
 <ul>
   <li> Ease of use. No sign-up forms.</li>
   <li>No quotas.</li>
-  <li>GCM and C2DM stats are available through the <a href="http://play.google.com/apps/publish">Android Developer Console</a>.</li>
+  <li>GCM and C2DM stats are available through the <a href="http://play.google.com/apps/publish">Developer Console</a>.</li>
   <li>Battery efficiency.</li>
   <li>Rich set of new APIs.</li>
 </ul>
diff --git a/docs/html/google/gcm/gcm.jd b/docs/html/google/gcm/gcm.jd
index 6e15ef7..09ce95e 100644
--- a/docs/html/google/gcm/gcm.jd
+++ b/docs/html/google/gcm/gcm.jd
@@ -1026,7 +1026,7 @@
 
 <p>To view  statistics and any error messages for your GCM applications:</p>
 <ol>
-  <li> Go to the <code><a href="http://play.google.com/apps/publish">Android Developer Console</a></code>.</li>
+  <li> Go to the <code><a href="http://play.google.com/apps/publish">Developer Console</a></code>.</li>
   <li>Login with your developer account. 
   <p>You will see a page that has a list of all of your apps.</p></li>
   <li> Click on the &quot;statistics&quot; link next to the app for which you want to view GCM stats. 
@@ -1034,7 +1034,7 @@
   <li>Go to the drop-down menu and select the GCM metric you want to view. 
   </li>
 </ol>
-<p class="note"><strong>Note:</strong> Stats on the Google API Console are not enabled for GCM. You must use the <a href="http://play.google.com/apps/publish">Android Developer Console</a>.</p>
+<p class="note"><strong>Note:</strong> Stats on the Google API Console are not enabled for GCM. You must use the <a href="http://play.google.com/apps/publish">Developer Console</a>.</p>
 
 <h2 id="example">Examples</h2>
 <p>See the <a href="demo.html">GCM Demo Application</a> document.</p>
diff --git a/docs/html/google/play-services/auth.jd b/docs/html/google/play-services/auth.jd
index 3f46c3f..8e11131 100644
--- a/docs/html/google/play-services/auth.jd
+++ b/docs/html/google/play-services/auth.jd
@@ -57,7 +57,12 @@
 </pre>
 <h2 id="obtain">Obtaining an Access Token</h2>
 <p>
-  With an email address, you can now obtain an access token. There are two general
+  With an email address and the service scope you can now obtain an access token.
+</p>
+<p class="note"><strong>Note:</strong> Specify <code>"oauth2:<em>scope</em>"</code> for a single scope or
+  <code>"oauth2:<em>scope1</em> <em>scope2</em> <em>scope3</em>"</code> for multiple scopes.</p>
+
+There are two general
   ways to get a token:</p>
 
     <ul>
@@ -73,6 +78,7 @@
 
     <h3>Using getToken()</h3>
     The following code snippet obtains an access token with an email address, the scope that you want to use for the service, and a {@link android.content.Context}:
+
 <pre>
 HelloActivity mActivity;
 String mEmail;
diff --git a/docs/html/google/play-services/reference/packages.jd b/docs/html/google/play-services/reference/packages.jd
deleted file mode 100644
index 4f1ce79..0000000
--- a/docs/html/google/play-services/reference/packages.jd
+++ /dev/null
@@ -1,6 +0,0 @@
-page.title=Reference
-@jd:body
-
-<p>
-    See offline docs
-</p>
\ No newline at end of file
diff --git a/docs/html/google/play/expansion-files.jd b/docs/html/google/play/expansion-files.jd
index d2ab509..a21fbc5 100644
--- a/docs/html/google/play/expansion-files.jd
+++ b/docs/html/google/play/expansion-files.jd
@@ -82,7 +82,7 @@
 
 <h2 id="Overview">Overview</h2>
 
-<p>Each time you upload an APK using the Google Play Android Developer Console, you have the option to
+<p>Each time you upload an APK using the Google Play Developer Console, you have the option to
 add one or two expansion files to the APK. Each file can be up to 2GB and it can be any format you
 choose, but we recommend you use a compressed file to conserve bandwidth during the download.
 Conceptually, each expansion file plays a different role:</p>
diff --git a/docs/html/guide/index.jd b/docs/html/guide/index.jd
deleted file mode 100644
index fea7027..0000000
--- a/docs/html/guide/index.jd
+++ /dev/null
@@ -1,56 +0,0 @@
-page.title=App Components
-page.landing=true
-page.landing.intro=Android's application framework lets you create extremely rich and innovative apps using a set of reusable components. This section explains how Android apps work and how you use components to build them. 
-page.landing.image=images/ui/ui_index.png
-
-@jd:body
-
-<div class="landing-docs">
-
-  <div class="col-6">
-    <h3>Blog Articles</h3>
-    
-    <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
-      <h4>Using DialogFragments</h4>
-      <p>In this post, I’ll show how to use DialogFragments with the v4 support library (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and return a result to the calling Activity using an interface.</p>
-    </a>
-
-    <a href="http://android-developers.blogspot.com/2011/03/fragments-for-all.html">
-      <h4>Fragments For All</h4>
-      <p>Today we’ve released a static library that exposes the same Fragments API (as well as the new LoaderManager and a few other classes) so that applications compatible with Android 1.6 or later can use fragments to create tablet-compatible user interfaces. </p>
-    </a>
-    
-    <a
-href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
-      <h4>Multithreading for Performance</h4>
-      <p>A good practice in creating responsive applications is to make sure your main UI thread
-does the minimum amount of work. Any potentially long task that may hang your application should be
-handled in a different thread.</p>
-    </a>
-  </div>
-
-  <div class="col-6">
-    <h3>Training</h3>
-    
-    <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
-      <h4>Managing the Activity Lifecycle</h4>
-      <p>This class explains important lifecycle callback methods that each Activity
-      instance receives and how you can use them so your activity does what the user expects and does not consume system
-      resources when your activity doesn't need them.</p>
-    </a>
-
-    <a href="http://developer.android.com/training/basics/fragments/index.html">
-      <h4>Building a Dynamic UI with Fragments</h4>
-      <p>This class shows you how to create a dynamic user experience with fragments and optimize
-your app's user experience for devices with different screen sizes, all while continuing to support
-devices running versions as old as Android 1.6.</p>
-    </a>
-
-    <a href="http://developer.android.com/training/sharing/index.html">
-      <h4>Sharing Content</h4>
-      <p>This class covers some common ways you can send and receive content between
-      applications using Intent APIs and the ActionProvider object.</p>
-    </a>
-  </div>
-
-</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/graphics/renderscript.html b/docs/html/guide/topics/graphics/renderscript.html
deleted file mode 100644
index 454d392..0000000
--- a/docs/html/guide/topics/graphics/renderscript.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/topics/renderscript/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/topics/renderscript/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/topics/ui/accessibility/index.jd b/docs/html/guide/topics/ui/accessibility/index.jd
index 6cdbde4..56efc4c 100644
--- a/docs/html/guide/topics/ui/accessibility/index.jd
+++ b/docs/html/guide/topics/ui/accessibility/index.jd
@@ -28,7 +28,7 @@
     <li>
       <iframe title="Google I/O 2012 - Making Android Apps Accessible"
           width="210" height="160"
-          src="http://www.youtube.com/embed/q3HliaMjL38?rel=0&amp;hd=1"
+          src="//www.youtube.com/embed/q3HliaMjL38?rel=0&amp;hd=1"
           frameborder="0" allowfullscreen>
       </iframe>
     <li>
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index e70987b..4a4b1d5 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -569,7 +569,7 @@
                     For this element, set
 <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a>="android.support.PARENT_ACTIVITY"</code>.
                     Set
-<code><a href="{@docRoot}/guide/topics/manifest/meta-data-element.html#val">android:value</a>="&lt;parent_activity_name&gt;"</code>
+<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#val">android:value</a>="&lt;parent_activity_name&gt;"</code>
                     where <code>&lt;parent_activity_name&gt;</code> is the value of
 <code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a></code>
                     for the parent
diff --git a/docs/html/images/e-mini-hvga-l.png b/docs/html/images/e-mini-hvga-l.png
deleted file mode 100644
index f68853f..0000000
--- a/docs/html/images/e-mini-hvga-l.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/e-mini-hvga-p.png b/docs/html/images/e-mini-hvga-p.png
deleted file mode 100644
index 3cf0db9..0000000
--- a/docs/html/images/e-mini-hvga-p.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/e-mini-qvga-l.png b/docs/html/images/e-mini-qvga-l.png
deleted file mode 100644
index 3138b9f..0000000
--- a/docs/html/images/e-mini-qvga-l.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/e-mini-qvga-p.png b/docs/html/images/e-mini-qvga-p.png
deleted file mode 100644
index 54f2cc1..0000000
--- a/docs/html/images/e-mini-qvga-p.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/emulator-hvga-p.png b/docs/html/images/emulator-hvga-p.png
deleted file mode 100644
index f3b8900..0000000
--- a/docs/html/images/emulator-hvga-p.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/emulator.png b/docs/html/images/emulator.png
deleted file mode 100644
index 9c6860a..0000000
--- a/docs/html/images/emulator.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/copy_res_files.png b/docs/html/images/hello_l10n/copy_res_files.png
deleted file mode 100644
index 9e704b2..0000000
--- a/docs/html/images/hello_l10n/copy_res_files.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/custom_locale_app.png b/docs/html/images/hello_l10n/custom_locale_app.png
deleted file mode 100644
index f89648e..0000000
--- a/docs/html/images/hello_l10n/custom_locale_app.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/drawable-de-rDE/flag.png b/docs/html/images/hello_l10n/drawable-de-rDE/flag.png
deleted file mode 100644
index 2cc58c7..0000000
--- a/docs/html/images/hello_l10n/drawable-de-rDE/flag.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/drawable-en-rCA/flag.png b/docs/html/images/hello_l10n/drawable-en-rCA/flag.png
deleted file mode 100644
index b441d2e..0000000
--- a/docs/html/images/hello_l10n/drawable-en-rCA/flag.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/drawable-en-rUS/flag.png b/docs/html/images/hello_l10n/drawable-en-rUS/flag.png
deleted file mode 100644
index 47a1179..0000000
--- a/docs/html/images/hello_l10n/drawable-en-rUS/flag.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/drawable-fr-rCA/flag.png b/docs/html/images/hello_l10n/drawable-fr-rCA/flag.png
deleted file mode 100644
index b441d2e..0000000
--- a/docs/html/images/hello_l10n/drawable-fr-rCA/flag.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/drawable-fr-rFR/flag.png b/docs/html/images/hello_l10n/drawable-fr-rFR/flag.png
deleted file mode 100644
index cdbe85f..0000000
--- a/docs/html/images/hello_l10n/drawable-fr-rFR/flag.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/drawable-ja-rJP/flag.png b/docs/html/images/hello_l10n/drawable-ja-rJP/flag.png
deleted file mode 100644
index 7b93ee9..0000000
--- a/docs/html/images/hello_l10n/drawable-ja-rJP/flag.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/flag.png b/docs/html/images/hello_l10n/flag.png
deleted file mode 100644
index c232132..0000000
--- a/docs/html/images/hello_l10n/flag.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/frenchCA_screenshot.png b/docs/html/images/hello_l10n/frenchCA_screenshot.png
deleted file mode 100644
index f8e6517..0000000
--- a/docs/html/images/hello_l10n/frenchCA_screenshot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/germanCH_screenshot.png b/docs/html/images/hello_l10n/germanCH_screenshot.png
deleted file mode 100644
index 240104a..0000000
--- a/docs/html/images/hello_l10n/germanCH_screenshot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/german_screenshot.png b/docs/html/images/hello_l10n/german_screenshot.png
deleted file mode 100644
index 3d1b197..0000000
--- a/docs/html/images/hello_l10n/german_screenshot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/japanese_screenshot.png b/docs/html/images/hello_l10n/japanese_screenshot.png
deleted file mode 100644
index e1ffbf9..0000000
--- a/docs/html/images/hello_l10n/japanese_screenshot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/nonlocalized_project.png b/docs/html/images/hello_l10n/nonlocalized_project.png
deleted file mode 100644
index 8df9a06..0000000
--- a/docs/html/images/hello_l10n/nonlocalized_project.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/nonlocalized_screenshot1.png b/docs/html/images/hello_l10n/nonlocalized_screenshot1.png
deleted file mode 100644
index 02ace4b..0000000
--- a/docs/html/images/hello_l10n/nonlocalized_screenshot1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/nonlocalized_screenshot2.png b/docs/html/images/hello_l10n/nonlocalized_screenshot2.png
deleted file mode 100644
index e5a771b..0000000
--- a/docs/html/images/hello_l10n/nonlocalized_screenshot2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/plain_project.png b/docs/html/images/hello_l10n/plain_project.png
deleted file mode 100644
index f3c2b57..0000000
--- a/docs/html/images/hello_l10n/plain_project.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/romanshCH_screenshot.png b/docs/html/images/hello_l10n/romanshCH_screenshot.png
deleted file mode 100644
index a3fd194..0000000
--- a/docs/html/images/hello_l10n/romanshCH_screenshot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/using_custom_locale.png b/docs/html/images/hello_l10n/using_custom_locale.png
deleted file mode 100644
index 61b4c05..0000000
--- a/docs/html/images/hello_l10n/using_custom_locale.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/xml_file_wizard_shortcut.png b/docs/html/images/hello_l10n/xml_file_wizard_shortcut.png
deleted file mode 100644
index f72554d..0000000
--- a/docs/html/images/hello_l10n/xml_file_wizard_shortcut.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/xml_wizard1.png b/docs/html/images/hello_l10n/xml_wizard1.png
deleted file mode 100644
index 35dc09f..0000000
--- a/docs/html/images/hello_l10n/xml_wizard1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_l10n/xml_wizard2.png b/docs/html/images/hello_l10n/xml_wizard2.png
deleted file mode 100644
index 6bcd28b..0000000
--- a/docs/html/images/hello_l10n/xml_wizard2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_world_0.png b/docs/html/images/hello_world_0.png
deleted file mode 100644
index c174fba..0000000
--- a/docs/html/images/hello_world_0.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_world_1.png b/docs/html/images/hello_world_1.png
deleted file mode 100644
index f08438a..0000000
--- a/docs/html/images/hello_world_1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_world_2.png b/docs/html/images/hello_world_2.png
deleted file mode 100644
index 58f5703..0000000
--- a/docs/html/images/hello_world_2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_world_3.png b/docs/html/images/hello_world_3.png
deleted file mode 100644
index d2d2ff6..0000000
--- a/docs/html/images/hello_world_3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_world_4.png b/docs/html/images/hello_world_4.png
deleted file mode 100644
index 5c41e80..0000000
--- a/docs/html/images/hello_world_4.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_world_5.png b/docs/html/images/hello_world_5.png
deleted file mode 100644
index 96b830a..0000000
--- a/docs/html/images/hello_world_5.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_world_8.png b/docs/html/images/hello_world_8.png
deleted file mode 100644
index 07db360..0000000
--- a/docs/html/images/hello_world_8.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/hello_world_9.png b/docs/html/images/hello_world_9.png
deleted file mode 100644
index 3cb4436..0000000
--- a/docs/html/images/hello_world_9.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/icon_barriers.png b/docs/html/images/icon_barriers.png
deleted file mode 100644
index 73345ef..0000000
--- a/docs/html/images/icon_barriers.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/icon_dashboard.png b/docs/html/images/icon_dashboard.png
deleted file mode 100644
index 04793e0..0000000
--- a/docs/html/images/icon_dashboard.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/icon_equal.png b/docs/html/images/icon_equal.png
deleted file mode 100644
index 5548de1..0000000
--- a/docs/html/images/icon_equal.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/icon_fast.png b/docs/html/images/icon_fast.png
deleted file mode 100644
index 4962db9..0000000
--- a/docs/html/images/icon_fast.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/icon_open.png b/docs/html/images/icon_open.png
deleted file mode 100644
index 0db4e8e..0000000
--- a/docs/html/images/icon_open.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/like_thumb1.png b/docs/html/images/like_thumb1.png
deleted file mode 100644
index 098cfaf..0000000
--- a/docs/html/images/like_thumb1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/like_thumb2.png b/docs/html/images/like_thumb2.png
deleted file mode 100644
index ef9d2d2..0000000
--- a/docs/html/images/like_thumb2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/like_thumb3.png b/docs/html/images/like_thumb3.png
deleted file mode 100644
index 543f2de..0000000
--- a/docs/html/images/like_thumb3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/like_thumb4.png b/docs/html/images/like_thumb4.png
deleted file mode 100644
index 1f5e7e4..0000000
--- a/docs/html/images/like_thumb4.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/notepad.png b/docs/html/images/notepad.png
deleted file mode 100644
index 01b0f6d..0000000
--- a/docs/html/images/notepad.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/robot-sdk.png b/docs/html/images/robot-sdk.png
deleted file mode 100644
index 962d4d5..0000000
--- a/docs/html/images/robot-sdk.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/screens_support/afdvfckr9j_14fj6dhsc3_b.png b/docs/html/images/screens_support/afdvfckr9j_14fj6dhsc3_b.png
deleted file mode 100644
index ff4fbbf..0000000
--- a/docs/html/images/screens_support/afdvfckr9j_14fj6dhsc3_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/screens_support/afdvfckr9j_15dcsvrscg_b.png b/docs/html/images/screens_support/afdvfckr9j_15dcsvrscg_b.png
deleted file mode 100644
index 7a987dd..0000000
--- a/docs/html/images/screens_support/afdvfckr9j_15dcsvrscg_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/screens_support/afdvfckr9j_16g95wjqg3_b.png b/docs/html/images/screens_support/afdvfckr9j_16g95wjqg3_b.png
deleted file mode 100644
index 20835b6..0000000
--- a/docs/html/images/screens_support/afdvfckr9j_16g95wjqg3_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/screens_support/afdvfckr9j_17p2w4txgc_b.png b/docs/html/images/screens_support/afdvfckr9j_17p2w4txgc_b.png
deleted file mode 100644
index 8895d49..0000000
--- a/docs/html/images/screens_support/afdvfckr9j_17p2w4txgc_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/screens_support/afdvfckr9j_18c6mhm3cm_b.png b/docs/html/images/screens_support/afdvfckr9j_18c6mhm3cm_b.png
deleted file mode 100644
index ef6ec66..0000000
--- a/docs/html/images/screens_support/afdvfckr9j_18c6mhm3cm_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/screens_support/afdvfckr9j_19c743p6cr_b.png b/docs/html/images/screens_support/afdvfckr9j_19c743p6cr_b.png
deleted file mode 100644
index 34be212..0000000
--- a/docs/html/images/screens_support/afdvfckr9j_19c743p6cr_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/screens_support/afdvfckr9j_20fvptbbdd_b.png b/docs/html/images/screens_support/afdvfckr9j_20fvptbbdd_b.png
deleted file mode 100644
index 2415b52..0000000
--- a/docs/html/images/screens_support/afdvfckr9j_20fvptbbdd_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_autocomplete.png b/docs/html/images/views_autocomplete.png
deleted file mode 100644
index 9e9b69c..0000000
--- a/docs/html/images/views_autocomplete.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_controls_example2.png b/docs/html/images/views_controls_example2.png
deleted file mode 100644
index 198d848..0000000
--- a/docs/html/images/views_controls_example2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_datewidgets_example1_pickdate.png b/docs/html/images/views_datewidgets_example1_pickdate.png
deleted file mode 100644
index 581a80f..0000000
--- a/docs/html/images/views_datewidgets_example1_pickdate.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_datewidgets_example1_picktime.png b/docs/html/images/views_datewidgets_example1_picktime.png
deleted file mode 100644
index 7d91665..0000000
--- a/docs/html/images/views_datewidgets_example1_picktime.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_gallery_example1.png b/docs/html/images/views_gallery_example1.png
deleted file mode 100644
index 103fad8..0000000
--- a/docs/html/images/views_gallery_example1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_grid_example2.png b/docs/html/images/views_grid_example2.png
deleted file mode 100644
index 16590b7..0000000
--- a/docs/html/images/views_grid_example2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_image_switcher.png b/docs/html/images/views_image_switcher.png
deleted file mode 100644
index 601e123..0000000
--- a/docs/html/images/views_image_switcher.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_imagebutton_example1.png b/docs/html/images/views_imagebutton_example1.png
deleted file mode 100644
index a6bb81b..0000000
--- a/docs/html/images/views_imagebutton_example1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_layouts_linearlayout_example1.png b/docs/html/images/views_layouts_linearlayout_example1.png
deleted file mode 100644
index 2c201f6..0000000
--- a/docs/html/images/views_layouts_linearlayout_example1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_layouts_linearlayout_example7.png b/docs/html/images/views_layouts_linearlayout_example7.png
deleted file mode 100644
index f8e4770..0000000
--- a/docs/html/images/views_layouts_linearlayout_example7.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_layouts_relativelayout_example2.png b/docs/html/images/views_layouts_relativelayout_example2.png
deleted file mode 100644
index 395ecb9..0000000
--- a/docs/html/images/views_layouts_relativelayout_example2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_layouts_tablelayout_example10.png b/docs/html/images/views_layouts_tablelayout_example10.png
deleted file mode 100644
index 2f96fa2..0000000
--- a/docs/html/images/views_layouts_tablelayout_example10.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_layouts_tablelayout_spanning.png b/docs/html/images/views_layouts_tablelayout_spanning.png
deleted file mode 100644
index 143ce34..0000000
--- a/docs/html/images/views_layouts_tablelayout_spanning.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_lists_example1.png b/docs/html/images/views_lists_example1.png
deleted file mode 100644
index 067d247..0000000
--- a/docs/html/images/views_lists_example1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/views_spinner.png b/docs/html/images/views_spinner.png
deleted file mode 100644
index 99513a3..0000000
--- a/docs/html/images/views_spinner.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/license.jd b/docs/html/license.jd
index a9af038..20e68fa 100644
--- a/docs/html/license.jd
+++ b/docs/html/license.jd
@@ -67,7 +67,7 @@
 style="margin:0;padding:0 2px;vertical-align:baseline" /> stylized typeface logo) are not included
 in the license.
 Please see <a
-href="http://www.android.com/developers/branding.html">Android Branding Guidelines</a> for
+href="{@docRoot}distribute/googleplay/promote/brand.html">Brand Guidelines</a> for
 information about this usage. </li>
 
 <li>In some cases, a page may include content, such as an image, that is not 
diff --git a/docs/html/live/index.jd b/docs/html/live/index.jd
deleted file mode 100644
index 9729727..0000000
--- a/docs/html/live/index.jd
+++ /dev/null
@@ -1,65 +0,0 @@
-page.title=Live
-fullpage=1
-@jd:body
-
-<div class="wrap" style="width:940px;">
-  
-<h1>Android Developers Live</h1>
-  
-<p>Meet the developers behind successful apps and games on Android. Check back for upcoming
-livecasts on YouTube and videos of past sessions or follow us on 
-<a href="https://plus.google.com/108967384991768947849/posts">+Android Developers</a> for updates.</p>
-  
-  <div id="interviewBlock" id="pocketgems" style="border-top:1px solid #ddd;margin-top:2em;padding-top:1em;clear:both;">
-
-    <div id="mainBodyLeft" class="videoPlayer">
-
-          <h3>Developer Interview: Pocket Gems</h3>
-          
-          <p>19 April 2012<br />2PM PST</p>       
-          <p><span itemprop="description">Pocket Gems, a top game developer on Android, joins
-          <a href="https://plus.google.com/108967384991768947849/posts">+Android Developers</a>
-          to give a short talk on "Defragging Your Android Development." The talk highlights some
-          of the techniques they've used to ensure quality while distributing their apps to hundreds
-          of devices worldwide. </p>
-
-          <p>After the talk, they'll take a few questions from developers in the hangout or from
-          developers joining on air via the moderator queue. </p>
-          
-          <div id="objectWrapper">
-            <iframe width="560" height="315" src="http://www.youtube.com/embed/-wkXan-xNqA" frameborder="0" allowfullscreen></iframe>
-          </div>
-
-    </div><!-- end mainBodyLeft -->
-
-    <div id="mainBodyRight" class="videoPlayer">
-
-      <div style="padding-left:1.5em;font-size:12px;">
-        <div style="padding-bottom:1em;"><img itemprop="image" src="http://pocketgems.com/images/pocket-gems-logo-blue.png"></div>
-
-        <h3 style="color:#000;font-size:12px;">About Pocket Gems</h3>
-          <p>
-            Web: <a style="text-decoration:none" href="http://www.pocketgems.com">www.pocketgems.com</a><br />
-            Google+: <a style="text-decoration:none" href="https://plus.google.com/b/102436156807338888308/">+Pocket Gems</a><br />
-            Twitter: <a style="text-decoration:none" href="https://twitter.com/#!/PocketGems">@PocketGems</a><br />
-          </p>
-     
-        <h3 style="color:#000;font-size:12px;">Published on Google Play</h3>
-          <p style="line-height:1.5em;">
-            <a style="text-decoration:none" href="https://play.google.com/store/apps/developer?id=Pocket+Gems">Apps by Pocket Gems</a>
-          </p>
-
-        <h3 style="color:#000;font-size:12px;">Join</h3>
-          <p style="line-height:1.5em;">
-            <a style="text-decoration:none" href="http://youtu.be/-wkXan-xNqA">Watch on YouTube</a><br />
-            <a style="text-decoration:none" href="http://www.google.com/moderator/#15/e=1fd27e&t=1fd27e.40">Submit a question</a><br />
-            <a style="text-decoration:none" href="https://www.google.com/calendar/ical/g2ilcr0iki4olp10aluid7gl70%40group.calendar.google.com/public/basic.ics">Add to calendar</a> (iCal)
-          </p>
-
-      </li></ul>
-      
-</div>
-    </div><!-- end mainBodyRight -->
-</div><!-- interviewBlock -->
-
-</div><!-- end mainBodyFixed -->
diff --git a/docs/html/reference/com/google/android/gcm/GCMBaseIntentService.html b/docs/html/reference/com/google/android/gcm/GCMBaseIntentService.html
index 6478451..b2f475a 100644
--- a/docs/html/reference/com/google/android/gcm/GCMBaseIntentService.html
+++ b/docs/html/reference/com/google/android/gcm/GCMBaseIntentService.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -5560,6 +5605,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -5570,7 +5616,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -5583,6 +5634,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -5592,41 +5644,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/GCMBroadcastReceiver.html b/docs/html/reference/com/google/android/gcm/GCMBroadcastReceiver.html
index 880f628..2f6c71f 100644
--- a/docs/html/reference/com/google/android/gcm/GCMBroadcastReceiver.html
+++ b/docs/html/reference/com/google/android/gcm/GCMBroadcastReceiver.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1494,6 +1539,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1504,7 +1550,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1517,6 +1568,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1526,41 +1578,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/GCMConstants.html b/docs/html/reference/com/google/android/gcm/GCMConstants.html
index 8cee735..ac47746 100644
--- a/docs/html/reference/com/google/android/gcm/GCMConstants.html
+++ b/docs/html/reference/com/google/android/gcm/GCMConstants.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2019,6 +2064,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2029,7 +2075,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2042,6 +2093,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2051,41 +2103,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/GCMRegistrar.html b/docs/html/reference/com/google/android/gcm/GCMRegistrar.html
index a0a5930..1e3fafe 100644
--- a/docs/html/reference/com/google/android/gcm/GCMRegistrar.html
+++ b/docs/html/reference/com/google/android/gcm/GCMRegistrar.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1698,6 +1743,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1708,7 +1754,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1721,6 +1772,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1730,41 +1782,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/package-summary.html b/docs/html/reference/com/google/android/gcm/package-summary.html
index 45c8c2e..b882654 100644
--- a/docs/html/reference/com/google/android/gcm/package-summary.html
+++ b/docs/html/reference/com/google/android/gcm/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -613,6 +658,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -623,7 +669,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -636,6 +687,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -644,41 +696,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/server/Constants.html b/docs/html/reference/com/google/android/gcm/server/Constants.html
index b8bdcf4..ad1f7f6 100644
--- a/docs/html/reference/com/google/android/gcm/server/Constants.html
+++ b/docs/html/reference/com/google/android/gcm/server/Constants.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2304,6 +2349,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2314,7 +2360,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2327,6 +2378,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2336,41 +2388,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/server/InvalidRequestException.html b/docs/html/reference/com/google/android/gcm/server/InvalidRequestException.html
index f6621b5..77d4a1c 100644
--- a/docs/html/reference/com/google/android/gcm/server/InvalidRequestException.html
+++ b/docs/html/reference/com/google/android/gcm/server/InvalidRequestException.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1464,6 +1509,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1474,7 +1520,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1487,6 +1538,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1496,41 +1548,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/server/Message.Builder.html b/docs/html/reference/com/google/android/gcm/server/Message.Builder.html
index f7e68b2..f6c93ca 100644
--- a/docs/html/reference/com/google/android/gcm/server/Message.Builder.html
+++ b/docs/html/reference/com/google/android/gcm/server/Message.Builder.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1276,6 +1321,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1286,7 +1332,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1299,6 +1350,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1308,41 +1360,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/server/Message.html b/docs/html/reference/com/google/android/gcm/server/Message.html
index c7a2d4a..6a86dbc 100644
--- a/docs/html/reference/com/google/android/gcm/server/Message.html
+++ b/docs/html/reference/com/google/android/gcm/server/Message.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1280,6 +1325,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1290,7 +1336,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1303,6 +1354,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1312,41 +1364,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/server/MulticastResult.html b/docs/html/reference/com/google/android/gcm/server/MulticastResult.html
index 3174036..d4466fc 100644
--- a/docs/html/reference/com/google/android/gcm/server/MulticastResult.html
+++ b/docs/html/reference/com/google/android/gcm/server/MulticastResult.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1374,6 +1419,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1384,7 +1430,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1397,6 +1448,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1406,41 +1458,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/server/Result.html b/docs/html/reference/com/google/android/gcm/server/Result.html
index 626bcb4..0927a0b 100644
--- a/docs/html/reference/com/google/android/gcm/server/Result.html
+++ b/docs/html/reference/com/google/android/gcm/server/Result.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1203,6 +1248,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1213,7 +1259,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1226,6 +1277,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1235,41 +1287,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/server/Sender.html b/docs/html/reference/com/google/android/gcm/server/Sender.html
index e49637e..834c6e8 100644
--- a/docs/html/reference/com/google/android/gcm/server/Sender.html
+++ b/docs/html/reference/com/google/android/gcm/server/Sender.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2090,6 +2135,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2100,7 +2146,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2113,6 +2164,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2122,41 +2174,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gcm/server/package-summary.html b/docs/html/reference/com/google/android/gcm/server/package-summary.html
index c463e35..18b8cfc 100644
--- a/docs/html/reference/com/google/android/gcm/server/package-summary.html
+++ b/docs/html/reference/com/google/android/gcm/server/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -630,6 +675,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -640,7 +686,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -653,6 +704,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -661,41 +713,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/R.attr.html b/docs/html/reference/com/google/android/gms/R.attr.html
index 9c16b34..4c3b67c 100644
--- a/docs/html/reference/com/google/android/gms/R.attr.html
+++ b/docs/html/reference/com/google/android/gms/R.attr.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1676,6 +1721,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1686,7 +1732,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1699,6 +1750,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1708,41 +1760,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/R.html b/docs/html/reference/com/google/android/gms/R.html
index 93fc057..72a2e4b 100644
--- a/docs/html/reference/com/google/android/gms/R.html
+++ b/docs/html/reference/com/google/android/gms/R.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1081,6 +1126,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1091,7 +1137,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1104,6 +1155,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1113,41 +1165,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/R.id.html b/docs/html/reference/com/google/android/gms/R.id.html
index 49d4488..fbf85e0 100644
--- a/docs/html/reference/com/google/android/gms/R.id.html
+++ b/docs/html/reference/com/google/android/gms/R.id.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1197,6 +1242,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1207,7 +1253,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1220,6 +1271,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1229,41 +1281,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/R.string.html b/docs/html/reference/com/google/android/gms/R.string.html
index cfc7039..ad1ac20 100644
--- a/docs/html/reference/com/google/android/gms/R.string.html
+++ b/docs/html/reference/com/google/android/gms/R.string.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1509,6 +1554,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1519,7 +1565,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1532,6 +1583,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1541,41 +1593,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/R.styleable.html b/docs/html/reference/com/google/android/gms/R.styleable.html
index 8e9d328..d8bca3e 100644
--- a/docs/html/reference/com/google/android/gms/R.styleable.html
+++ b/docs/html/reference/com/google/android/gms/R.styleable.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1899,6 +1944,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1909,7 +1955,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1922,6 +1973,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1931,41 +1983,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/auth/GoogleAuthException.html b/docs/html/reference/com/google/android/gms/auth/GoogleAuthException.html
index eab5502..d0c6d8d 100644
--- a/docs/html/reference/com/google/android/gms/auth/GoogleAuthException.html
+++ b/docs/html/reference/com/google/android/gms/auth/GoogleAuthException.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1354,6 +1399,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1364,7 +1410,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1377,6 +1428,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1386,41 +1438,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/auth/GoogleAuthUtil.html b/docs/html/reference/com/google/android/gms/auth/GoogleAuthUtil.html
index c7bd650..5216486 100644
--- a/docs/html/reference/com/google/android/gms/auth/GoogleAuthUtil.html
+++ b/docs/html/reference/com/google/android/gms/auth/GoogleAuthUtil.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1963,6 +2008,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1973,7 +2019,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1986,6 +2037,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1995,41 +2047,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html b/docs/html/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
index 34a0cc5..cf3c490 100644
--- a/docs/html/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
+++ b/docs/html/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1379,6 +1424,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1389,7 +1435,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1402,6 +1453,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1411,41 +1463,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/auth/UserRecoverableAuthException.html b/docs/html/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
index c7fa1fa..4c4b55c 100644
--- a/docs/html/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
+++ b/docs/html/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1407,6 +1452,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1417,7 +1463,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1430,6 +1481,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1439,41 +1491,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html b/docs/html/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
index 7d31a14..c95531e 100644
--- a/docs/html/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
+++ b/docs/html/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1306,6 +1351,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1316,7 +1362,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1329,6 +1380,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1338,41 +1390,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/auth/package-summary.html b/docs/html/reference/com/google/android/gms/auth/package-summary.html
index d012bf3..a9df148 100644
--- a/docs/html/reference/com/google/android/gms/auth/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/auth/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -633,6 +678,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -643,7 +689,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -656,6 +707,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -664,41 +716,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/AccountPicker.html b/docs/html/reference/com/google/android/gms/common/AccountPicker.html
index 0d275a3..95a8c3b 100644
--- a/docs/html/reference/com/google/android/gms/common/AccountPicker.html
+++ b/docs/html/reference/com/google/android/gms/common/AccountPicker.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1104,6 +1149,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1114,7 +1160,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1127,6 +1178,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1136,41 +1188,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/ConnectionResult.html b/docs/html/reference/com/google/android/gms/common/ConnectionResult.html
index cba7af1..01fe3ec 100644
--- a/docs/html/reference/com/google/android/gms/common/ConnectionResult.html
+++ b/docs/html/reference/com/google/android/gms/common/ConnectionResult.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1895,6 +1940,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1905,7 +1951,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1918,6 +1969,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1927,41 +1979,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
index cc502c1..528833e 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -839,6 +884,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -849,7 +895,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -862,6 +913,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -871,41 +923,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
index b4add9a..583219a 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -793,6 +838,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -803,7 +849,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -816,6 +867,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -825,41 +877,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.html
index fef18ea..8ff9fec 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -642,7 +687,9 @@
             
               <a href="/reference/com/google/android/gms/panorama/PanoramaClient.html">PanoramaClient</a>,
             
-              <a href="/reference/com/google/android/gms/plus/PlusClient.html">PlusClient</a>
+              <a href="/reference/com/google/android/gms/plus/PlusClient.html">PlusClient</a>,
+            
+              <a href="/reference/com/google/android/gms/wallet/WalletClient.html">WalletClient</a>
             
           
       </div>
@@ -658,6 +705,10 @@
               <td class="jd-linkcol"><a href="/reference/com/google/android/gms/plus/PlusClient.html">PlusClient</a></td>
               <td class="jd-descrcol" width="100%">The main entry point for Google+ integration.&nbsp;</td>
           </tr>
+        <tr class="alt-color api apilevel-" >
+              <td class="jd-linkcol"><a href="/reference/com/google/android/gms/wallet/WalletClient.html">WalletClient</a></td>
+              <td class="jd-descrcol" width="100%">The main entry point for Google Wallet integration.&nbsp;</td>
+          </tr>
   </table>
       </div>
   </div>
@@ -1378,6 +1429,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1388,7 +1440,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1401,6 +1458,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1410,41 +1468,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
index d20d3f7b..75b81bf 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1340,6 +1385,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1350,7 +1396,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1363,6 +1414,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1372,41 +1424,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesUtil.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
index 81c57c8..474924c 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1631,6 +1676,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1641,7 +1687,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1654,6 +1705,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1663,41 +1715,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/Scopes.html b/docs/html/reference/com/google/android/gms/common/Scopes.html
index cb0b15b..3ec61fc 100644
--- a/docs/html/reference/com/google/android/gms/common/Scopes.html
+++ b/docs/html/reference/com/google/android/gms/common/Scopes.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1026,6 +1071,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1036,7 +1082,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1049,6 +1100,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1058,41 +1110,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/common/package-summary.html b/docs/html/reference/com/google/android/gms/common/package-summary.html
index 2056542..9ad89dc 100644
--- a/docs/html/reference/com/google/android/gms/common/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/common/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -651,6 +696,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -661,7 +707,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -674,6 +725,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -682,41 +734,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/CameraUpdate.html b/docs/html/reference/com/google/android/gms/maps/CameraUpdate.html
index 13a71e5..a0094a7 100644
--- a/docs/html/reference/com/google/android/gms/maps/CameraUpdate.html
+++ b/docs/html/reference/com/google/android/gms/maps/CameraUpdate.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -971,6 +1016,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -981,7 +1027,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -994,6 +1045,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1003,41 +1055,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/CameraUpdateFactory.html b/docs/html/reference/com/google/android/gms/maps/CameraUpdateFactory.html
index 512151f..de425cf 100644
--- a/docs/html/reference/com/google/android/gms/maps/CameraUpdateFactory.html
+++ b/docs/html/reference/com/google/android/gms/maps/CameraUpdateFactory.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1741,6 +1786,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1751,7 +1797,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1764,6 +1815,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1773,41 +1825,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
index f1c12bf..ade1386 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -823,6 +868,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -833,7 +879,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -846,6 +897,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -855,41 +907,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
index de772f1..c328947 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -872,6 +917,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -882,7 +928,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -895,6 +946,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -904,41 +956,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
index 0cc7fd3..940f2fe 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -788,6 +833,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -798,7 +844,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -811,6 +862,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -820,41 +872,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
index d2b61b4..cb6ee77 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -784,6 +829,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -794,7 +840,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -807,6 +858,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -816,41 +868,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
index cd52fee..bcc2d9c 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -789,6 +834,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -799,7 +845,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -812,6 +863,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -821,41 +873,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
index 12bb496..11de80c 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -789,6 +834,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -799,7 +845,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -812,6 +863,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -821,41 +873,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
index 560b799..74e863f 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -791,6 +836,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -801,7 +847,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -814,6 +865,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -823,41 +875,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
index 8e97fc9..de9ad70 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -902,6 +947,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -912,7 +958,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -925,6 +976,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -934,41 +986,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.html
index 1e07fe0..0055844 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -3282,6 +3327,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -3292,7 +3338,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -3305,6 +3356,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -3314,41 +3366,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMapOptions.html b/docs/html/reference/com/google/android/gms/maps/GoogleMapOptions.html
index a936568..5e393e1 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMapOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMapOptions.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2427,6 +2472,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2437,7 +2483,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2450,6 +2501,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2459,41 +2511,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html b/docs/html/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
index 6251f9b..3989347 100644
--- a/docs/html/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -784,6 +829,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -794,7 +840,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -807,6 +858,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -816,41 +868,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/LocationSource.html b/docs/html/reference/com/google/android/gms/maps/LocationSource.html
index 566ae3e..dc44817 100644
--- a/docs/html/reference/com/google/android/gms/maps/LocationSource.html
+++ b/docs/html/reference/com/google/android/gms/maps/LocationSource.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -889,6 +934,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -899,7 +945,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -912,6 +963,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -921,41 +973,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/MapFragment.html b/docs/html/reference/com/google/android/gms/maps/MapFragment.html
index 4e37711..204e8bd 100644
--- a/docs/html/reference/com/google/android/gms/maps/MapFragment.html
+++ b/docs/html/reference/com/google/android/gms/maps/MapFragment.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -3132,6 +3177,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -3142,7 +3188,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -3155,6 +3206,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -3164,41 +3216,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/MapView.html b/docs/html/reference/com/google/android/gms/maps/MapView.html
index 051b75c..7ea2e7e 100644
--- a/docs/html/reference/com/google/android/gms/maps/MapView.html
+++ b/docs/html/reference/com/google/android/gms/maps/MapView.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -12493,6 +12538,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -12503,7 +12549,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -12516,6 +12567,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -12525,41 +12577,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/MapsInitializer.html b/docs/html/reference/com/google/android/gms/maps/MapsInitializer.html
index d046585..3757a3c 100644
--- a/docs/html/reference/com/google/android/gms/maps/MapsInitializer.html
+++ b/docs/html/reference/com/google/android/gms/maps/MapsInitializer.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1054,6 +1099,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1064,7 +1110,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1077,6 +1128,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1086,41 +1138,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/Projection.html b/docs/html/reference/com/google/android/gms/maps/Projection.html
index 98239e8..2d937be 100644
--- a/docs/html/reference/com/google/android/gms/maps/Projection.html
+++ b/docs/html/reference/com/google/android/gms/maps/Projection.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1163,6 +1208,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1173,7 +1219,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1186,6 +1237,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1195,41 +1247,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/SupportMapFragment.html b/docs/html/reference/com/google/android/gms/maps/SupportMapFragment.html
index 7d91d15..1eff225 100644
--- a/docs/html/reference/com/google/android/gms/maps/SupportMapFragment.html
+++ b/docs/html/reference/com/google/android/gms/maps/SupportMapFragment.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2989,6 +3034,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2999,7 +3045,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -3012,6 +3063,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -3021,41 +3073,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/UiSettings.html b/docs/html/reference/com/google/android/gms/maps/UiSettings.html
index 9cafb04..06fc7f7 100644
--- a/docs/html/reference/com/google/android/gms/maps/UiSettings.html
+++ b/docs/html/reference/com/google/android/gms/maps/UiSettings.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1851,6 +1896,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1861,7 +1907,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1874,6 +1925,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1883,41 +1935,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptor.html b/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
index f1da03c..54f6eea 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -974,6 +1019,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -984,7 +1030,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -997,6 +1048,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1006,41 +1058,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html b/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
index 5012b90..1d75e2a 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1789,6 +1834,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1799,7 +1845,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1812,6 +1863,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1821,41 +1873,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html b/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
index f01ff0c..70591e5 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1350,6 +1395,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1360,7 +1406,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1373,6 +1424,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1382,41 +1434,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.html b/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.html
index 3f592b2..076097a 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1950,6 +1995,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1960,7 +2006,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1973,6 +2024,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1982,41 +2034,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/GroundOverlay.html b/docs/html/reference/com/google/android/gms/maps/model/GroundOverlay.html
index 2987830..e95dc28 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/GroundOverlay.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/GroundOverlay.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2122,6 +2167,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2132,7 +2178,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2145,6 +2196,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2154,41 +2206,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html b/docs/html/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
index 6e5f214..cf6ec72 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2647,6 +2692,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2657,7 +2703,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2670,6 +2721,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2679,41 +2731,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/LatLng.html b/docs/html/reference/com/google/android/gms/maps/model/LatLng.html
index a48ca54..6c5c930 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/LatLng.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/LatLng.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1615,6 +1660,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1625,7 +1671,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1638,6 +1689,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1647,41 +1699,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html b/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
index 37d8146..a427b28 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1167,6 +1212,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1177,7 +1223,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1190,6 +1241,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1199,41 +1251,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.html b/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.html
index 563cc47..116dfbf 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1825,6 +1870,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1835,7 +1881,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1848,6 +1899,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1857,41 +1909,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/Marker.html b/docs/html/reference/com/google/android/gms/maps/model/Marker.html
index 5893473..4077c67 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/Marker.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/Marker.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1863,6 +1908,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1873,7 +1919,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1886,6 +1937,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1895,41 +1947,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/MarkerOptions.html b/docs/html/reference/com/google/android/gms/maps/model/MarkerOptions.html
index 08ef863..7193c78 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/MarkerOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/MarkerOptions.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2209,6 +2254,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2219,7 +2265,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2232,6 +2283,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2241,41 +2293,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/Polygon.html b/docs/html/reference/com/google/android/gms/maps/model/Polygon.html
index 046d280..0efe3e1 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/Polygon.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/Polygon.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2088,6 +2133,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2098,7 +2144,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2111,6 +2162,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2120,41 +2172,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/PolygonOptions.html b/docs/html/reference/com/google/android/gms/maps/model/PolygonOptions.html
index c688e4e..2137626 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/PolygonOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/PolygonOptions.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2324,6 +2369,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2334,7 +2380,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2347,6 +2398,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2356,41 +2408,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/Polyline.html b/docs/html/reference/com/google/android/gms/maps/model/Polyline.html
index 4ffd067..4316dd9 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/Polyline.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/Polyline.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1936,6 +1981,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1946,7 +1992,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1959,6 +2010,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1968,41 +2020,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/PolylineOptions.html b/docs/html/reference/com/google/android/gms/maps/model/PolylineOptions.html
index 3288493..56088e13 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/PolylineOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/PolylineOptions.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2108,6 +2153,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2118,7 +2164,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2131,6 +2182,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2140,41 +2192,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html b/docs/html/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
index 8d5c4a2..f2a0310 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1305,6 +1350,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1315,7 +1361,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1328,6 +1379,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1337,41 +1389,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/Tile.html b/docs/html/reference/com/google/android/gms/maps/model/Tile.html
index fd59da5..e0df3c4 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/Tile.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/Tile.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1516,6 +1561,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1526,7 +1572,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1539,6 +1590,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1548,41 +1600,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/TileOverlay.html b/docs/html/reference/com/google/android/gms/maps/model/TileOverlay.html
index c216bf8..0382b4d 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/TileOverlay.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/TileOverlay.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1495,6 +1540,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1505,7 +1551,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1518,6 +1569,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1527,41 +1579,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/TileOverlayOptions.html b/docs/html/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
index 80deef6f..2c5ba59 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1703,6 +1748,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1713,7 +1759,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1726,6 +1777,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1735,41 +1787,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/TileProvider.html b/docs/html/reference/com/google/android/gms/maps/model/TileProvider.html
index a33a967..eb1c39d 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/TileProvider.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/TileProvider.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -916,6 +961,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -926,7 +972,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -939,6 +990,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -948,41 +1000,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/UrlTileProvider.html b/docs/html/reference/com/google/android/gms/maps/model/UrlTileProvider.html
index 4b82dfa..de7c761 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/UrlTileProvider.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/UrlTileProvider.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1321,6 +1366,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1331,7 +1377,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1344,6 +1395,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1353,41 +1405,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/VisibleRegion.html b/docs/html/reference/com/google/android/gms/maps/model/VisibleRegion.html
index 8e5f192..b7473a6 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/VisibleRegion.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/VisibleRegion.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1770,6 +1815,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1780,7 +1826,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1793,6 +1844,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1802,41 +1854,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/model/package-summary.html b/docs/html/reference/com/google/android/gms/maps/model/package-summary.html
index cdee9af..056cbff 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -703,6 +748,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -713,7 +759,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -726,6 +777,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -734,41 +786,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/maps/package-summary.html b/docs/html/reference/com/google/android/gms/maps/package-summary.html
index 903b8fa..e3844eb 100644
--- a/docs/html/reference/com/google/android/gms/maps/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/maps/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -690,6 +735,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -700,7 +746,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -713,6 +764,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -721,41 +773,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/package-summary.html b/docs/html/reference/com/google/android/gms/package-summary.html
index ec06c8b..884cbf0 100644
--- a/docs/html/reference/com/google/android/gms/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -615,6 +660,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -625,7 +671,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -638,6 +689,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -646,41 +698,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html b/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
index edd0a19..d5bcd10 100644
--- a/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
+++ b/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -790,6 +835,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -800,7 +846,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -813,6 +864,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -822,41 +874,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.html b/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.html
index b4b14f7..2ae5ab8 100644
--- a/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.html
+++ b/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1975,6 +2020,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1985,7 +2031,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1998,6 +2049,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2007,41 +2059,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/panorama/package-summary.html b/docs/html/reference/com/google/android/gms/panorama/package-summary.html
index aa40441..b962238 100644
--- a/docs/html/reference/com/google/android/gms/panorama/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/panorama/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -610,6 +655,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -620,7 +666,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -633,6 +684,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -641,41 +693,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/plus/GooglePlusUtil.html b/docs/html/reference/com/google/android/gms/plus/GooglePlusUtil.html
index 635b3fa..fb394af 100644
--- a/docs/html/reference/com/google/android/gms/plus/GooglePlusUtil.html
+++ b/docs/html/reference/com/google/android/gms/plus/GooglePlusUtil.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1361,6 +1406,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1371,7 +1417,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1384,6 +1435,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1393,41 +1445,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusClient.html b/docs/html/reference/com/google/android/gms/plus/PlusClient.html
index 867ca65..df521ab 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusClient.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusClient.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -2156,6 +2201,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -2166,7 +2212,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -2179,6 +2230,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -2188,41 +2240,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html b/docs/html/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
index e45596e..e180d00 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -787,6 +832,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -797,7 +843,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -810,6 +861,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -819,41 +871,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusOneButton.html b/docs/html/reference/com/google/android/gms/plus/PlusOneButton.html
index b0a9474..ba5d97b 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusOneButton.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusOneButton.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -12369,6 +12414,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -12379,7 +12425,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -12392,6 +12443,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -12401,41 +12453,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusShare.Builder.html b/docs/html/reference/com/google/android/gms/plus/PlusShare.Builder.html
index 21c5804..34f8524 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusShare.Builder.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusShare.Builder.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1565,6 +1610,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1575,7 +1621,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1588,6 +1639,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1597,41 +1649,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusShare.html b/docs/html/reference/com/google/android/gms/plus/PlusShare.html
index a220418..f8f8375 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusShare.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusShare.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -1362,6 +1407,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -1372,7 +1418,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -1385,6 +1436,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -1394,41 +1446,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusSignInButton.html b/docs/html/reference/com/google/android/gms/plus/PlusSignInButton.html
index 60f60a2..1204cbc 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusSignInButton.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusSignInButton.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,28 +111,44 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop" itemscope itemtype="http://schema.org/Article">
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -164,27 +209,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -341,7 +390,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -530,6 +579,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -539,11 +589,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -9818,6 +9863,7 @@
 <!-- ========= END OF CLASS DATA ========= -->
 <A NAME="navbar_top"></A>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -9828,7 +9874,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -9841,6 +9892,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div> <!-- jd-content -->
 
 </div><!-- end doc-content -->
@@ -9850,41 +9902,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/com/google/android/gms/plus/package-summary.html b/docs/html/reference/com/google/android/gms/plus/package-summary.html
index 8deab06..c41a548 100644
--- a/docs/html/reference/com/google/android/gms/plus/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/plus/package-summary.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,22 +111,37 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 
 <body class="gc-documentation google
@@ -105,6 +149,7 @@
   <div id="doc-api-level" class="" style="display:none"></div>
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -165,27 +210,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -342,7 +391,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -531,6 +580,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -540,11 +590,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -637,6 +682,7 @@
   
 
 
+
 <div id="footer" class="wrap" >
         
 
@@ -647,7 +693,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -660,6 +711,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div><!-- doc-content -->
 
@@ -668,41 +720,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/gcm-packages.html b/docs/html/reference/gcm-packages.html
index 28fd130..7497e1f 100644
--- a/docs/html/reference/gcm-packages.html
+++ b/docs/html/reference/gcm-packages.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,27 +111,43 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop">
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -163,27 +208,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -340,7 +389,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -529,6 +578,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -538,11 +588,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -577,6 +622,7 @@
 
 </table>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -587,7 +633,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -600,6 +651,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div> <!-- end doc-content -->
 
@@ -608,41 +660,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/reference/gms-packages.html b/docs/html/reference/gms-packages.html
index be865d2..bdb57d2 100644
--- a/docs/html/reference/gms-packages.html
+++ b/docs/html/reference/gms-packages.html
@@ -73,6 +73,35 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -82,27 +111,43 @@
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
-href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
 <link href="/assets/css/default.css" rel="stylesheet" type="text/css">
 
 
 
 <!-- JAVASCRIPT -->
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/js/global-libraries-combined.js" type="text/javascript"></script>
+<script src="//www.google.com/jsapi" type="text/javascript"></script>
+<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
 <script type="text/javascript">
   var toRoot = "/";
+  
+  var devsite = false;
+  
 </script>
 <script src="/assets/js/docs.js" type="text/javascript"></script>
 
 <script src="/gms_navtree_data.js" type="text/javascript"></script>
 <script src="/gcm_navtree_data.js" type="text/javascript"></script>
 
+
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-5831155-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
 </head>
 <body class="gc-documentation google
   develop">
   <a name="top"></a>
 
+  
     <!-- Header -->
     <div id="header">
         <div class="wrap" id="header-wrap">
@@ -163,27 +208,31 @@
         <li class="active"><a>Android Developers</a></li>
         <li><a href="http://source.android.com">Android Open Source Project</a></li>
       </ul>
-      <!-- <div class="header">Support</div>
-      <ul>
-        <li><a href="/support.html">Developer Support</a></li>
-      </ul> -->
-      <div class="header">Languages</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>
+      
+
+      
+      
+        <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>
+      
+      
+
+
       <br class="clearfix" />
     </div>
     <div class="bottom"></div>
@@ -340,7 +389,7 @@
     <!-- /Sendondary x-nav -->
 
   
-
+  
 
   
   <div class="wrap clearfix" id="body-content">
@@ -529,6 +578,7 @@
        showGoogleRefTree();
     
       </script>
+
     </div> <!-- end side-nav -->
     <script>
       $(document).ready(function() {
@@ -538,11 +588,6 @@
 
 
      
-    <script>
-      $(document).ready(function() {
-        changeDocLang(getLangPref());
-        });
-    </script>
 
 
 
@@ -614,6 +659,7 @@
 
 </table>
 
+
 <div id="footer" class="wrap" >
         
 
@@ -624,7 +670,12 @@
   For details and restrictions, see the <a href="/license.html">
   Content License</a>.
   </div>
-  
+  <div id="build_info">
+    
+<script src="/timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+
+  </div>
 
 
   <div id="footerlinks">
@@ -637,6 +688,7 @@
   </div>
 
 </div> <!-- end footer -->
+
 </div><!-- end jd-content -->
 </div> <!-- end doc-content -->
 
@@ -645,41 +697,6 @@
 
 
 
-<!-- Grid - for dev 
-<script type="text/javascript">
-
-window.gOverride = {
-		gColor: '#FF0000',
-		pColor: '#EEEEEE',
-		gOpacity: 0.10,
-		pOpacity: 0.40,
-		pHeight: 16,
-		pOffset: 2,
-		gColumns:16,
-		gEnabled:false,
-		pEnabled:false
-	}
-</script>
-	
-<link href="/assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
-<script src="/assets/js/grid/960.gridder.js" type="text/javascript"></script>
--->
-
-
-
-
-
-<script type="text/javascript">
-init(); /* initialize android-developer-docs.js */
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-
-<script type="text/javascript">
-  var pageTracker = _gat._getTracker("UA-5831155-1");
-  pageTracker._trackPageview();
-</script>
-
 
 
 </body>
diff --git a/docs/html/resources/tutorials/images/hello_world_0.png b/docs/html/resources/tutorials/images/hello_world_0.png
deleted file mode 100644
index 2674045..0000000
--- a/docs/html/resources/tutorials/images/hello_world_0.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/images/hello_world_1.png b/docs/html/resources/tutorials/images/hello_world_1.png
deleted file mode 100644
index dc4b4ad..0000000
--- a/docs/html/resources/tutorials/images/hello_world_1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/images/hello_world_2.png b/docs/html/resources/tutorials/images/hello_world_2.png
deleted file mode 100644
index 3e9c58b..0000000
--- a/docs/html/resources/tutorials/images/hello_world_2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/images/hello_world_3.png b/docs/html/resources/tutorials/images/hello_world_3.png
deleted file mode 100644
index 22901a9..0000000
--- a/docs/html/resources/tutorials/images/hello_world_3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/images/hello_world_4.png b/docs/html/resources/tutorials/images/hello_world_4.png
deleted file mode 100644
index 5c41e80..0000000
--- a/docs/html/resources/tutorials/images/hello_world_4.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/images/hello_world_5.png b/docs/html/resources/tutorials/images/hello_world_5.png
deleted file mode 100644
index 96b830a..0000000
--- a/docs/html/resources/tutorials/images/hello_world_5.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/images/hello_world_8.png b/docs/html/resources/tutorials/images/hello_world_8.png
deleted file mode 100644
index 07db360..0000000
--- a/docs/html/resources/tutorials/images/hello_world_8.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/images/hello_world_9.png b/docs/html/resources/tutorials/images/hello_world_9.png
deleted file mode 100644
index a66526a..0000000
--- a/docs/html/resources/tutorials/images/hello_world_9.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/sdk/api_diff/10/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/10/changes/alldiffs_index_additions.html
index 372109a..39431c1 100644
--- a/docs/html/sdk/api_diff/10/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/10/changes/alldiffs_index_additions.html
@@ -301,7 +301,7 @@
 <A HREF="pkg_android.nfc.html#Tag" class="hiddenlink" target="rightframe"><b>Tag</b></A><br>
 <!-- Class TagLostException -->
 <A HREF="pkg_android.nfc.html#TagLostException" class="hiddenlink" target="rightframe"><b>TagLostException</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/10/changes/alldiffs_index_all.html
index 8b4644e..b451aca 100644
--- a/docs/html/sdk/api_diff/10/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/10/changes/alldiffs_index_all.html
@@ -370,7 +370,7 @@
 <A HREF="pkg_android.nfc.html#Tag" class="hiddenlink" target="rightframe"><b>Tag</b></A><br>
 <!-- Class TagLostException -->
 <A HREF="pkg_android.nfc.html#TagLostException" class="hiddenlink" target="rightframe"><b>TagLostException</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/10/changes/alldiffs_index_changes.html
index 950b66d..febe5ee 100644
--- a/docs/html/sdk/api_diff/10/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/10/changes/alldiffs_index_changes.html
@@ -114,7 +114,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.nfc.NfcAdapter.html" class="hiddenlink" target="rightframe">NfcAdapter</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/10/changes/alldiffs_index_removals.html
index 3b36617..11e38c7 100644
--- a/docs/html/sdk/api_diff/10/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/10/changes/alldiffs_index_removals.html
@@ -63,7 +63,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.test.mock.MockPackageManager.html#android.test.mock.MockPackageManager.setPackageObbPath_removed(java.lang.String, java.lang.String)" class="hiddenlink" target="rightframe"><strike>setPackageObbPath</strike>
 (<code>String, String</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.bluetooth.BluetoothAdapter.html b/docs/html/sdk/api_diff/10/changes/android.bluetooth.BluetoothAdapter.html
index a57461f..f20ca6e 100644
--- a/docs/html/sdk/api_diff/10/changes/android.bluetooth.BluetoothAdapter.html
+++ b/docs/html/sdk/api_diff/10/changes/android.bluetooth.BluetoothAdapter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.bluetooth.BluetoothDevice.html b/docs/html/sdk/api_diff/10/changes/android.bluetooth.BluetoothDevice.html
index bc226a0..9df8bf5 100644
--- a/docs/html/sdk/api_diff/10/changes/android.bluetooth.BluetoothDevice.html
+++ b/docs/html/sdk/api_diff/10/changes/android.bluetooth.BluetoothDevice.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.content.Context.html b/docs/html/sdk/api_diff/10/changes/android.content.Context.html
index 21e13dc..fe1732d 100644
--- a/docs/html/sdk/api_diff/10/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/10/changes/android.content.Context.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.graphics.BitmapFactory.Options.html b/docs/html/sdk/api_diff/10/changes/android.graphics.BitmapFactory.Options.html
index 71e087d..001e8bf 100644
--- a/docs/html/sdk/api_diff/10/changes/android.graphics.BitmapFactory.Options.html
+++ b/docs/html/sdk/api_diff/10/changes/android.graphics.BitmapFactory.Options.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.media.MediaRecorder.AudioEncoder.html b/docs/html/sdk/api_diff/10/changes/android.media.MediaRecorder.AudioEncoder.html
index 50637f4..958e1ec 100644
--- a/docs/html/sdk/api_diff/10/changes/android.media.MediaRecorder.AudioEncoder.html
+++ b/docs/html/sdk/api_diff/10/changes/android.media.MediaRecorder.AudioEncoder.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.media.MediaRecorder.OutputFormat.html b/docs/html/sdk/api_diff/10/changes/android.media.MediaRecorder.OutputFormat.html
index d761f78..925630b 100644
--- a/docs/html/sdk/api_diff/10/changes/android.media.MediaRecorder.OutputFormat.html
+++ b/docs/html/sdk/api_diff/10/changes/android.media.MediaRecorder.OutputFormat.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.nfc.NfcAdapter.html b/docs/html/sdk/api_diff/10/changes/android.nfc.NfcAdapter.html
index 518877a..61072ca 100644
--- a/docs/html/sdk/api_diff/10/changes/android.nfc.NfcAdapter.html
+++ b/docs/html/sdk/api_diff/10/changes/android.nfc.NfcAdapter.html
@@ -187,7 +187,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/10/changes/android.os.Build.VERSION_CODES.html
index 13a2bfc..c27cbf4 100644
--- a/docs/html/sdk/api_diff/10/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/10/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/10/changes/android.test.mock.MockPackageManager.html
index fc46828..7291ab3 100644
--- a/docs/html/sdk/api_diff/10/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/10/changes/android.test.mock.MockPackageManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/changes-summary.html b/docs/html/sdk/api_diff/10/changes/changes-summary.html
index ff0e479..39de62d 100644
--- a/docs/html/sdk/api_diff/10/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/10/changes/changes-summary.html
@@ -185,7 +185,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/classes_index_additions.html b/docs/html/sdk/api_diff/10/changes/classes_index_additions.html
index 0425483..ba75880 100644
--- a/docs/html/sdk/api_diff/10/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/10/changes/classes_index_additions.html
@@ -93,7 +93,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.nfc.html#Tag" class="hiddenlink" target="rightframe"><b>Tag</b></A><br>
 <A HREF="pkg_android.nfc.html#TagLostException" class="hiddenlink" target="rightframe"><b>TagLostException</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/classes_index_all.html b/docs/html/sdk/api_diff/10/changes/classes_index_all.html
index 0aa1a08..6751124 100644
--- a/docs/html/sdk/api_diff/10/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/10/changes/classes_index_all.html
@@ -116,7 +116,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.nfc.html#Tag" class="hiddenlink" target="rightframe"><b>Tag</b></A><br>
 <A HREF="pkg_android.nfc.html#TagLostException" class="hiddenlink" target="rightframe"><b>TagLostException</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/classes_index_changes.html b/docs/html/sdk/api_diff/10/changes/classes_index_changes.html
index 58a5025..b2506d0 100644
--- a/docs/html/sdk/api_diff/10/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/10/changes/classes_index_changes.html
@@ -84,7 +84,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.nfc.NfcAdapter.html" class="hiddenlink" target="rightframe">NfcAdapter</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/classes_index_removals.html b/docs/html/sdk/api_diff/10/changes/classes_index_removals.html
index e6da73f..af7f1d0 100644
--- a/docs/html/sdk/api_diff/10/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/10/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/10/changes/constructors_index_additions.html
index 3237ba3..a106dcb 100644
--- a/docs/html/sdk/api_diff/10/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/10/changes/constructors_index_additions.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/constructors_index_all.html b/docs/html/sdk/api_diff/10/changes/constructors_index_all.html
index 637582e..3e67e48 100644
--- a/docs/html/sdk/api_diff/10/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/10/changes/constructors_index_all.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/10/changes/constructors_index_changes.html
index 728fa2d..1f3c803 100644
--- a/docs/html/sdk/api_diff/10/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/10/changes/constructors_index_changes.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/10/changes/constructors_index_removals.html
index 1b95544..a260baa 100644
--- a/docs/html/sdk/api_diff/10/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/10/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/fields_index_additions.html b/docs/html/sdk/api_diff/10/changes/fields_index_additions.html
index 9b2ce1e..eafea9c 100644
--- a/docs/html/sdk/api_diff/10/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/10/changes/fields_index_additions.html
@@ -110,7 +110,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.content.Context.html#android.content.Context.NFC_SERVICE" class="hiddenlink" target="rightframe">NFC_SERVICE</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/fields_index_all.html b/docs/html/sdk/api_diff/10/changes/fields_index_all.html
index 699188c..1e14b2e 100644
--- a/docs/html/sdk/api_diff/10/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/10/changes/fields_index_all.html
@@ -110,7 +110,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.content.Context.html#android.content.Context.NFC_SERVICE" class="hiddenlink" target="rightframe">NFC_SERVICE</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/fields_index_changes.html b/docs/html/sdk/api_diff/10/changes/fields_index_changes.html
index 4ebfa31..3fb80c2 100644
--- a/docs/html/sdk/api_diff/10/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/10/changes/fields_index_changes.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/fields_index_removals.html b/docs/html/sdk/api_diff/10/changes/fields_index_removals.html
index 09b0726..654f5f2 100644
--- a/docs/html/sdk/api_diff/10/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/10/changes/fields_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/jdiff_help.html b/docs/html/sdk/api_diff/10/changes/jdiff_help.html
index ed5b90c..727f83d 100644
--- a/docs/html/sdk/api_diff/10/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/10/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/10/changes/jdiff_statistics.html
index dad958e..0f3d3dc 100644
--- a/docs/html/sdk/api_diff/10/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/10/changes/jdiff_statistics.html
@@ -257,7 +257,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/10/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/10/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/10/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/methods_index_additions.html b/docs/html/sdk/api_diff/10/changes/methods_index_additions.html
index 4d188bd..b6ea66d 100644
--- a/docs/html/sdk/api_diff/10/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/10/changes/methods_index_additions.html
@@ -106,7 +106,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.bluetooth.BluetoothAdapter.html#android.bluetooth.BluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord_added(java.lang.String, java.util.UUID)" class="hiddenlink" target="rightframe"><b>listenUsingInsecureRfcommWithServiceRecord</b>
 (<code>String, UUID</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/methods_index_all.html b/docs/html/sdk/api_diff/10/changes/methods_index_all.html
index 430198b..e1b2231 100644
--- a/docs/html/sdk/api_diff/10/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/10/changes/methods_index_all.html
@@ -125,7 +125,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.test.mock.MockPackageManager.html#android.test.mock.MockPackageManager.setPackageObbPath_removed(java.lang.String, java.lang.String)" class="hiddenlink" target="rightframe"><strike>setPackageObbPath</strike>
 (<code>String, String</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/methods_index_changes.html b/docs/html/sdk/api_diff/10/changes/methods_index_changes.html
index 9a040bc..f623f80 100644
--- a/docs/html/sdk/api_diff/10/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/10/changes/methods_index_changes.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/methods_index_removals.html b/docs/html/sdk/api_diff/10/changes/methods_index_removals.html
index 34afdb9..9fc9094 100644
--- a/docs/html/sdk/api_diff/10/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/10/changes/methods_index_removals.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.test.mock.MockPackageManager.html#android.test.mock.MockPackageManager.setPackageObbPath_removed(java.lang.String, java.lang.String)" class="hiddenlink" target="rightframe"><strike>setPackageObbPath</strike>
 (<code>String, String</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/packages_index_additions.html b/docs/html/sdk/api_diff/10/changes/packages_index_additions.html
index 903b674..a7030ed 100644
--- a/docs/html/sdk/api_diff/10/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/10/changes/packages_index_additions.html
@@ -51,7 +51,7 @@
 <div id="indexTableEntries">
 <A NAME="A"></A>
 <A HREF="changes-summary.html#android.nfc.tech" class="hiddenlink" target="rightframe"><b>android.nfc.tech</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/packages_index_all.html b/docs/html/sdk/api_diff/10/changes/packages_index_all.html
index a66de72..64b3f2b 100644
--- a/docs/html/sdk/api_diff/10/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/10/changes/packages_index_all.html
@@ -59,7 +59,7 @@
 <A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
 <A HREF="pkg_android.speech.html" class="hiddenlink" target="rightframe">android.speech</A><br>
 <A HREF="pkg_android.test.mock.html" class="hiddenlink" target="rightframe">android.test.mock</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/packages_index_changes.html b/docs/html/sdk/api_diff/10/changes/packages_index_changes.html
index 4ff0c75..e69bd90 100644
--- a/docs/html/sdk/api_diff/10/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/10/changes/packages_index_changes.html
@@ -58,7 +58,7 @@
 <A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
 <A HREF="pkg_android.speech.html" class="hiddenlink" target="rightframe">android.speech</A><br>
 <A HREF="pkg_android.test.mock.html" class="hiddenlink" target="rightframe">android.test.mock</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/packages_index_removals.html b/docs/html/sdk/api_diff/10/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/10/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/10/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/10/changes/pkg_android.bluetooth.html
index d1792cb..1fd8349 100644
--- a/docs/html/sdk/api_diff/10/changes/pkg_android.bluetooth.html
+++ b/docs/html/sdk/api_diff/10/changes/pkg_android.bluetooth.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/pkg_android.content.html b/docs/html/sdk/api_diff/10/changes/pkg_android.content.html
index 7eb32d5..d57ac1e 100644
--- a/docs/html/sdk/api_diff/10/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/10/changes/pkg_android.content.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/10/changes/pkg_android.graphics.html
index 859bca5..6d0351d 100644
--- a/docs/html/sdk/api_diff/10/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/10/changes/pkg_android.graphics.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/pkg_android.media.html b/docs/html/sdk/api_diff/10/changes/pkg_android.media.html
index 537d8e4..cada63d 100644
--- a/docs/html/sdk/api_diff/10/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/10/changes/pkg_android.media.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/pkg_android.nfc.html b/docs/html/sdk/api_diff/10/changes/pkg_android.nfc.html
index 2f618ea..d80c6c5 100644
--- a/docs/html/sdk/api_diff/10/changes/pkg_android.nfc.html
+++ b/docs/html/sdk/api_diff/10/changes/pkg_android.nfc.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/pkg_android.os.html b/docs/html/sdk/api_diff/10/changes/pkg_android.os.html
index e8baafa..d344c55 100644
--- a/docs/html/sdk/api_diff/10/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/10/changes/pkg_android.os.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/pkg_android.speech.html b/docs/html/sdk/api_diff/10/changes/pkg_android.speech.html
index fe52c7d..bca87eb 100644
--- a/docs/html/sdk/api_diff/10/changes/pkg_android.speech.html
+++ b/docs/html/sdk/api_diff/10/changes/pkg_android.speech.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/10/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/10/changes/pkg_android.test.mock.html
index d5313fa..4f4a5c8 100644
--- a/docs/html/sdk/api_diff/10/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/10/changes/pkg_android.test.mock.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/11/changes/alldiffs_index_additions.html
index 454d0d8..74278c71 100644
--- a/docs/html/sdk/api_diff/11/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/alldiffs_index_additions.html
@@ -4248,7 +4248,7 @@
 <!-- Method writeToParcel -->
 <nobr><A HREF="android.content.SyncInfo.html#android.content.SyncInfo.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe"><b>writeToParcel</b>
 (<code>Parcel, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/11/changes/alldiffs_index_all.html
index c36382a..8d68d60 100644
--- a/docs/html/sdk/api_diff/11/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/alldiffs_index_all.html
@@ -5287,7 +5287,7 @@
 <!-- Method writeToParcel -->
 <nobr><A HREF="android.content.SyncInfo.html#android.content.SyncInfo.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe"><b>writeToParcel</b>
 (<code>Parcel, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/11/changes/alldiffs_index_changes.html
index 5c91713..ca1564f 100644
--- a/docs/html/sdk/api_diff/11/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/11/changes/alldiffs_index_changes.html
@@ -1544,7 +1544,7 @@
 <A HREF="android.view.Window.Callback.html" class="hiddenlink" target="rightframe"><i>Window.Callback</i></A><br>
 <!-- Class WindowManager.LayoutParams -->
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/11/changes/alldiffs_index_removals.html
index 941fbff..b85cc14 100644
--- a/docs/html/sdk/api_diff/11/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/11/changes/alldiffs_index_removals.html
@@ -242,7 +242,7 @@
 <!-- Method updateToNull -->
 <nobr><A HREF="android.test.mock.MockCursor.html#android.test.mock.MockCursor.updateToNull_removed(int)" class="hiddenlink" target="rightframe"><strike>updateToNull</strike>
 (<code>int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/11/changes/android.Manifest.permission.html
index 79aaf10..49a1108 100644
--- a/docs/html/sdk/api_diff/11/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/11/changes/android.Manifest.permission.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.attr.html b/docs/html/sdk/api_diff/11/changes/android.R.attr.html
index b6cac99..1411647 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.attr.html
@@ -1158,7 +1158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.dimen.html b/docs/html/sdk/api_diff/11/changes/android.R.dimen.html
index 205f3fc..d06b5b9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.dimen.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.dimen.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.drawable.html b/docs/html/sdk/api_diff/11/changes/android.R.drawable.html
index 8172aed..2f33643 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.drawable.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.drawable.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.id.html b/docs/html/sdk/api_diff/11/changes/android.R.id.html
index 163425d..0a4a827 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.id.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.id.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.layout.html b/docs/html/sdk/api_diff/11/changes/android.R.layout.html
index a596cfd..97da70d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.layout.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.layout.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.string.html b/docs/html/sdk/api_diff/11/changes/android.R.string.html
index 0e0f105..f17f20a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.string.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.string.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.R.style.html b/docs/html/sdk/api_diff/11/changes/android.R.style.html
index 74ff759..8162b0d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/11/changes/android.R.style.html
@@ -1046,7 +1046,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.accounts.AccountManager.html b/docs/html/sdk/api_diff/11/changes/android.accounts.AccountManager.html
index f3c6626..21e998a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.accounts.AccountManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.accounts.AccountManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html b/docs/html/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
index 58c532a..5d4f437 100644
--- a/docs/html/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
+++ b/docs/html/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.Activity.html b/docs/html/sdk/api_diff/11/changes/android.app.Activity.html
index 96d728a..58a9a49 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.Activity.html
@@ -281,7 +281,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html b/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
index 2823629..08ea164 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.html b/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.html
index 6c46ba7..f50a889 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.ActivityManager.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html b/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
index 532eb6b..8e53bba 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.html b/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.html
index cb5c2f2..17b4de9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.AlertDialog.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.DatePickerDialog.html b/docs/html/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
index d6b69c0..2c23187 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.Dialog.html b/docs/html/sdk/api_diff/11/changes/android.app.Dialog.html
index fe83a77..8fca6c2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.Dialog.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.Dialog.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html b/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
index f85ec18..5ab0e4b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.html b/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.html
index 3c138ad..b4b28ec 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.DownloadManager.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.Notification.html b/docs/html/sdk/api_diff/11/changes/android.app.Notification.html
index 19086f5..5d773d1 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.Notification.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.Notification.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/11/changes/android.app.PendingIntent.html
index fed6b615..2578b36 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.PendingIntent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.PendingIntent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.ProgressDialog.html b/docs/html/sdk/api_diff/11/changes/android.app.ProgressDialog.html
index 7437921..503b28d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.ProgressDialog.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.ProgressDialog.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/11/changes/android.app.SearchManager.html
index 4621bf0..6451368 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.SearchManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.SearchManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.Service.html b/docs/html/sdk/api_diff/11/changes/android.app.Service.html
index 0bf322d..b071b942 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.Service.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.Service.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/11/changes/android.app.WallpaperManager.html
index 42c6f8b..7ffa8a8 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.WallpaperManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.WallpaperManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html b/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
index 1bb82b3..96d3135d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html b/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
index 28691bc..200dc74 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html b/docs/html/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
index 9527bda..f4f80ed 100644
--- a/docs/html/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
@@ -298,7 +298,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
index ec97611..9f8919d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
+++ b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
index 81585ba..d99c96e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
index dbcbce2..ac21b49 100644
--- a/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html b/docs/html/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
index e71af0f..c583f86 100644
--- a/docs/html/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
@@ -172,7 +172,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html b/docs/html/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
index 0c3d615..1a54e80 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html b/docs/html/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
index 526c923..e94663a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContentProvider.html b/docs/html/sdk/api_diff/11/changes/android.content.ContentProvider.html
index a1c2be1..ba92c9f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContentProvider.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContentProvider.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContentProviderClient.html b/docs/html/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
index 569e158..094c695 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContentResolver.html b/docs/html/sdk/api_diff/11/changes/android.content.ContentResolver.html
index 33c85fc..f098782 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContentResolver.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContentResolver.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContentValues.html b/docs/html/sdk/api_diff/11/changes/android.content.ContentValues.html
index c5348d3..a1ca16f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContentValues.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContentValues.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.Context.html b/docs/html/sdk/api_diff/11/changes/android.content.Context.html
index ae902c0..d08762c 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.Context.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.ContextWrapper.html b/docs/html/sdk/api_diff/11/changes/android.content.ContextWrapper.html
index e7c38ce..2044b32 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.ContextWrapper.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.ContextWrapper.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.Intent.html b/docs/html/sdk/api_diff/11/changes/android.content.Intent.html
index 20f5cf9..0d11723 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.Intent.html
@@ -186,7 +186,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html b/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
index b36c517..5449a7c 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.html b/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.html
index 7d77e1b..2796602 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.SharedPreferences.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.SyncAdapterType.html b/docs/html/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
index 4b810a5..9a3825b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.SyncInfo.html b/docs/html/sdk/api_diff/11/changes/android.content.SyncInfo.html
index d8b75aa..95fabe0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.SyncInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.SyncInfo.html
@@ -116,7 +116,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
index 32c8de7..4a32f6b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
index cb1994e..ca3436f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
index f1a5385..ae10995 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
index 42e668a..500a13a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageStats.html b/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
index 11536cb8..c1e4c89 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/11/changes/android.content.res.Configuration.html
index a2c3198..3d9e529 100644
--- a/docs/html/sdk/api_diff/11/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/11/changes/android.content.res.Configuration.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.AbstractCursor.html b/docs/html/sdk/api_diff/11/changes/android.database.AbstractCursor.html
index 12811ed..290998e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.AbstractCursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.AbstractCursor.html
@@ -160,7 +160,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html b/docs/html/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
index 2425924..8164ade 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.Cursor.html b/docs/html/sdk/api_diff/11/changes/android.database.Cursor.html
index 5df7634..252803f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.Cursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.Cursor.html
@@ -169,7 +169,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.CursorWindow.html b/docs/html/sdk/api_diff/11/changes/android.database.CursorWindow.html
index 50284fb..52726f7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.CursorWindow.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.CursorWindow.html
@@ -166,7 +166,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.CursorWrapper.html b/docs/html/sdk/api_diff/11/changes/android.database.CursorWrapper.html
index d5152d1..e69df08 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.CursorWrapper.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.CursorWrapper.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.DatabaseUtils.html b/docs/html/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
index 97436a2..a628061 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
@@ -228,7 +228,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
index 324912c..5d54d67 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
index 779678d..6a91c89 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
@@ -210,7 +210,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
index b782814..7596f20 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
index 20aab20..0d9e142 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
index aa6bc15..ceb50db 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
index ee6c8fb..9a47ab5 100644
--- a/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
+++ b/docs/html/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html b/docs/html/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
index 68aa872..92161fb 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.Canvas.html b/docs/html/sdk/api_diff/11/changes/android.graphics.Canvas.html
index a4cf3e6..364cac9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.Canvas.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.Canvas.html
@@ -152,7 +152,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
index b2dd308..5eab240 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
index 0b28b32..88db891 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
index 603d4e7..0919d89 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
index 7c69ecd..d56c509 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
index d933421..6572843 100644
--- a/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
+++ b/docs/html/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
index f2edcf9..71c2a10 100644
--- a/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
+++ b/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.html
index 32dfdde..7042935 100644
--- a/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/11/changes/android.hardware.Camera.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.hardware.SensorManager.html b/docs/html/sdk/api_diff/11/changes/android.hardware.SensorManager.html
index 14d24ad..20591d3 100644
--- a/docs/html/sdk/api_diff/11/changes/android.hardware.SensorManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.hardware.SensorManager.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
index 9769634..e846d6d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
+++ b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
index 83d5e9e..5851c14 100644
--- a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
+++ b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
index c6e749a..2d0c718 100644
--- a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
+++ b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
index 58490d8..73409ec 100644
--- a/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
+++ b/docs/html/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/11/changes/android.media.AudioManager.html
index d946c68..40ff572 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.AudioManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.CamcorderProfile.html b/docs/html/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
index 94a0784..8c9b63b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
@@ -207,7 +207,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.ExifInterface.html b/docs/html/sdk/api_diff/11/changes/android.media.ExifInterface.html
index e99c6de..640dfee 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.ExifInterface.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.ExifInterface.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html b/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
index 1035e58..de6175b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.html
index 57241e2..c35b0d4 100644
--- a/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.media.MediaRecorder.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.net.Proxy.html b/docs/html/sdk/api_diff/11/changes/android.net.Proxy.html
index 90d43f2..a1b6f57 100644
--- a/docs/html/sdk/api_diff/11/changes/android.net.Proxy.html
+++ b/docs/html/sdk/api_diff/11/changes/android.net.Proxy.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.net.Uri.Builder.html b/docs/html/sdk/api_diff/11/changes/android.net.Uri.Builder.html
index 3261b03..2f87724 100644
--- a/docs/html/sdk/api_diff/11/changes/android.net.Uri.Builder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.net.Uri.Builder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.net.Uri.html b/docs/html/sdk/api_diff/11/changes/android.net.Uri.html
index c0afdd2..0e3c454 100644
--- a/docs/html/sdk/api_diff/11/changes/android.net.Uri.html
+++ b/docs/html/sdk/api_diff/11/changes/android.net.Uri.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html b/docs/html/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
index d49cd65..361d6f5 100644
--- a/docs/html/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.AsyncTask.html b/docs/html/sdk/api_diff/11/changes/android.os.AsyncTask.html
index 6655d8ad..20cbcbe 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.AsyncTask.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.AsyncTask.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.BatteryManager.html b/docs/html/sdk/api_diff/11/changes/android.os.BatteryManager.html
index 832a5f0..e96449a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.BatteryManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.BatteryManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
index 14357aa..61f5d2b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Bundle.html b/docs/html/sdk/api_diff/11/changes/android.os.Bundle.html
index 14964de..9b02b29 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Bundle.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Bundle.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Debug.html b/docs/html/sdk/api_diff/11/changes/android.os.Debug.html
index 7688959..059dd49 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Debug.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Debug.html
@@ -241,7 +241,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.DropBoxManager.html b/docs/html/sdk/api_diff/11/changes/android.os.DropBoxManager.html
index 0615328..1531b51 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.DropBoxManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.DropBoxManager.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Environment.html b/docs/html/sdk/api_diff/11/changes/android.os.Environment.html
index 4c9554a..4310139 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Environment.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Environment.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
index 3413c07..eddd85e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
index 89cc546..485354e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.html b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.html
index 91cacad..ad68f77 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.StrictMode.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.os.Vibrator.html b/docs/html/sdk/api_diff/11/changes/android.os.Vibrator.html
index eb400c0..bc0e2c8 100644
--- a/docs/html/sdk/api_diff/11/changes/android.os.Vibrator.html
+++ b/docs/html/sdk/api_diff/11/changes/android.os.Vibrator.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.preference.Preference.html b/docs/html/sdk/api_diff/11/changes/android.preference.Preference.html
index 68b1829..aadb257 100644
--- a/docs/html/sdk/api_diff/11/changes/android.preference.Preference.html
+++ b/docs/html/sdk/api_diff/11/changes/android.preference.Preference.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html b/docs/html/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
index f4c2b97..6e50453 100644
--- a/docs/html/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
+++ b/docs/html/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
@@ -356,7 +356,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.AlarmClock.html b/docs/html/sdk/api_diff/11/changes/android.provider.AlarmClock.html
index 56e510f..bd6d9fa 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.AlarmClock.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.AlarmClock.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
index 2297049..bb8fb3a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
index ee96c98..29b5219 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
index 584d98b..c93c606 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
index 023a1dc..3e6271e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
index 4fe9e12..15ed23b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
index f4bf4d8..3e6d826 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
index 7071f67..6690990 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
index 5817b98..bb85f98 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
index 5c83818..e95ad28 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
index 2988b8b..964ddc4 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
index 986064e..9083c04 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
index 7f2786a..2aecc75 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
index e3b6975..14b51c0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
index 795461f..9565050 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
index fb3a818..9fac058 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.html b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.html
index 91f1cc9..f8fdbec 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.ContactsContract.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html b/docs/html/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
index f0b2458..b48b652 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
index 017b8b7..29db0ee 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.System.html
index 546a8a1..f5fbef6 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.System.html
@@ -132,7 +132,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.html
index d01ded8..2c51f99 100644
--- a/docs/html/sdk/api_diff/11/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/11/changes/android.provider.Settings.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html b/docs/html/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
index 528ba3e..f245d4a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html b/docs/html/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
index ecd4ae2..2b6a4e2 100644
--- a/docs/html/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
+++ b/docs/html/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
index 13258f9..4c24582 100644
--- a/docs/html/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockContext.html b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockContext.html
index 80b7071..23e1db9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockContext.html
+++ b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockContext.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockCursor.html b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
index 44479f2..e4822bd 100644
--- a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
+++ b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
@@ -214,7 +214,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
index ba731ba..3062d30 100644
--- a/docs/html/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.ClipboardManager.html b/docs/html/sdk/api_diff/11/changes/android.text.ClipboardManager.html
index 58d4081..747e923 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.ClipboardManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.ClipboardManager.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.InputType.html b/docs/html/sdk/api_diff/11/changes/android.text.InputType.html
index 0bc0783..31b923f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.InputType.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.InputType.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html b/docs/html/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
index 2b30205..292e209 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.format.Time.html b/docs/html/sdk/api_diff/11/changes/android.text.format.Time.html
index 733ae32..d3741a5 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.format.Time.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.format.Time.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html b/docs/html/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
index e8018ff..f90f4f1 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
@@ -182,7 +182,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html b/docs/html/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
index f8476bc..1486a96 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html b/docs/html/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
index 326579d..2392719 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html b/docs/html/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
index 4c2a5af..9cbf47f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
+++ b/docs/html/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
@@ -222,7 +222,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.AndroidException.html b/docs/html/sdk/api_diff/11/changes/android.util.AndroidException.html
index 4e5829a..69c6e05 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.AndroidException.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.AndroidException.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html b/docs/html/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
index e4d3735..bd88793 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.Patterns.html b/docs/html/sdk/api_diff/11/changes/android.util.Patterns.html
index 8985ccb..402b3da 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.Patterns.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.Patterns.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.SparseArray.html b/docs/html/sdk/api_diff/11/changes/android.util.SparseArray.html
index 3dd7be2..6c30242 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.SparseArray.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.SparseArray.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.util.StateSet.html b/docs/html/sdk/api_diff/11/changes/android.util.StateSet.html
index c40f954..7137317 100644
--- a/docs/html/sdk/api_diff/11/changes/android.util.StateSet.html
+++ b/docs/html/sdk/api_diff/11/changes/android.util.StateSet.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html b/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
index 945bee7..644be0d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html b/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
index 07150bc..faccd474 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
@@ -186,7 +186,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/11/changes/android.view.KeyEvent.html
index 7eab63e..2e79628 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.KeyEvent.html
@@ -862,7 +862,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.LayoutInflater.html b/docs/html/sdk/api_diff/11/changes/android.view.LayoutInflater.html
index 384f01e..207fe7c 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.LayoutInflater.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.LayoutInflater.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.MenuItem.html b/docs/html/sdk/api_diff/11/changes/android.view.MenuItem.html
index ae27c1d..f9ca4d1 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.MenuItem.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.MenuItem.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/11/changes/android.view.MotionEvent.html
index d5cb341..e9873d5 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.MotionEvent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html b/docs/html/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
index bc9da111..732f1e9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.Surface.html b/docs/html/sdk/api_diff/11/changes/android.view.Surface.html
index dfbfde3..e7837e0 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.Surface.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.Surface.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.SurfaceHolder.html b/docs/html/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
index 409e310..580835d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.View.html b/docs/html/sdk/api_diff/11/changes/android.view.View.html
index 6de1ad7..f53c45a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.View.html
@@ -624,7 +624,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/11/changes/android.view.ViewGroup.html
index c14d36f..f26c3fe 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.ViewGroup.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.ViewGroup.html
@@ -175,7 +175,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.ViewParent.html b/docs/html/sdk/api_diff/11/changes/android.view.ViewParent.html
index 9caa391..d528d40 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.ViewParent.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.ViewParent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.Window.Callback.html b/docs/html/sdk/api_diff/11/changes/android.view.Window.Callback.html
index 73aa436..76cdbaf 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.Window.Callback.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.Window.Callback.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.Window.html b/docs/html/sdk/api_diff/11/changes/android.view.Window.html
index c55a207..d999c12 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.Window.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.Window.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
index c68dce7..676a046 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.animation.Animation.html b/docs/html/sdk/api_diff/11/changes/android.view.animation.Animation.html
index 8bf383b..c2e07c3 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.animation.Animation.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.animation.Animation.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.animation.Interpolator.html b/docs/html/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
index c292c24..d3c057d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
index 6104007..f623d4d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
index bd0e913..8a50a4c 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
index 3a21f56..2941e4f 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
index 1f8cd1e..b18857a 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
index faa103b..93d9e1b 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
index 5e8ef7f..5cc8291 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
index 68a58d3..1b76813 100644
--- a/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html b/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
index 9ba6fb2..0c324e4 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.html b/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.html
index 0330d94..bb3c1ba 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.CacheManager.html
@@ -142,7 +142,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/11/changes/android.webkit.WebSettings.html
index d5dd2ca..6a9e989 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.WebSettings.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/11/changes/android.webkit.WebView.html
index dbd3c12..86af1c4 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.WebView.html
@@ -186,7 +186,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.webkit.WebViewClient.html b/docs/html/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
index 65172a0..05e309c 100644
--- a/docs/html/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
+++ b/docs/html/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.AbsListView.html b/docs/html/sdk/api_diff/11/changes/android.widget.AbsListView.html
index 03dc6a1..176af42 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.AbsListView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.AbsListView.html
@@ -277,7 +277,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html b/docs/html/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
index 4dbdc6e..2a7525d9 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.CursorAdapter.html b/docs/html/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
index 537dd79..5a55eac 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
@@ -181,7 +181,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.DatePicker.html b/docs/html/sdk/api_diff/11/changes/android.widget.DatePicker.html
index 2309fed..8f96766 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.DatePicker.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.DatePicker.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.GridView.html b/docs/html/sdk/api_diff/11/changes/android.widget.GridView.html
index 73b9dbc..c53f1ff 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.GridView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.GridView.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.ImageView.html b/docs/html/sdk/api_diff/11/changes/android.widget.ImageView.html
index 2658d25..3e7dc54 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.ImageView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.ImageView.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.LinearLayout.html b/docs/html/sdk/api_diff/11/changes/android.widget.LinearLayout.html
index acdd2b7..4814785 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.LinearLayout.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.LinearLayout.html
@@ -187,7 +187,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.ListView.html b/docs/html/sdk/api_diff/11/changes/android.widget.ListView.html
index 922cbd7..ee05027 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.ListView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.ListView.html
@@ -246,7 +246,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.OverScroller.html b/docs/html/sdk/api_diff/11/changes/android.widget.OverScroller.html
index 9cc2fa8..ba6dcf8 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.OverScroller.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.OverScroller.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.PopupWindow.html b/docs/html/sdk/api_diff/11/changes/android.widget.PopupWindow.html
index f3aebe0..a53c55d 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.PopupWindow.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.PopupWindow.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html b/docs/html/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
index de5f6eb..12399d7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/11/changes/android.widget.RemoteViews.html
index 53eef91..ff61b37 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.RemoteViews.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html b/docs/html/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
index a41e9df..d1022f1 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.Scroller.html b/docs/html/sdk/api_diff/11/changes/android.widget.Scroller.html
index b6e77be..edd6f97 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.Scroller.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.Scroller.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html b/docs/html/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
index 602482b..1d9fd5e 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.Spinner.html b/docs/html/sdk/api_diff/11/changes/android.widget.Spinner.html
index e2ee047..d9308fa 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.Spinner.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.Spinner.html
@@ -152,7 +152,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.TabWidget.html b/docs/html/sdk/api_diff/11/changes/android.widget.TabWidget.html
index 45488a7..a6a7e38 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.TabWidget.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.TabWidget.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/android.widget.TextView.html b/docs/html/sdk/api_diff/11/changes/android.widget.TextView.html
index 780259e..e6c98e7 100644
--- a/docs/html/sdk/api_diff/11/changes/android.widget.TextView.html
+++ b/docs/html/sdk/api_diff/11/changes/android.widget.TextView.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/changes-summary.html b/docs/html/sdk/api_diff/11/changes/changes-summary.html
index 18e9f5d..b3708c3 100644
--- a/docs/html/sdk/api_diff/11/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/11/changes/changes-summary.html
@@ -409,7 +409,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/classes_index_additions.html b/docs/html/sdk/api_diff/11/changes/classes_index_additions.html
index f159c57..4018439 100644
--- a/docs/html/sdk/api_diff/11/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/classes_index_additions.html
@@ -496,7 +496,7 @@
 <A HREF="pkg_android.webkit.html#WebResourceResponse" class="hiddenlink" target="rightframe"><b>WebResourceResponse</b></A><br>
 <A HREF="pkg_android.webkit.html#WebStorage.Origin" class="hiddenlink" target="rightframe"><b>WebStorage.Origin</b></A><br>
 <A HREF="pkg_android.webkit.html#WebViewFragment" class="hiddenlink" target="rightframe"><b>WebViewFragment</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/classes_index_all.html b/docs/html/sdk/api_diff/11/changes/classes_index_all.html
index c824942..a01fbe7 100644
--- a/docs/html/sdk/api_diff/11/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/classes_index_all.html
@@ -903,7 +903,7 @@
 <A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
 <A HREF="android.view.Window.Callback.html" class="hiddenlink" target="rightframe"><i>Window.Callback</i></A><br>
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/classes_index_changes.html b/docs/html/sdk/api_diff/11/changes/classes_index_changes.html
index ce368d2..0e12986b 100644
--- a/docs/html/sdk/api_diff/11/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/11/changes/classes_index_changes.html
@@ -703,7 +703,7 @@
 <A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
 <A HREF="android.view.Window.Callback.html" class="hiddenlink" target="rightframe"><i>Window.Callback</i></A><br>
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/classes_index_removals.html b/docs/html/sdk/api_diff/11/changes/classes_index_removals.html
index e6da73f..af7f1d0 100644
--- a/docs/html/sdk/api_diff/11/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/11/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/11/changes/constructors_index_additions.html
index 22543d1..fc7bb39 100644
--- a/docs/html/sdk/api_diff/11/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/constructors_index_additions.html
@@ -196,7 +196,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.ctor_added(android.content.Context, android.util.AttributeSet, int, boolean)" class="hiddenlink" target="rightframe"><b>WebView</b>
 (<code>Context, AttributeSet, int, boolean</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/constructors_index_all.html b/docs/html/sdk/api_diff/11/changes/constructors_index_all.html
index 4b00f99..7966682 100644
--- a/docs/html/sdk/api_diff/11/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/constructors_index_all.html
@@ -234,7 +234,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.ctor_added(android.content.Context, android.util.AttributeSet, int, boolean)" class="hiddenlink" target="rightframe"><b>WebView</b>
 (<code>Context, AttributeSet, int, boolean</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/11/changes/constructors_index_changes.html
index 3b5ad04..76ef774 100644
--- a/docs/html/sdk/api_diff/11/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/11/changes/constructors_index_changes.html
@@ -85,7 +85,7 @@
 (<code>Context, int, Cursor, String[], int[]</code>)</A></nobr>&nbsp;constructor<br>
 <nobr><A HREF="android.database.sqlite.SQLiteCursor.html#android.database.sqlite.SQLiteCursor.ctor_changed(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, java.lang.String, android.database.sqlite.SQLiteQuery)" class="hiddenlink" target="rightframe">SQLiteCursor
 (<code>SQLiteDatabase, SQLiteCursorDriver, String, SQLiteQuery</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/11/changes/constructors_index_removals.html
index 1ed8931..a416213 100644
--- a/docs/html/sdk/api_diff/11/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/11/changes/constructors_index_removals.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.graphics.Canvas.html#android.graphics.Canvas.ctor_removed(javax.microedition.khronos.opengles.GL)" class="hiddenlink" target="rightframe"><strike>Canvas</strike>
 (<code>GL</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html b/docs/html/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
index 5bbc2a8..8e0c7db 100644
--- a/docs/html/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
+++ b/docs/html/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
@@ -553,7 +553,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/fields_index_additions.html b/docs/html/sdk/api_diff/11/changes/fields_index_additions.html
index 12ecd4f..dee5f19 100644
--- a/docs/html/sdk/api_diff/11/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/fields_index_additions.html
@@ -1850,7 +1850,7 @@
 </nobr><br>
 <nobr><A HREF="android.R.attr.html#android.R.attr.windowMinWidthMinor" class="hiddenlink" target="rightframe">windowMinWidthMinor</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/fields_index_all.html b/docs/html/sdk/api_diff/11/changes/fields_index_all.html
index 52705a5..2dbe8fa 100644
--- a/docs/html/sdk/api_diff/11/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/fields_index_all.html
@@ -1931,7 +1931,7 @@
 </nobr><br>
 <nobr><A HREF="android.R.attr.html#android.R.attr.windowMinWidthMinor" class="hiddenlink" target="rightframe">windowMinWidthMinor</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/fields_index_changes.html b/docs/html/sdk/api_diff/11/changes/fields_index_changes.html
index 983731c..8b9029e 100644
--- a/docs/html/sdk/api_diff/11/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/11/changes/fields_index_changes.html
@@ -249,7 +249,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.provider.Browser.SearchColumns.html#android.provider.Browser.SearchColumns.URL" class="hiddenlink" target="rightframe">URL</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/fields_index_removals.html b/docs/html/sdk/api_diff/11/changes/fields_index_removals.html
index 9f62d88..9ad97a7 100644
--- a/docs/html/sdk/api_diff/11/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/11/changes/fields_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html b/docs/html/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
index 4ba7af5..f3cdca3 100644
--- a/docs/html/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
+++ b/docs/html/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.lang.Object.html b/docs/html/sdk/api_diff/11/changes/java.lang.Object.html
index c894b07..811f41c 100644
--- a/docs/html/sdk/api_diff/11/changes/java.lang.Object.html
+++ b/docs/html/sdk/api_diff/11/changes/java.lang.Object.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.Deque.html b/docs/html/sdk/api_diff/11/changes/java.util.Deque.html
index 1039093..4d4f058 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.Deque.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.Deque.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.Locale.html b/docs/html/sdk/api_diff/11/changes/java.util.Locale.html
index c27208e..c9b44d8 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.Locale.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.Locale.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.NavigableMap.html b/docs/html/sdk/api_diff/11/changes/java.util.NavigableMap.html
index e611d87..09a645d 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.NavigableMap.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.NavigableMap.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.NavigableSet.html b/docs/html/sdk/api_diff/11/changes/java.util.NavigableSet.html
index 7fbc133..1fee9c9 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.NavigableSet.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.NavigableSet.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.Queue.html b/docs/html/sdk/api_diff/11/changes/java.util.Queue.html
index 0595cfa..66c7473 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.Queue.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.Queue.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html b/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
index a0f3777..f716143 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.html b/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.html
index 3cf915b..4c737ec 100644
--- a/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.html
+++ b/docs/html/sdk/api_diff/11/changes/java.util.ResourceBundle.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/jdiff_help.html b/docs/html/sdk/api_diff/11/changes/jdiff_help.html
index 7658ddf..ab1161e 100644
--- a/docs/html/sdk/api_diff/11/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/11/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/11/changes/jdiff_statistics.html
index 044e5ca..6845789 100644
--- a/docs/html/sdk/api_diff/11/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/11/changes/jdiff_statistics.html
@@ -1312,7 +1312,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/11/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/11/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/11/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/methods_index_additions.html b/docs/html/sdk/api_diff/11/changes/methods_index_additions.html
index b3a67ab..afd0f20 100644
--- a/docs/html/sdk/api_diff/11/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/methods_index_additions.html
@@ -1559,7 +1559,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.content.SyncInfo.html#android.content.SyncInfo.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe"><b>writeToParcel</b>
 (<code>Parcel, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/methods_index_all.html b/docs/html/sdk/api_diff/11/changes/methods_index_all.html
index 2f1d865..f5c9553 100644
--- a/docs/html/sdk/api_diff/11/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/methods_index_all.html
@@ -1946,7 +1946,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.content.SyncInfo.html#android.content.SyncInfo.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe"><b>writeToParcel</b>
 (<code>Parcel, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/methods_index_changes.html b/docs/html/sdk/api_diff/11/changes/methods_index_changes.html
index cce3466..26110f1 100644
--- a/docs/html/sdk/api_diff/11/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/11/changes/methods_index_changes.html
@@ -508,7 +508,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.text.method.ScrollingMovementMethod.html#android.text.method.ScrollingMovementMethod.up_changed(android.widget.TextView, android.text.Spannable)" class="hiddenlink" target="rightframe">up
 (<code>TextView, Spannable</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/methods_index_removals.html b/docs/html/sdk/api_diff/11/changes/methods_index_removals.html
index 3c49e9d..cd01ea2 100644
--- a/docs/html/sdk/api_diff/11/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/11/changes/methods_index_removals.html
@@ -213,7 +213,7 @@
 (<code>int, String</code>)</A></nobr><br>
 <nobr><A HREF="android.test.mock.MockCursor.html#android.test.mock.MockCursor.updateToNull_removed(int)" class="hiddenlink" target="rightframe"><strike>updateToNull</strike>
 (<code>int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/packages_index_additions.html b/docs/html/sdk/api_diff/11/changes/packages_index_additions.html
index c2895f4..b53ae2f 100644
--- a/docs/html/sdk/api_diff/11/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/11/changes/packages_index_additions.html
@@ -53,7 +53,7 @@
 <A HREF="changes-summary.html#android.animation" class="hiddenlink" target="rightframe"><b>android.animation</b></A><br>
 <A HREF="changes-summary.html#android.drm" class="hiddenlink" target="rightframe"><b>android.drm</b></A><br>
 <A HREF="changes-summary.html#android.renderscript" class="hiddenlink" target="rightframe"><b>android.renderscript</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/packages_index_all.html b/docs/html/sdk/api_diff/11/changes/packages_index_all.html
index 40a500f..aefabf5 100644
--- a/docs/html/sdk/api_diff/11/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/11/changes/packages_index_all.html
@@ -93,7 +93,7 @@
 <A NAME="J"></A>
 <A HREF="pkg_java.lang.html" class="hiddenlink" target="rightframe">java.lang</A><br>
 <A HREF="pkg_java.util.html" class="hiddenlink" target="rightframe">java.util</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/packages_index_changes.html b/docs/html/sdk/api_diff/11/changes/packages_index_changes.html
index 7f25b34..1886700 100644
--- a/docs/html/sdk/api_diff/11/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/11/changes/packages_index_changes.html
@@ -90,7 +90,7 @@
 <A NAME="J"></A>
 <A HREF="pkg_java.lang.html" class="hiddenlink" target="rightframe">java.lang</A><br>
 <A HREF="pkg_java.util.html" class="hiddenlink" target="rightframe">java.util</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/packages_index_removals.html b/docs/html/sdk/api_diff/11/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/11/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/11/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.accounts.html b/docs/html/sdk/api_diff/11/changes/pkg_android.accounts.html
index b2a2812..db5d73e 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.accounts.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.accounts.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.app.admin.html b/docs/html/sdk/api_diff/11/changes/pkg_android.app.admin.html
index 54220b1..2c3a53a 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.app.admin.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.app.admin.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.app.html b/docs/html/sdk/api_diff/11/changes/pkg_android.app.html
index da5df6f..6e6baa4 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.app.html
@@ -337,7 +337,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.appwidget.html b/docs/html/sdk/api_diff/11/changes/pkg_android.appwidget.html
index d3df6f3..4126547 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.appwidget.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.appwidget.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/11/changes/pkg_android.bluetooth.html
index 286de69..f6bd745 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.bluetooth.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.bluetooth.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.content.html b/docs/html/sdk/api_diff/11/changes/pkg_android.content.html
index 814b57c..ec81a7e 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.content.html
@@ -281,7 +281,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/11/changes/pkg_android.content.pm.html
index e791cbc..97b7ee3 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.content.pm.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/11/changes/pkg_android.content.res.html
index 1966151..b2ec437 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.content.res.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.database.html b/docs/html/sdk/api_diff/11/changes/pkg_android.database.html
index 94564d3..322ecd5 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.database.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.database.sqlite.html b/docs/html/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
index 7200032..8e5ac7d 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
@@ -211,7 +211,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html b/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
index 18d15cc..cdccd5c 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.html
index 4f1c440..f658272 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.graphics.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/11/changes/pkg_android.hardware.html
index ea84a38..2181e51 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.hardware.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.html b/docs/html/sdk/api_diff/11/changes/pkg_android.html
index 29df82c..b2bad37 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html b/docs/html/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
index d2c4e27..86f1f62 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.media.html b/docs/html/sdk/api_diff/11/changes/pkg_android.media.html
index 2cd99a5..be868da 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.media.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.net.html b/docs/html/sdk/api_diff/11/changes/pkg_android.net.html
index e1e2bf5..5a59bf8 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.net.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/11/changes/pkg_android.opengl.html
index f871db5..a13424a 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.opengl.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.os.html b/docs/html/sdk/api_diff/11/changes/pkg_android.os.html
index eedacd3..938c9d6 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.os.html
@@ -190,7 +190,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.preference.html b/docs/html/sdk/api_diff/11/changes/pkg_android.preference.html
index 35ef0bc..486645e 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.preference.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.preference.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/11/changes/pkg_android.provider.html
index 842355e..ffc1316 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.provider.html
@@ -309,7 +309,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.speech.html b/docs/html/sdk/api_diff/11/changes/pkg_android.speech.html
index e981387..35674b6 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.speech.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.speech.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.speech.tts.html b/docs/html/sdk/api_diff/11/changes/pkg_android.speech.tts.html
index f0bde9f..dd53b0d 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.speech.tts.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.speech.tts.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/11/changes/pkg_android.telephony.html
index 8a2d08b..f518730 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.telephony.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.test.html b/docs/html/sdk/api_diff/11/changes/pkg_android.test.html
index 39db204..981c3d4 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.test.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.test.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/11/changes/pkg_android.test.mock.html
index 45914ea..ff8d72f 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.test.mock.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.text.format.html b/docs/html/sdk/api_diff/11/changes/pkg_android.text.format.html
index cc395ca..ce33162 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.text.format.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.text.format.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.text.html b/docs/html/sdk/api_diff/11/changes/pkg_android.text.html
index 0d47282..d9d677f 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.text.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.text.method.html b/docs/html/sdk/api_diff/11/changes/pkg_android.text.method.html
index eefed4b..d9b2fb1 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.text.method.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.text.method.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.util.html b/docs/html/sdk/api_diff/11/changes/pkg_android.util.html
index b6444ba..8528587 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.util.html
@@ -176,7 +176,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.view.animation.html b/docs/html/sdk/api_diff/11/changes/pkg_android.view.animation.html
index 3fd23d1..23347ae 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.view.animation.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.view.animation.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.view.html b/docs/html/sdk/api_diff/11/changes/pkg_android.view.html
index 2ec022d..50fec3a 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.view.html
@@ -274,7 +274,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html b/docs/html/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
index d7f85e0..32f4b4a 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
@@ -169,7 +169,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/11/changes/pkg_android.webkit.html
index 0fd65d3..ecbeb91 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.webkit.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/11/changes/pkg_android.widget.html
index 64f2bc2..4a33383 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_android.widget.html
@@ -372,7 +372,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html b/docs/html/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
index 6479d33..5b19312 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_java.lang.html b/docs/html/sdk/api_diff/11/changes/pkg_java.lang.html
index 9415d76..01c0b6f 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_java.lang.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_java.lang.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/11/changes/pkg_java.util.html b/docs/html/sdk/api_diff/11/changes/pkg_java.util.html
index 461d0ac..2fa3490 100644
--- a/docs/html/sdk/api_diff/11/changes/pkg_java.util.html
+++ b/docs/html/sdk/api_diff/11/changes/pkg_java.util.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/12/changes/alldiffs_index_additions.html
index 8a42a73..2275b3a 100644
--- a/docs/html/sdk/api_diff/12/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/12/changes/alldiffs_index_additions.html
@@ -1045,7 +1045,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.net.wifi.WifiManager.html#android.net.wifi.WifiManager.WIFI_MODE_FULL_HIGH_PERF" class="hiddenlink" target="rightframe">WIFI_MODE_FULL_HIGH_PERF</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/12/changes/alldiffs_index_all.html
index 44f1fea..76280b8 100644
--- a/docs/html/sdk/api_diff/12/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/12/changes/alldiffs_index_all.html
@@ -1438,7 +1438,7 @@
 <!-- Constructor Xml -->
 &nbsp;&nbsp;<nobr><A HREF="android.util.Xml.html#android.util.Xml.ctor_removed()" class="hiddenlink" target="rightframe"><strike>Xml</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/12/changes/alldiffs_index_changes.html
index 2b2071c..b3e5bb6 100644
--- a/docs/html/sdk/api_diff/12/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/12/changes/alldiffs_index_changes.html
@@ -724,7 +724,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.util.Xml.html" class="hiddenlink" target="rightframe">Xml</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/12/changes/alldiffs_index_removals.html
index 523c2d7..f329cb3 100644
--- a/docs/html/sdk/api_diff/12/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/12/changes/alldiffs_index_removals.html
@@ -213,7 +213,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.util.Xml.html#android.util.Xml.ctor_removed()" class="hiddenlink" target="rightframe"><strike>Xml</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.R.attr.html b/docs/html/sdk/api_diff/12/changes/android.R.attr.html
index 39a97e7..80ee6da 100644
--- a/docs/html/sdk/api_diff/12/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/12/changes/android.R.attr.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.animation.ValueAnimator.html b/docs/html/sdk/api_diff/12/changes/android.animation.ValueAnimator.html
index 08de135..64e6398 100644
--- a/docs/html/sdk/api_diff/12/changes/android.animation.ValueAnimator.html
+++ b/docs/html/sdk/api_diff/12/changes/android.animation.ValueAnimator.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.Activity.html b/docs/html/sdk/api_diff/12/changes/android.app.Activity.html
index e54e4fa..041ec9b 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.Activity.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.ActivityManager.RecentTaskInfo.html b/docs/html/sdk/api_diff/12/changes/android.app.ActivityManager.RecentTaskInfo.html
index 3147260..f6f5ffc 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.ActivityManager.RecentTaskInfo.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.ActivityManager.RecentTaskInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.ActivityManager.html b/docs/html/sdk/api_diff/12/changes/android.app.ActivityManager.html
index 8a2524e..716c293 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.ActivityManager.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.ActivityManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.Dialog.html b/docs/html/sdk/api_diff/12/changes/android.app.Dialog.html
index 4e7b5ac..7ce77b4 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.Dialog.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.Dialog.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.DialogFragment.html b/docs/html/sdk/api_diff/12/changes/android.app.DialogFragment.html
index b4ef57b..9667166 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.DialogFragment.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.DialogFragment.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.DownloadManager.Request.html b/docs/html/sdk/api_diff/12/changes/android.app.DownloadManager.Request.html
index f6d69ea..8f6b32c 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.DownloadManager.Request.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.DownloadManager.Request.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.DownloadManager.html b/docs/html/sdk/api_diff/12/changes/android.app.DownloadManager.html
index b1c9b89..b8de143 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.DownloadManager.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.DownloadManager.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.Fragment.html b/docs/html/sdk/api_diff/12/changes/android.app.Fragment.html
index e755e9d..536b31e 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.Fragment.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.Fragment.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.FragmentBreadCrumbs.html b/docs/html/sdk/api_diff/12/changes/android.app.FragmentBreadCrumbs.html
index 0dae434..7d02b68 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.FragmentBreadCrumbs.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.FragmentBreadCrumbs.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/12/changes/android.app.SearchManager.html
index 6d32fcb..a5d4c5c 100644
--- a/docs/html/sdk/api_diff/12/changes/android.app.SearchManager.html
+++ b/docs/html/sdk/api_diff/12/changes/android.app.SearchManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.appwidget.AppWidgetProviderInfo.html b/docs/html/sdk/api_diff/12/changes/android.appwidget.AppWidgetProviderInfo.html
index eb07789..67e0a51 100644
--- a/docs/html/sdk/api_diff/12/changes/android.appwidget.AppWidgetProviderInfo.html
+++ b/docs/html/sdk/api_diff/12/changes/android.appwidget.AppWidgetProviderInfo.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.content.Context.html b/docs/html/sdk/api_diff/12/changes/android.content.Context.html
index db7200e..8889c38 100644
--- a/docs/html/sdk/api_diff/12/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/12/changes/android.content.Context.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.content.Intent.html b/docs/html/sdk/api_diff/12/changes/android.content.Intent.html
index 8ddacd0..447a00e 100644
--- a/docs/html/sdk/api_diff/12/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/12/changes/android.content.Intent.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/12/changes/android.content.pm.ApplicationInfo.html
index b13a772..abba279 100644
--- a/docs/html/sdk/api_diff/12/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/12/changes/android.content.pm.ApplicationInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/12/changes/android.content.pm.PackageManager.html
index 266bbe9..4bdd236 100644
--- a/docs/html/sdk/api_diff/12/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/12/changes/android.content.pm.PackageManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.drm.DrmErrorEvent.html b/docs/html/sdk/api_diff/12/changes/android.drm.DrmErrorEvent.html
index 0d1c8c2..4b5f447 100644
--- a/docs/html/sdk/api_diff/12/changes/android.drm.DrmErrorEvent.html
+++ b/docs/html/sdk/api_diff/12/changes/android.drm.DrmErrorEvent.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.drm.DrmEvent.html b/docs/html/sdk/api_diff/12/changes/android.drm.DrmEvent.html
index b4853a9..28ebcb3 100644
--- a/docs/html/sdk/api_diff/12/changes/android.drm.DrmEvent.html
+++ b/docs/html/sdk/api_diff/12/changes/android.drm.DrmEvent.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.drm.DrmInfoEvent.html b/docs/html/sdk/api_diff/12/changes/android.drm.DrmInfoEvent.html
index 7c66004..3ca0682 100644
--- a/docs/html/sdk/api_diff/12/changes/android.drm.DrmInfoEvent.html
+++ b/docs/html/sdk/api_diff/12/changes/android.drm.DrmInfoEvent.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.drm.DrmManagerClient.OnEventListener.html b/docs/html/sdk/api_diff/12/changes/android.drm.DrmManagerClient.OnEventListener.html
index da96fa8..7052ba8 100644
--- a/docs/html/sdk/api_diff/12/changes/android.drm.DrmManagerClient.OnEventListener.html
+++ b/docs/html/sdk/api_diff/12/changes/android.drm.DrmManagerClient.OnEventListener.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.graphics.Bitmap.html b/docs/html/sdk/api_diff/12/changes/android.graphics.Bitmap.html
index 859f2ca..424fa0b 100644
--- a/docs/html/sdk/api_diff/12/changes/android.graphics.Bitmap.html
+++ b/docs/html/sdk/api_diff/12/changes/android.graphics.Bitmap.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.graphics.Camera.html b/docs/html/sdk/api_diff/12/changes/android.graphics.Camera.html
index 6da960b..909a2d3 100644
--- a/docs/html/sdk/api_diff/12/changes/android.graphics.Camera.html
+++ b/docs/html/sdk/api_diff/12/changes/android.graphics.Camera.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/12/changes/android.hardware.Camera.html
index 5ef43aa..085f709 100644
--- a/docs/html/sdk/api_diff/12/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/12/changes/android.hardware.Camera.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.net.TrafficStats.html b/docs/html/sdk/api_diff/12/changes/android.net.TrafficStats.html
index 9657080..11b3300 100644
--- a/docs/html/sdk/api_diff/12/changes/android.net.TrafficStats.html
+++ b/docs/html/sdk/api_diff/12/changes/android.net.TrafficStats.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.net.http.SslCertificate.html b/docs/html/sdk/api_diff/12/changes/android.net.http.SslCertificate.html
index e23ac71..64cd7d9 100644
--- a/docs/html/sdk/api_diff/12/changes/android.net.http.SslCertificate.html
+++ b/docs/html/sdk/api_diff/12/changes/android.net.http.SslCertificate.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.net.sip.SipProfile.Builder.html b/docs/html/sdk/api_diff/12/changes/android.net.sip.SipProfile.Builder.html
index 92dfe6a..27fd1c6 100644
--- a/docs/html/sdk/api_diff/12/changes/android.net.sip.SipProfile.Builder.html
+++ b/docs/html/sdk/api_diff/12/changes/android.net.sip.SipProfile.Builder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.net.sip.SipProfile.html b/docs/html/sdk/api_diff/12/changes/android.net.sip.SipProfile.html
index 0c925bc..0cfb94d 100644
--- a/docs/html/sdk/api_diff/12/changes/android.net.sip.SipProfile.html
+++ b/docs/html/sdk/api_diff/12/changes/android.net.sip.SipProfile.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.net.wifi.WifiManager.html b/docs/html/sdk/api_diff/12/changes/android.net.wifi.WifiManager.html
index a4b77ab..2b2bf48 100644
--- a/docs/html/sdk/api_diff/12/changes/android.net.wifi.WifiManager.html
+++ b/docs/html/sdk/api_diff/12/changes/android.net.wifi.WifiManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/12/changes/android.os.Build.VERSION_CODES.html
index a7bc50d..db11af1 100644
--- a/docs/html/sdk/api_diff/12/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/12/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.os.Bundle.html b/docs/html/sdk/api_diff/12/changes/android.os.Bundle.html
index 735e9c9..05f1c4c 100644
--- a/docs/html/sdk/api_diff/12/changes/android.os.Bundle.html
+++ b/docs/html/sdk/api_diff/12/changes/android.os.Bundle.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.os.ParcelFileDescriptor.html b/docs/html/sdk/api_diff/12/changes/android.os.ParcelFileDescriptor.html
index f586277..aad517f 100644
--- a/docs/html/sdk/api_diff/12/changes/android.os.ParcelFileDescriptor.html
+++ b/docs/html/sdk/api_diff/12/changes/android.os.ParcelFileDescriptor.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.provider.Browser.html b/docs/html/sdk/api_diff/12/changes/android.provider.Browser.html
index 126d022..3a66c2b 100644
--- a/docs/html/sdk/api_diff/12/changes/android.provider.Browser.html
+++ b/docs/html/sdk/api_diff/12/changes/android.provider.Browser.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.provider.MediaStore.html b/docs/html/sdk/api_diff/12/changes/android.provider.MediaStore.html
index 3e57afc..95ae962 100644
--- a/docs/html/sdk/api_diff/12/changes/android.provider.MediaStore.html
+++ b/docs/html/sdk/api_diff/12/changes/android.provider.MediaStore.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.text.SpannableStringBuilder.html b/docs/html/sdk/api_diff/12/changes/android.text.SpannableStringBuilder.html
index a27a56c..2c03c3d 100644
--- a/docs/html/sdk/api_diff/12/changes/android.text.SpannableStringBuilder.html
+++ b/docs/html/sdk/api_diff/12/changes/android.text.SpannableStringBuilder.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.text.format.Formatter.html b/docs/html/sdk/api_diff/12/changes/android.text.format.Formatter.html
index 6b10501..07591d3 100644
--- a/docs/html/sdk/api_diff/12/changes/android.text.format.Formatter.html
+++ b/docs/html/sdk/api_diff/12/changes/android.text.format.Formatter.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.text.method.BaseMovementMethod.html b/docs/html/sdk/api_diff/12/changes/android.text.method.BaseMovementMethod.html
index a81b1f2..79fcf04 100644
--- a/docs/html/sdk/api_diff/12/changes/android.text.method.BaseMovementMethod.html
+++ b/docs/html/sdk/api_diff/12/changes/android.text.method.BaseMovementMethod.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.text.method.MovementMethod.html b/docs/html/sdk/api_diff/12/changes/android.text.method.MovementMethod.html
index 79d5f25..caf8603 100644
--- a/docs/html/sdk/api_diff/12/changes/android.text.method.MovementMethod.html
+++ b/docs/html/sdk/api_diff/12/changes/android.text.method.MovementMethod.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.util.Config.html b/docs/html/sdk/api_diff/12/changes/android.util.Config.html
index a53384b..f351b9c 100644
--- a/docs/html/sdk/api_diff/12/changes/android.util.Config.html
+++ b/docs/html/sdk/api_diff/12/changes/android.util.Config.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.util.DebugUtils.html b/docs/html/sdk/api_diff/12/changes/android.util.DebugUtils.html
index dcd55fb..0643056 100644
--- a/docs/html/sdk/api_diff/12/changes/android.util.DebugUtils.html
+++ b/docs/html/sdk/api_diff/12/changes/android.util.DebugUtils.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.util.EventLog.html b/docs/html/sdk/api_diff/12/changes/android.util.EventLog.html
index 19f8788..d4dd9bd 100644
--- a/docs/html/sdk/api_diff/12/changes/android.util.EventLog.html
+++ b/docs/html/sdk/api_diff/12/changes/android.util.EventLog.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.util.StateSet.html b/docs/html/sdk/api_diff/12/changes/android.util.StateSet.html
index e300775..5498221 100644
--- a/docs/html/sdk/api_diff/12/changes/android.util.StateSet.html
+++ b/docs/html/sdk/api_diff/12/changes/android.util.StateSet.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.util.TimeUtils.html b/docs/html/sdk/api_diff/12/changes/android.util.TimeUtils.html
index 0aaf9de..d9ac77b 100644
--- a/docs/html/sdk/api_diff/12/changes/android.util.TimeUtils.html
+++ b/docs/html/sdk/api_diff/12/changes/android.util.TimeUtils.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.util.Xml.html b/docs/html/sdk/api_diff/12/changes/android.util.Xml.html
index f75d80c..ee485f7 100644
--- a/docs/html/sdk/api_diff/12/changes/android.util.Xml.html
+++ b/docs/html/sdk/api_diff/12/changes/android.util.Xml.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.InputDevice.MotionRange.html b/docs/html/sdk/api_diff/12/changes/android.view.InputDevice.MotionRange.html
index 74e9175..e0f8fad 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.InputDevice.MotionRange.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.InputDevice.MotionRange.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.InputDevice.html b/docs/html/sdk/api_diff/12/changes/android.view.InputDevice.html
index 8eb21b5..5c0e0df 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.InputDevice.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.InputDevice.html
@@ -233,7 +233,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.InputEvent.html b/docs/html/sdk/api_diff/12/changes/android.view.InputEvent.html
index 2d8acfa..ef069ae 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.InputEvent.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.InputEvent.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/12/changes/android.view.KeyEvent.html
index 08af8ee..28a0f06 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.KeyEvent.html
@@ -277,7 +277,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.MotionEvent.PointerCoords.html b/docs/html/sdk/api_diff/12/changes/android.view.MotionEvent.PointerCoords.html
index 57c7f08..5a361eb 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.MotionEvent.PointerCoords.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.MotionEvent.PointerCoords.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/12/changes/android.view.MotionEvent.html
index bc2361d..80a1140 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.MotionEvent.html
@@ -480,7 +480,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.View.html b/docs/html/sdk/api_diff/12/changes/android.view.View.html
index ec431b3..5f788c7 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.View.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/12/changes/android.view.ViewConfiguration.html
index 563b50c..d1bfa7d 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.ViewConfiguration.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.ViewConfiguration.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.Window.Callback.html b/docs/html/sdk/api_diff/12/changes/android.view.Window.Callback.html
index 1eed99b..ee7914f 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.Window.Callback.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.Window.Callback.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.Window.html b/docs/html/sdk/api_diff/12/changes/android.view.Window.html
index 83c3c63..06d8681 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.Window.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.Window.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.animation.Animation.html b/docs/html/sdk/api_diff/12/changes/android.view.animation.Animation.html
index 22d22ec..f619f58 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.animation.Animation.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.animation.Animation.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.view.inputmethod.InputMethodSubtype.html b/docs/html/sdk/api_diff/12/changes/android.view.inputmethod.InputMethodSubtype.html
index 83aaf96..d660fc0 100644
--- a/docs/html/sdk/api_diff/12/changes/android.view.inputmethod.InputMethodSubtype.html
+++ b/docs/html/sdk/api_diff/12/changes/android.view.inputmethod.InputMethodSubtype.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.webkit.CookieManager.html b/docs/html/sdk/api_diff/12/changes/android.webkit.CookieManager.html
index 8bb1295..2c43c48 100644
--- a/docs/html/sdk/api_diff/12/changes/android.webkit.CookieManager.html
+++ b/docs/html/sdk/api_diff/12/changes/android.webkit.CookieManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.webkit.WebHistoryItem.html b/docs/html/sdk/api_diff/12/changes/android.webkit.WebHistoryItem.html
index 0922f6c..dd98d1d 100644
--- a/docs/html/sdk/api_diff/12/changes/android.webkit.WebHistoryItem.html
+++ b/docs/html/sdk/api_diff/12/changes/android.webkit.WebHistoryItem.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.webkit.WebSettings.LayoutAlgorithm.html b/docs/html/sdk/api_diff/12/changes/android.webkit.WebSettings.LayoutAlgorithm.html
index 2455db2..c9277ff3 100644
--- a/docs/html/sdk/api_diff/12/changes/android.webkit.WebSettings.LayoutAlgorithm.html
+++ b/docs/html/sdk/api_diff/12/changes/android.webkit.WebSettings.LayoutAlgorithm.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/12/changes/android.webkit.WebSettings.html
index ffba4ed..6fe2056 100644
--- a/docs/html/sdk/api_diff/12/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/12/changes/android.webkit.WebSettings.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.webkit.WebView.PictureListener.html b/docs/html/sdk/api_diff/12/changes/android.webkit.WebView.PictureListener.html
index c2e18d6..ed53021 100644
--- a/docs/html/sdk/api_diff/12/changes/android.webkit.WebView.PictureListener.html
+++ b/docs/html/sdk/api_diff/12/changes/android.webkit.WebView.PictureListener.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/12/changes/android.webkit.WebView.html
index 57d88a46..d47df22 100644
--- a/docs/html/sdk/api_diff/12/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/12/changes/android.webkit.WebView.html
@@ -203,7 +203,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.webkit.WebViewClient.html b/docs/html/sdk/api_diff/12/changes/android.webkit.WebViewClient.html
index adf065c..774d19d 100644
--- a/docs/html/sdk/api_diff/12/changes/android.webkit.WebViewClient.html
+++ b/docs/html/sdk/api_diff/12/changes/android.webkit.WebViewClient.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.widget.DatePicker.html b/docs/html/sdk/api_diff/12/changes/android.widget.DatePicker.html
index cade8b2..82ab809 100644
--- a/docs/html/sdk/api_diff/12/changes/android.widget.DatePicker.html
+++ b/docs/html/sdk/api_diff/12/changes/android.widget.DatePicker.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/12/changes/android.widget.RemoteViews.html
index 2205e10..1df3ce0 100644
--- a/docs/html/sdk/api_diff/12/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/12/changes/android.widget.RemoteViews.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/changes-summary.html b/docs/html/sdk/api_diff/12/changes/changes-summary.html
index e069d3d..1be9ad5 100644
--- a/docs/html/sdk/api_diff/12/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/12/changes/changes-summary.html
@@ -311,7 +311,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/classes_index_additions.html b/docs/html/sdk/api_diff/12/changes/classes_index_additions.html
index 411e35c..c6658c1 100644
--- a/docs/html/sdk/api_diff/12/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/12/changes/classes_index_additions.html
@@ -70,7 +70,7 @@
 <A HREF="pkg_android.view.html#View.OnAttachStateChangeListener" class="hiddenlink" target="rightframe"><b><i>View.OnAttachStateChangeListener</i></b></A><br>
 <A HREF="pkg_android.view.html#View.OnGenericMotionListener" class="hiddenlink" target="rightframe"><b><i>View.OnGenericMotionListener</i></b></A><br>
 <A HREF="pkg_android.view.html#ViewPropertyAnimator" class="hiddenlink" target="rightframe"><b>ViewPropertyAnimator</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/classes_index_all.html b/docs/html/sdk/api_diff/12/changes/classes_index_all.html
index b8f786c..cc1c965 100644
--- a/docs/html/sdk/api_diff/12/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/12/changes/classes_index_all.html
@@ -502,7 +502,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.util.Xml.html" class="hiddenlink" target="rightframe">Xml</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/classes_index_changes.html b/docs/html/sdk/api_diff/12/changes/classes_index_changes.html
index dc2f8b7..1c7b450 100644
--- a/docs/html/sdk/api_diff/12/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/12/changes/classes_index_changes.html
@@ -417,7 +417,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.util.Xml.html" class="hiddenlink" target="rightframe">Xml</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/classes_index_removals.html b/docs/html/sdk/api_diff/12/changes/classes_index_removals.html
index f7fdef7..1267469 100644
--- a/docs/html/sdk/api_diff/12/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/12/changes/classes_index_removals.html
@@ -63,7 +63,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.webkit.html#UrlInterceptHandler" class="hiddenlink" target="rightframe"><strike>UrlInterceptHandler</strike></A><br>
 <A HREF="pkg_android.webkit.html#UrlInterceptRegistry" class="hiddenlink" target="rightframe"><strike>UrlInterceptRegistry</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/12/changes/constructors_index_additions.html
index 7aeb135..6f115f2 100644
--- a/docs/html/sdk/api_diff/12/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/12/changes/constructors_index_additions.html
@@ -65,7 +65,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.MotionEvent.PointerCoords.html#android.view.MotionEvent.PointerCoords.ctor_added(android.view.MotionEvent.PointerCoords)" class="hiddenlink" target="rightframe"><b>MotionEvent.PointerCoords</b>
 (<code>PointerCoords</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/constructors_index_all.html b/docs/html/sdk/api_diff/12/changes/constructors_index_all.html
index faf1a77..e2af2fb 100644
--- a/docs/html/sdk/api_diff/12/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/12/changes/constructors_index_all.html
@@ -139,7 +139,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.util.Xml.html#android.util.Xml.ctor_removed()" class="hiddenlink" target="rightframe"><strike>Xml</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/12/changes/constructors_index_changes.html
index 32b2e86..b551c6a 100644
--- a/docs/html/sdk/api_diff/12/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/12/changes/constructors_index_changes.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.net.http.SslCertificate.html#android.net.http.SslCertificate.ctor_changed(java.lang.String, java.lang.String, java.util.Date, java.util.Date)" class="hiddenlink" target="rightframe">SslCertificate
 (<code>String, String, Date, Date</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/12/changes/constructors_index_removals.html
index a0c654a..9601953 100644
--- a/docs/html/sdk/api_diff/12/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/12/changes/constructors_index_removals.html
@@ -113,7 +113,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.util.Xml.html#android.util.Xml.ctor_removed()" class="hiddenlink" target="rightframe"><strike>Xml</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/fields_index_additions.html b/docs/html/sdk/api_diff/12/changes/fields_index_additions.html
index c07e6ee..8ac825e 100644
--- a/docs/html/sdk/api_diff/12/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/12/changes/fields_index_additions.html
@@ -494,7 +494,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.net.wifi.WifiManager.html#android.net.wifi.WifiManager.WIFI_MODE_FULL_HIGH_PERF" class="hiddenlink" target="rightframe">WIFI_MODE_FULL_HIGH_PERF</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/fields_index_all.html b/docs/html/sdk/api_diff/12/changes/fields_index_all.html
index 33d3e51..b5ea4d6 100644
--- a/docs/html/sdk/api_diff/12/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/12/changes/fields_index_all.html
@@ -512,7 +512,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.net.wifi.WifiManager.html#android.net.wifi.WifiManager.WIFI_MODE_FULL_HIGH_PERF" class="hiddenlink" target="rightframe">WIFI_MODE_FULL_HIGH_PERF</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/fields_index_changes.html b/docs/html/sdk/api_diff/12/changes/fields_index_changes.html
index 17ebf22..5458676f 100644
--- a/docs/html/sdk/api_diff/12/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/12/changes/fields_index_changes.html
@@ -69,7 +69,7 @@
 </nobr><br>
 <nobr><A HREF="android.view.InputDevice.html#android.view.InputDevice.MOTION_RANGE_Y" class="hiddenlink" target="rightframe">MOTION_RANGE_Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/fields_index_removals.html b/docs/html/sdk/api_diff/12/changes/fields_index_removals.html
index 9f62d88..9ad97a7 100644
--- a/docs/html/sdk/api_diff/12/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/12/changes/fields_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/jdiff_help.html b/docs/html/sdk/api_diff/12/changes/jdiff_help.html
index 5f2ba49..df0fd345 100644
--- a/docs/html/sdk/api_diff/12/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/12/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/12/changes/jdiff_statistics.html
index a2316d6..be609f2 100644
--- a/docs/html/sdk/api_diff/12/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/12/changes/jdiff_statistics.html
@@ -601,7 +601,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/12/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/12/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/12/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/methods_index_additions.html b/docs/html/sdk/api_diff/12/changes/methods_index_additions.html
index fb6eabc..d2e8d40 100644
--- a/docs/html/sdk/api_diff/12/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/12/changes/methods_index_additions.html
@@ -348,7 +348,7 @@
 </A></nobr><br>
 <nobr><A HREF="android.view.Window.html#android.view.Window.superDispatchGenericMotionEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>superDispatchGenericMotionEvent</b>
 (<code>MotionEvent</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/methods_index_all.html b/docs/html/sdk/api_diff/12/changes/methods_index_all.html
index 12abe16..3a32707 100644
--- a/docs/html/sdk/api_diff/12/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/12/changes/methods_index_all.html
@@ -468,7 +468,7 @@
 (<code>boolean</code>)</A></nobr><br>
 <nobr><A HREF="android.view.Window.html#android.view.Window.superDispatchGenericMotionEvent_added(android.view.MotionEvent)" class="hiddenlink" target="rightframe"><b>superDispatchGenericMotionEvent</b>
 (<code>MotionEvent</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/methods_index_changes.html b/docs/html/sdk/api_diff/12/changes/methods_index_changes.html
index cd4a985..be2471c 100644
--- a/docs/html/sdk/api_diff/12/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/12/changes/methods_index_changes.html
@@ -179,7 +179,7 @@
 (<code>SurfaceTexture</code>)</A></nobr><br>
 <nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setUseWebViewBackgroundForOverscrollBackground_changed(boolean)" class="hiddenlink" target="rightframe">setUseWebViewBackgroundForOverscrollBackground
 (<code>boolean</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/methods_index_removals.html b/docs/html/sdk/api_diff/12/changes/methods_index_removals.html
index 9e06e4e..7b28536 100644
--- a/docs/html/sdk/api_diff/12/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/12/changes/methods_index_removals.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.refreshPlugins_removed(boolean)" class="hiddenlink" target="rightframe"><strike>refreshPlugins</strike>
 (<code>boolean</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/packages_index_additions.html b/docs/html/sdk/api_diff/12/changes/packages_index_additions.html
index df7ecb8..404adf0 100644
--- a/docs/html/sdk/api_diff/12/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/12/changes/packages_index_additions.html
@@ -53,7 +53,7 @@
 <A HREF="changes-summary.html#android.hardware.usb" class="hiddenlink" target="rightframe"><b>android.hardware.usb</b></A><br>
 <A HREF="changes-summary.html#android.mtp" class="hiddenlink" target="rightframe"><b>android.mtp</b></A><br>
 <A HREF="changes-summary.html#android.net.rtp" class="hiddenlink" target="rightframe"><b>android.net.rtp</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/packages_index_all.html b/docs/html/sdk/api_diff/12/changes/packages_index_all.html
index 7217c91..7c2a17c 100644
--- a/docs/html/sdk/api_diff/12/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/12/changes/packages_index_all.html
@@ -77,7 +77,7 @@
 <A HREF="pkg_android.view.inputmethod.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
 <A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/packages_index_changes.html b/docs/html/sdk/api_diff/12/changes/packages_index_changes.html
index 4cc5937..7282329 100644
--- a/docs/html/sdk/api_diff/12/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/12/changes/packages_index_changes.html
@@ -74,7 +74,7 @@
 <A HREF="pkg_android.view.inputmethod.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
 <A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/packages_index_removals.html b/docs/html/sdk/api_diff/12/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/12/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/12/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.animation.html b/docs/html/sdk/api_diff/12/changes/pkg_android.animation.html
index 6ee186e..cb24298 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.animation.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.animation.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.app.html b/docs/html/sdk/api_diff/12/changes/pkg_android.app.html
index 8f26f8b..192b13e 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.app.html
@@ -183,7 +183,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.appwidget.html b/docs/html/sdk/api_diff/12/changes/pkg_android.appwidget.html
index 694c4fe..9003eb0 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.appwidget.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.appwidget.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.content.html b/docs/html/sdk/api_diff/12/changes/pkg_android.content.html
index 82929b9..11a481e 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.content.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/12/changes/pkg_android.content.pm.html
index 1244d6b..8c3f540 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.content.pm.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.drm.html b/docs/html/sdk/api_diff/12/changes/pkg_android.drm.html
index 4a32cb9..36731f7 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.drm.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.drm.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/12/changes/pkg_android.graphics.html
index 5ab5d6a..bac0020 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.graphics.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/12/changes/pkg_android.hardware.html
index 675536d..824e1ed 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.hardware.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.html b/docs/html/sdk/api_diff/12/changes/pkg_android.html
index e8a0da1..09984dd 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.net.html b/docs/html/sdk/api_diff/12/changes/pkg_android.net.html
index 64e318a..4efcfae 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.net.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.net.http.html b/docs/html/sdk/api_diff/12/changes/pkg_android.net.http.html
index a83d19b..13b6d0f 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.net.http.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.net.http.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.net.sip.html b/docs/html/sdk/api_diff/12/changes/pkg_android.net.sip.html
index 705ce02..23b7146 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.net.sip.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.net.sip.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.net.wifi.html b/docs/html/sdk/api_diff/12/changes/pkg_android.net.wifi.html
index 85324c9..a4d7d57 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.net.wifi.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.net.wifi.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.os.html b/docs/html/sdk/api_diff/12/changes/pkg_android.os.html
index 2eb0b38..ea1df92 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.os.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/12/changes/pkg_android.provider.html
index 5af8685..f7d34e8 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.provider.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.text.format.html b/docs/html/sdk/api_diff/12/changes/pkg_android.text.format.html
index 4400d93..a445811 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.text.format.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.text.format.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.text.html b/docs/html/sdk/api_diff/12/changes/pkg_android.text.html
index 092adb7..fd6df26 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.text.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.text.method.html b/docs/html/sdk/api_diff/12/changes/pkg_android.text.method.html
index 653724c..ebb8113 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.text.method.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.text.method.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.util.html b/docs/html/sdk/api_diff/12/changes/pkg_android.util.html
index c56e084..5fc241d 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.util.html
@@ -155,7 +155,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.view.animation.html b/docs/html/sdk/api_diff/12/changes/pkg_android.view.animation.html
index c5955727..3e2ba7e 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.view.animation.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.view.animation.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.view.html b/docs/html/sdk/api_diff/12/changes/pkg_android.view.html
index 74cc844..ad77db0 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.view.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.view.inputmethod.html b/docs/html/sdk/api_diff/12/changes/pkg_android.view.inputmethod.html
index 75feb6f..3cef34c 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.view.inputmethod.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.view.inputmethod.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/12/changes/pkg_android.webkit.html
index 20d08df..52356ad 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.webkit.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/12/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/12/changes/pkg_android.widget.html
index 641956e..195ff3d 100644
--- a/docs/html/sdk/api_diff/12/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/12/changes/pkg_android.widget.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/13/changes/alldiffs_index_additions.html
index 1d53429..7473a7c 100644
--- a/docs/html/sdk/api_diff/13/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/13/changes/alldiffs_index_additions.html
@@ -649,7 +649,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.graphics.PointF.html#android.graphics.PointF.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe">type&nbsp;<b>
 (<code>Parcel, int</code>)</b>&nbsp;in&nbsp;android.graphics.PointF
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/13/changes/alldiffs_index_all.html
index a4e428e..1357c67 100644
--- a/docs/html/sdk/api_diff/13/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/13/changes/alldiffs_index_all.html
@@ -927,7 +927,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.graphics.PointF.html#android.graphics.PointF.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe">type&nbsp;<b>
 (<code>Parcel, int</code>)</b>&nbsp;in&nbsp;android.graphics.PointF
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/13/changes/alldiffs_index_changes.html
index 59e766b..b870d5d 100644
--- a/docs/html/sdk/api_diff/13/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/13/changes/alldiffs_index_changes.html
@@ -547,7 +547,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.hardware.usb.UsbDeviceConnection.html" class="hiddenlink" target="rightframe">UsbDeviceConnection</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/13/changes/alldiffs_index_removals.html
index 68d2c20..48c9fcd 100644
--- a/docs/html/sdk/api_diff/13/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/13/changes/alldiffs_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/13/changes/android.Manifest.permission.html
index 5d3cbda..8e18fba 100644
--- a/docs/html/sdk/api_diff/13/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/13/changes/android.Manifest.permission.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.R.attr.html b/docs/html/sdk/api_diff/13/changes/android.R.attr.html
index f8eb54b..af71817 100644
--- a/docs/html/sdk/api_diff/13/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/13/changes/android.R.attr.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.R.style.html b/docs/html/sdk/api_diff/13/changes/android.R.style.html
index 9e385e2..3fc5834 100644
--- a/docs/html/sdk/api_diff/13/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/13/changes/android.R.style.html
@@ -381,7 +381,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.Activity.html b/docs/html/sdk/api_diff/13/changes/android.app.Activity.html
index b27816b..e9f4d79 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.Activity.html
@@ -181,7 +181,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.ActivityGroup.html b/docs/html/sdk/api_diff/13/changes/android.app.ActivityGroup.html
index c755228..ec85f51 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.ActivityGroup.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.ActivityGroup.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.Fragment.html b/docs/html/sdk/api_diff/13/changes/android.app.Fragment.html
index 074d4b3..be0d0c2 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.Fragment.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.Fragment.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.FragmentManager.html b/docs/html/sdk/api_diff/13/changes/android.app.FragmentManager.html
index 159b9c9..f12d9f4 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.FragmentManager.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.FragmentManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.FragmentTransaction.html b/docs/html/sdk/api_diff/13/changes/android.app.FragmentTransaction.html
index dbb7deb..74b8a7c 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.FragmentTransaction.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.FragmentTransaction.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.KeyguardManager.KeyguardLock.html b/docs/html/sdk/api_diff/13/changes/android.app.KeyguardManager.KeyguardLock.html
index 3ae02ea..403f495 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.KeyguardManager.KeyguardLock.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.KeyguardManager.KeyguardLock.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.KeyguardManager.html b/docs/html/sdk/api_diff/13/changes/android.app.KeyguardManager.html
index bc38771..582e1b7 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.KeyguardManager.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.KeyguardManager.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.LocalActivityManager.html b/docs/html/sdk/api_diff/13/changes/android.app.LocalActivityManager.html
index 4ea0848..bf65ba6 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.LocalActivityManager.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.LocalActivityManager.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.app.TabActivity.html b/docs/html/sdk/api_diff/13/changes/android.app.TabActivity.html
index 405f7d8..4bb2fc0 100644
--- a/docs/html/sdk/api_diff/13/changes/android.app.TabActivity.html
+++ b/docs/html/sdk/api_diff/13/changes/android.app.TabActivity.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/13/changes/android.content.pm.ActivityInfo.html
index 70149a3..35bf527 100644
--- a/docs/html/sdk/api_diff/13/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/13/changes/android.content.pm.ActivityInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/13/changes/android.content.pm.ApplicationInfo.html
index 4aef492..8f1bf7f 100644
--- a/docs/html/sdk/api_diff/13/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/13/changes/android.content.pm.ApplicationInfo.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/13/changes/android.content.pm.PackageManager.html
index ca75d7a..9fa3537 100644
--- a/docs/html/sdk/api_diff/13/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/13/changes/android.content.pm.PackageManager.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/13/changes/android.content.res.Configuration.html
index 110a142..44b5306 100644
--- a/docs/html/sdk/api_diff/13/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/13/changes/android.content.res.Configuration.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.graphics.Point.html b/docs/html/sdk/api_diff/13/changes/android.graphics.Point.html
index e3324d2..ff6c64e 100644
--- a/docs/html/sdk/api_diff/13/changes/android.graphics.Point.html
+++ b/docs/html/sdk/api_diff/13/changes/android.graphics.Point.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.graphics.PointF.html b/docs/html/sdk/api_diff/13/changes/android.graphics.PointF.html
index 665c259..2155473 100644
--- a/docs/html/sdk/api_diff/13/changes/android.graphics.PointF.html
+++ b/docs/html/sdk/api_diff/13/changes/android.graphics.PointF.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.hardware.usb.UsbDeviceConnection.html b/docs/html/sdk/api_diff/13/changes/android.hardware.usb.UsbDeviceConnection.html
index 1eb15ed..a3f95f6 100644
--- a/docs/html/sdk/api_diff/13/changes/android.hardware.usb.UsbDeviceConnection.html
+++ b/docs/html/sdk/api_diff/13/changes/android.hardware.usb.UsbDeviceConnection.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.net.ConnectivityManager.html b/docs/html/sdk/api_diff/13/changes/android.net.ConnectivityManager.html
index 977649f..a703a76 100644
--- a/docs/html/sdk/api_diff/13/changes/android.net.ConnectivityManager.html
+++ b/docs/html/sdk/api_diff/13/changes/android.net.ConnectivityManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.os.Binder.html b/docs/html/sdk/api_diff/13/changes/android.os.Binder.html
index fd11dd1..2307776 100644
--- a/docs/html/sdk/api_diff/13/changes/android.os.Binder.html
+++ b/docs/html/sdk/api_diff/13/changes/android.os.Binder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/13/changes/android.os.Build.VERSION_CODES.html
index 0e50af4..c70f748 100644
--- a/docs/html/sdk/api_diff/13/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/13/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.os.IBinder.html b/docs/html/sdk/api_diff/13/changes/android.os.IBinder.html
index 1a251cd..c012087 100644
--- a/docs/html/sdk/api_diff/13/changes/android.os.IBinder.html
+++ b/docs/html/sdk/api_diff/13/changes/android.os.IBinder.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.os.ParcelFileDescriptor.html b/docs/html/sdk/api_diff/13/changes/android.os.ParcelFileDescriptor.html
index 3d3d1c3..95c448d 100644
--- a/docs/html/sdk/api_diff/13/changes/android.os.ParcelFileDescriptor.html
+++ b/docs/html/sdk/api_diff/13/changes/android.os.ParcelFileDescriptor.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.os.PowerManager.html b/docs/html/sdk/api_diff/13/changes/android.os.PowerManager.html
index 4af746d..a522f6c 100644
--- a/docs/html/sdk/api_diff/13/changes/android.os.PowerManager.html
+++ b/docs/html/sdk/api_diff/13/changes/android.os.PowerManager.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/13/changes/android.telephony.TelephonyManager.html
index 43d6cf6..2d16828 100644
--- a/docs/html/sdk/api_diff/13/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/13/changes/android.telephony.TelephonyManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.util.DisplayMetrics.html b/docs/html/sdk/api_diff/13/changes/android.util.DisplayMetrics.html
index 01c329f..5eacf10 100644
--- a/docs/html/sdk/api_diff/13/changes/android.util.DisplayMetrics.html
+++ b/docs/html/sdk/api_diff/13/changes/android.util.DisplayMetrics.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.view.Display.html b/docs/html/sdk/api_diff/13/changes/android.view.Display.html
index 872532a..1b472dc 100644
--- a/docs/html/sdk/api_diff/13/changes/android.view.Display.html
+++ b/docs/html/sdk/api_diff/13/changes/android.view.Display.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/13/changes/android.view.KeyEvent.html
index eaccac4..0636c4a 100644
--- a/docs/html/sdk/api_diff/13/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/13/changes/android.view.KeyEvent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/changes-summary.html b/docs/html/sdk/api_diff/13/changes/changes-summary.html
index 3b1c55a..279fe6f 100644
--- a/docs/html/sdk/api_diff/13/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/13/changes/changes-summary.html
@@ -191,7 +191,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/classes_index_additions.html b/docs/html/sdk/api_diff/13/changes/classes_index_additions.html
index 9ca1958..0f80b33 100644
--- a/docs/html/sdk/api_diff/13/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/13/changes/classes_index_additions.html
@@ -59,7 +59,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.os.html#Parcelable.ClassLoaderCreator" class="hiddenlink" target="rightframe"><b><i>Parcelable.ClassLoaderCreator</i></b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/classes_index_all.html b/docs/html/sdk/api_diff/13/changes/classes_index_all.html
index 6bd1021..61cd897 100644
--- a/docs/html/sdk/api_diff/13/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/13/changes/classes_index_all.html
@@ -286,7 +286,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.hardware.usb.UsbDeviceConnection.html" class="hiddenlink" target="rightframe">UsbDeviceConnection</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/classes_index_changes.html b/docs/html/sdk/api_diff/13/changes/classes_index_changes.html
index d76983f..37610a1 100644
--- a/docs/html/sdk/api_diff/13/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/13/changes/classes_index_changes.html
@@ -284,7 +284,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.hardware.usb.UsbDeviceConnection.html" class="hiddenlink" target="rightframe">UsbDeviceConnection</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/classes_index_removals.html b/docs/html/sdk/api_diff/13/changes/classes_index_removals.html
index e6da73f..af7f1d0 100644
--- a/docs/html/sdk/api_diff/13/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/13/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/13/changes/constructors_index_additions.html
index 3237ba3..a106dcb 100644
--- a/docs/html/sdk/api_diff/13/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/13/changes/constructors_index_additions.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/constructors_index_all.html b/docs/html/sdk/api_diff/13/changes/constructors_index_all.html
index 637582e..3e67e48 100644
--- a/docs/html/sdk/api_diff/13/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/13/changes/constructors_index_all.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/13/changes/constructors_index_changes.html
index 728fa2d..1f3c803 100644
--- a/docs/html/sdk/api_diff/13/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/13/changes/constructors_index_changes.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/13/changes/constructors_index_removals.html
index 1b95544..a260baa 100644
--- a/docs/html/sdk/api_diff/13/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/13/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/fields_index_additions.html b/docs/html/sdk/api_diff/13/changes/fields_index_additions.html
index 271c9aa..08ae250 100644
--- a/docs/html/sdk/api_diff/13/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/13/changes/fields_index_additions.html
@@ -349,7 +349,7 @@
 </nobr><br>
 <nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabView</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/fields_index_all.html b/docs/html/sdk/api_diff/13/changes/fields_index_all.html
index f183408..bd73c8c 100644
--- a/docs/html/sdk/api_diff/13/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/13/changes/fields_index_all.html
@@ -351,7 +351,7 @@
 </nobr><br>
 <nobr><A HREF="android.R.style.html#android.R.style.Widget_Holo_Light_ActionBar_TabView" class="hiddenlink" target="rightframe">Widget_Holo_Light_ActionBar_TabView</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/fields_index_changes.html b/docs/html/sdk/api_diff/13/changes/fields_index_changes.html
index 953047c..fa684e1 100644
--- a/docs/html/sdk/api_diff/13/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/13/changes/fields_index_changes.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.os.PowerManager.html#android.os.PowerManager.SCREEN_BRIGHT_WAKE_LOCK" class="hiddenlink" target="rightframe">SCREEN_BRIGHT_WAKE_LOCK</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/fields_index_removals.html b/docs/html/sdk/api_diff/13/changes/fields_index_removals.html
index 9f62d88..9ad97a7 100644
--- a/docs/html/sdk/api_diff/13/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/13/changes/fields_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/jdiff_help.html b/docs/html/sdk/api_diff/13/changes/jdiff_help.html
index ec659d4..3710d27 100644
--- a/docs/html/sdk/api_diff/13/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/13/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/13/changes/jdiff_statistics.html
index 626c765..98d7077 100644
--- a/docs/html/sdk/api_diff/13/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/13/changes/jdiff_statistics.html
@@ -369,7 +369,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/13/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/13/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/13/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/methods_index_additions.html b/docs/html/sdk/api_diff/13/changes/methods_index_additions.html
index fbbf5a6..037a752 100644
--- a/docs/html/sdk/api_diff/13/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/13/changes/methods_index_additions.html
@@ -211,7 +211,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.graphics.PointF.html#android.graphics.PointF.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe">type&nbsp;<b>
 (<code>Parcel, int</code>)</b>&nbsp;in&nbsp;android.graphics.PointF
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/methods_index_all.html b/docs/html/sdk/api_diff/13/changes/methods_index_all.html
index 84d0a2c..5cd3bfa 100644
--- a/docs/html/sdk/api_diff/13/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/13/changes/methods_index_all.html
@@ -284,7 +284,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.graphics.PointF.html#android.graphics.PointF.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe">type&nbsp;<b>
 (<code>Parcel, int</code>)</b>&nbsp;in&nbsp;android.graphics.PointF
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/methods_index_changes.html b/docs/html/sdk/api_diff/13/changes/methods_index_changes.html
index 97cc3ef..bb11fd6 100644
--- a/docs/html/sdk/api_diff/13/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/13/changes/methods_index_changes.html
@@ -144,7 +144,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.app.Activity.html#android.app.Activity.showDialog_changed(int)" class="hiddenlink" target="rightframe">type&nbsp;
 (<code>int</code>)&nbsp;in&nbsp;android.app.Activity
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/methods_index_removals.html b/docs/html/sdk/api_diff/13/changes/methods_index_removals.html
index b5aea4f..b9d406e 100644
--- a/docs/html/sdk/api_diff/13/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/13/changes/methods_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/packages_index_additions.html b/docs/html/sdk/api_diff/13/changes/packages_index_additions.html
index 1776064..cb6e9d5 100644
--- a/docs/html/sdk/api_diff/13/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/13/changes/packages_index_additions.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/packages_index_all.html b/docs/html/sdk/api_diff/13/changes/packages_index_all.html
index c23f4a6..f33529a 100644
--- a/docs/html/sdk/api_diff/13/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/13/changes/packages_index_all.html
@@ -61,7 +61,7 @@
 <A HREF="pkg_android.telephony.html" class="hiddenlink" target="rightframe">android.telephony</A><br>
 <A HREF="pkg_android.util.html" class="hiddenlink" target="rightframe">android.util</A><br>
 <A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/packages_index_changes.html b/docs/html/sdk/api_diff/13/changes/packages_index_changes.html
index d00b449..2e2fe43 100644
--- a/docs/html/sdk/api_diff/13/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/13/changes/packages_index_changes.html
@@ -61,7 +61,7 @@
 <A HREF="pkg_android.telephony.html" class="hiddenlink" target="rightframe">android.telephony</A><br>
 <A HREF="pkg_android.util.html" class="hiddenlink" target="rightframe">android.util</A><br>
 <A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/packages_index_removals.html b/docs/html/sdk/api_diff/13/changes/packages_index_removals.html
index 9fd0f7e..eaaeb6c 100644
--- a/docs/html/sdk/api_diff/13/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/13/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.app.html b/docs/html/sdk/api_diff/13/changes/pkg_android.app.html
index d728895..816371d 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.app.html
@@ -176,7 +176,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/13/changes/pkg_android.content.pm.html
index 60ab502..eeb517a 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.content.pm.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/13/changes/pkg_android.content.res.html
index 01c31d04..87a1e98 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.content.res.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/13/changes/pkg_android.graphics.html
index 31ddb13..17b6a36 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.graphics.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.hardware.usb.html b/docs/html/sdk/api_diff/13/changes/pkg_android.hardware.usb.html
index ec768c9..145d45c 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.hardware.usb.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.hardware.usb.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.html b/docs/html/sdk/api_diff/13/changes/pkg_android.html
index 6b14637..3f56974 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.net.html b/docs/html/sdk/api_diff/13/changes/pkg_android.net.html
index f3f82cc..8ba328b 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.net.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.os.html b/docs/html/sdk/api_diff/13/changes/pkg_android.os.html
index b9a8c09..bda4e43 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.os.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/13/changes/pkg_android.telephony.html
index 9a00876..90f0453 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.telephony.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.util.html b/docs/html/sdk/api_diff/13/changes/pkg_android.util.html
index 0d92956..f20d7a8 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.util.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/13/changes/pkg_android.view.html b/docs/html/sdk/api_diff/13/changes/pkg_android.view.html
index 22fde46..4b2116f 100644
--- a/docs/html/sdk/api_diff/13/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/13/changes/pkg_android.view.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/14/changes/alldiffs_index_additions.html
index a1dff53..fd139af 100644
--- a/docs/html/sdk/api_diff/14/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/14/changes/alldiffs_index_additions.html
@@ -3097,7 +3097,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/14/changes/alldiffs_index_all.html
index 7958b99..aede8e0 100644
--- a/docs/html/sdk/api_diff/14/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/14/changes/alldiffs_index_all.html
@@ -4183,7 +4183,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/14/changes/alldiffs_index_changes.html
index 76ffbac..dccb034 100644
--- a/docs/html/sdk/api_diff/14/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/14/changes/alldiffs_index_changes.html
@@ -1457,7 +1457,7 @@
 <A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
 <!-- Class WindowManager.LayoutParams -->
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/14/changes/alldiffs_index_removals.html
index 18bc2b3..5d514dc 100644
--- a/docs/html/sdk/api_diff/14/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/14/changes/alldiffs_index_removals.html
@@ -329,7 +329,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.Surface.html#android.view.Surface.unfreeze_removed()" class="hiddenlink" target="rightframe"><strike>unfreeze</strike>
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/14/changes/android.Manifest.permission.html
index 542b3c8..5446e31 100644
--- a/docs/html/sdk/api_diff/14/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/14/changes/android.Manifest.permission.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.attr.html b/docs/html/sdk/api_diff/14/changes/android.R.attr.html
index d7adadb..fc0fe27 100644
--- a/docs/html/sdk/api_diff/14/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/14/changes/android.R.attr.html
@@ -566,7 +566,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.color.html b/docs/html/sdk/api_diff/14/changes/android.R.color.html
index 2fa2703..1ad4ba6 100644
--- a/docs/html/sdk/api_diff/14/changes/android.R.color.html
+++ b/docs/html/sdk/api_diff/14/changes/android.R.color.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.integer.html b/docs/html/sdk/api_diff/14/changes/android.R.integer.html
index 8218ee4..8752adb 100644
--- a/docs/html/sdk/api_diff/14/changes/android.R.integer.html
+++ b/docs/html/sdk/api_diff/14/changes/android.R.integer.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.string.html b/docs/html/sdk/api_diff/14/changes/android.R.string.html
index 942e97b..f97fc90 100644
--- a/docs/html/sdk/api_diff/14/changes/android.R.string.html
+++ b/docs/html/sdk/api_diff/14/changes/android.R.string.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.R.style.html b/docs/html/sdk/api_diff/14/changes/android.R.style.html
index e4692cc..5055b62 100644
--- a/docs/html/sdk/api_diff/14/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/14/changes/android.R.style.html
@@ -1424,7 +1424,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html b/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html
index 7cae772..c18339f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html
+++ b/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html b/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html
index 8e775a4..e18e7c6 100644
--- a/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.accounts.AccountManager.html b/docs/html/sdk/api_diff/14/changes/android.accounts.AccountManager.html
index 8adef37..3296d9c 100644
--- a/docs/html/sdk/api_diff/14/changes/android.accounts.AccountManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.accounts.AccountManager.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.Animator.html b/docs/html/sdk/api_diff/14/changes/android.animation.Animator.html
index 1448825..76a5223 100644
--- a/docs/html/sdk/api_diff/14/changes/android.animation.Animator.html
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.Animator.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html b/docs/html/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html
index faedf88..a5ee4d4 100644
--- a/docs/html/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.IntEvaluator.html b/docs/html/sdk/api_diff/14/changes/android.animation.IntEvaluator.html
index 91388bd..ac78978 100644
--- a/docs/html/sdk/api_diff/14/changes/android.animation.IntEvaluator.html
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.IntEvaluator.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.LayoutTransition.html b/docs/html/sdk/api_diff/14/changes/android.animation.LayoutTransition.html
index ed6b3e7..c440d07 100644
--- a/docs/html/sdk/api_diff/14/changes/android.animation.LayoutTransition.html
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.LayoutTransition.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html b/docs/html/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html
index 872ffff..10f75eb 100644
--- a/docs/html/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html b/docs/html/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html
index 543d91f..fc76078 100644
--- a/docs/html/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html b/docs/html/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html
index 1e95066..13fdf7a 100644
--- a/docs/html/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html
+++ b/docs/html/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html b/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html
index 22eed31..8ef6301 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.html b/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.html
index 0ca869c..c9b63f4 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.ActionBar.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Activity.html b/docs/html/sdk/api_diff/14/changes/android.app.Activity.html
index 7e5e032..4a53f42 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Activity.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.AlertDialog.html b/docs/html/sdk/api_diff/14/changes/android.app.AlertDialog.html
index b3786dea..44a0398 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.AlertDialog.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.AlertDialog.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Application.html b/docs/html/sdk/api_diff/14/changes/android.app.Application.html
index da105de..31bef64 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.Application.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Application.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Fragment.html b/docs/html/sdk/api_diff/14/changes/android.app.Fragment.html
index 2d85f0c..1b9877b 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.Fragment.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Fragment.html
@@ -116,7 +116,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html b/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html
index 6db6763..22091b9 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.html b/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.html
index bb11aba..1c02a4a 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.FragmentManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Notification.Builder.html b/docs/html/sdk/api_diff/14/changes/android.app.Notification.Builder.html
index d9fc7f4..b897b96 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.Notification.Builder.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Notification.Builder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/14/changes/android.app.PendingIntent.html
index e1ac14b..ab19e33 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.PendingIntent.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.PendingIntent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/14/changes/android.app.SearchManager.html
index c2ad438..e7acbd4 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.SearchManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.SearchManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.Service.html b/docs/html/sdk/api_diff/14/changes/android.app.Service.html
index a56592b..7c33859 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.Service.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.Service.html
@@ -116,7 +116,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/14/changes/android.app.WallpaperManager.html
index dbe8e9f..3c92580 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.WallpaperManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.WallpaperManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html b/docs/html/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html
index 73a430d..98cf44d 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html b/docs/html/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html
index 03febd7..38b2071 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html b/docs/html/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html
index ff28b33..5c3c38f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html
+++ b/docs/html/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html b/docs/html/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html
index 0e93fa5..f473153 100644
--- a/docs/html/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html
index 7785223..9713508 100644
--- a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html
+++ b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html
index 0d25fb1..0f8da7a 100644
--- a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html
+++ b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html
index d4f827b..d0959bb 100644
--- a/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html
+++ b/docs/html/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.ContentProvider.html b/docs/html/sdk/api_diff/14/changes/android.content.ContentProvider.html
index 48176b5..1703ee3 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.ContentProvider.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.ContentProvider.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.Context.html b/docs/html/sdk/api_diff/14/changes/android.content.Context.html
index 641b64e..2d27acc 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.Context.html
@@ -172,7 +172,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.Intent.html b/docs/html/sdk/api_diff/14/changes/android.content.Intent.html
index 068fb3f..0c3ce6b 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.Intent.html
@@ -213,7 +213,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.IntentSender.html b/docs/html/sdk/api_diff/14/changes/android.content.IntentSender.html
index a6e751b..ad445fa 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.IntentSender.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.IntentSender.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.SyncAdapterType.html b/docs/html/sdk/api_diff/14/changes/android.content.SyncAdapterType.html
index 030de82..1dffa1b 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.SyncAdapterType.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.SyncAdapterType.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html
index 95d4f9b..b714b8e 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html
index cd3c18d..8e234f5 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageManager.html
index 62f35f4..b5fffb2 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageManager.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageStats.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageStats.html
index faac19e..ca87e95 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageStats.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.PackageStats.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html b/docs/html/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html
index 6b9f78a..3e3e472 100644
--- a/docs/html/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html b/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html
index d7b09f3..affdfba 100644
--- a/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html
+++ b/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html b/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html
index 02bdeee..d74972b 100644
--- a/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html
+++ b/docs/html/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.graphics.Canvas.html b/docs/html/sdk/api_diff/14/changes/android.graphics.Canvas.html
index 8f90381..f2431e9 100644
--- a/docs/html/sdk/api_diff/14/changes/android.graphics.Canvas.html
+++ b/docs/html/sdk/api_diff/14/changes/android.graphics.Canvas.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.graphics.Paint.html b/docs/html/sdk/api_diff/14/changes/android.graphics.Paint.html
index 1cc467f..3597d03 100644
--- a/docs/html/sdk/api_diff/14/changes/android.graphics.Paint.html
+++ b/docs/html/sdk/api_diff/14/changes/android.graphics.Paint.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.graphics.RectF.html b/docs/html/sdk/api_diff/14/changes/android.graphics.RectF.html
index 62d6a96..4cc1292 100644
--- a/docs/html/sdk/api_diff/14/changes/android.graphics.RectF.html
+++ b/docs/html/sdk/api_diff/14/changes/android.graphics.RectF.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html b/docs/html/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html
index 8df17da80..5eb80f1 100644
--- a/docs/html/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html
+++ b/docs/html/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html
index 890a4aa..5bc3025 100644
--- a/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html
+++ b/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html
@@ -221,7 +221,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.html
index 1d6907d..5af616c 100644
--- a/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/14/changes/android.hardware.Camera.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.hardware.Sensor.html b/docs/html/sdk/api_diff/14/changes/android.hardware.Sensor.html
index b56e11c..f297e67 100644
--- a/docs/html/sdk/api_diff/14/changes/android.hardware.Sensor.html
+++ b/docs/html/sdk/api_diff/14/changes/android.hardware.Sensor.html
@@ -132,7 +132,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html b/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html
index d2b2a7a..30d887c 100644
--- a/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html
+++ b/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html b/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html
index c3dcdc5..28ade86 100644
--- a/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html
+++ b/docs/html/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/14/changes/android.media.AudioManager.html
index 7b68d0c..1ae2e8a 100644
--- a/docs/html/sdk/api_diff/14/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.media.AudioManager.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html b/docs/html/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html
index 5f589b9..14d69ea 100644
--- a/docs/html/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html
+++ b/docs/html/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.media.MediaPlayer.html b/docs/html/sdk/api_diff/14/changes/android.media.MediaPlayer.html
index ebdab5c..f5ab184 100644
--- a/docs/html/sdk/api_diff/14/changes/android.media.MediaPlayer.html
+++ b/docs/html/sdk/api_diff/14/changes/android.media.MediaPlayer.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/14/changes/android.media.MediaRecorder.html
index 6f2405f..e982fd1 100644
--- a/docs/html/sdk/api_diff/14/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/14/changes/android.media.MediaRecorder.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.ConnectivityManager.html b/docs/html/sdk/api_diff/14/changes/android.net.ConnectivityManager.html
index f1aaddc..2e28055 100644
--- a/docs/html/sdk/api_diff/14/changes/android.net.ConnectivityManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.net.ConnectivityManager.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html b/docs/html/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html
index b57b309..2eff42d 100644
--- a/docs/html/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html
+++ b/docs/html/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.TrafficStats.html b/docs/html/sdk/api_diff/14/changes/android.net.TrafficStats.html
index 55c729a..d003b1d 100644
--- a/docs/html/sdk/api_diff/14/changes/android.net.TrafficStats.html
+++ b/docs/html/sdk/api_diff/14/changes/android.net.TrafficStats.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.http.SslError.html b/docs/html/sdk/api_diff/14/changes/android.net.http.SslError.html
index 6b9c440..6d01155 100644
--- a/docs/html/sdk/api_diff/14/changes/android.net.http.SslError.html
+++ b/docs/html/sdk/api_diff/14/changes/android.net.http.SslError.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html b/docs/html/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html
index d4e2168..84237b3 100644
--- a/docs/html/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.NdefRecord.html b/docs/html/sdk/api_diff/14/changes/android.nfc.NdefRecord.html
index 8fea7bb..96fe06f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.NdefRecord.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.NdefRecord.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html b/docs/html/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html
index ef09aa0..26f08305 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html
index 2966854..c20c7e9 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html
index c682df0..b1ba4c0 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html
index 31e0903..d5de932 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html
index 7213d86..fd14865 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html
index 188e4ff..2ba6ac8 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html
index 0b4cd91..3caf109 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html
index d7cc5b8..913ee9b 100644
--- a/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html
+++ b/docs/html/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.opengl.GLUtils.html b/docs/html/sdk/api_diff/14/changes/android.opengl.GLUtils.html
index def8913..f53fbf6 100644
--- a/docs/html/sdk/api_diff/14/changes/android.opengl.GLUtils.html
+++ b/docs/html/sdk/api_diff/14/changes/android.opengl.GLUtils.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.opengl.Matrix.html b/docs/html/sdk/api_diff/14/changes/android.opengl.Matrix.html
index 82d7990..eeea75d 100644
--- a/docs/html/sdk/api_diff/14/changes/android.opengl.Matrix.html
+++ b/docs/html/sdk/api_diff/14/changes/android.opengl.Matrix.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html
index 79e8983..8cf427f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Build.html b/docs/html/sdk/api_diff/14/changes/android.os.Build.html
index 6b5d7e3..006d74f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.Build.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Build.html
@@ -125,7 +125,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html b/docs/html/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html
index 0b13977..31ddac3 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Debug.html b/docs/html/sdk/api_diff/14/changes/android.os.Debug.html
index 24e8933..a6b4ec2 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.Debug.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Debug.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Handler.html b/docs/html/sdk/api_diff/14/changes/android.os.Handler.html
index 6dbd8d8..d2c6a52 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.Handler.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Handler.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Looper.html b/docs/html/sdk/api_diff/14/changes/android.os.Looper.html
index fb617b2..ce65b83 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.Looper.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Looper.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html b/docs/html/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html
index aec382d..e9b2e58 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.Process.html b/docs/html/sdk/api_diff/14/changes/android.os.Process.html
index e3a0add..c005664 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.Process.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.Process.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.os.RecoverySystem.html b/docs/html/sdk/api_diff/14/changes/android.os.RecoverySystem.html
index 38a5f5d..e85a365 100644
--- a/docs/html/sdk/api_diff/14/changes/android.os.RecoverySystem.html
+++ b/docs/html/sdk/api_diff/14/changes/android.os.RecoverySystem.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html b/docs/html/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html
index 70f62de..1933148 100644
--- a/docs/html/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html
+++ b/docs/html/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html
@@ -198,7 +198,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.preference.Preference.html b/docs/html/sdk/api_diff/14/changes/android.preference.Preference.html
index 28f0b436..5cff467 100644
--- a/docs/html/sdk/api_diff/14/changes/android.preference.Preference.html
+++ b/docs/html/sdk/api_diff/14/changes/android.preference.Preference.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html b/docs/html/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html
index e1938cb..42584d1 100644
--- a/docs/html/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html
+++ b/docs/html/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html b/docs/html/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html
index a0223f8..48c298c 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html
index 5e4921a..37e0945 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html
index e94ed8c..74f3d06 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html
index 08d7c36..00302af 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html
index ab4775b..1d00fc6 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html
index 58381c2..3a2bd3d 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html
index aef0030..f74a526 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html
index b98d1b1..aef3731 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html
index a63d728..282ed20 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html
index 3f02f5f2..c635c51 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html
index ff069b0..fedbc82 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.html b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.html
index f635b59..d83dc5c 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.ContactsContract.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.LiveFolders.html b/docs/html/sdk/api_diff/14/changes/android.provider.LiveFolders.html
index 3db447e..b70dff2 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.LiveFolders.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.LiveFolders.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html b/docs/html/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html
index 765bdb7..f4df69f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.Secure.html
index 7cf1983..9dec838 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.Secure.html
@@ -260,7 +260,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.System.html
index 4705790..a56d613 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.System.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.html
index 7ff39a8..ef159a5 100644
--- a/docs/html/sdk/api_diff/14/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/14/changes/android.provider.Settings.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Allocation.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Allocation.html
index 4a3f6e3..f133e3b 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Allocation.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Allocation.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html
index 74682a6..0c6b0bb 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html
@@ -186,7 +186,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.BaseObj.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.BaseObj.html
index 67c4380..be7cb1f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.BaseObj.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.BaseObj.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte2.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte2.html
index bf81390..9ee3ba5 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte2.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte2.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte3.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte3.html
index 89988ac..306bdfe 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte3.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte3.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte4.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte4.html
index 0317a2a..1e355d7 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte4.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Byte4.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Element.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Element.html
index b2bb1a0..6a53d80 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Element.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Element.html
@@ -290,7 +290,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html
index b770687..1da0676 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int2.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int2.html
index 9338626..c71fc3f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int2.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int2.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int3.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int3.html
index dd2929d..b777da9 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int3.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int3.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int4.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int4.html
index c7feb7c..e88bf41 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Int4.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Int4.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long2.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long2.html
index b70a7b9..4c75970 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long2.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long2.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long3.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long3.html
index 8f79513..d4c0c77 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long3.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long3.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long4.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long4.html
index 75e5c1c..4e47d97 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Long4.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Long4.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html
index c95df17..1c1cd33 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Script.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Script.html
index e758f56..a60d3fd 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Script.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Script.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short2.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short2.html
index 29bcabc..39f216c 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short2.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short2.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short3.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short3.html
index b2c0790..f8e931f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short3.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short3.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short4.html b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short4.html
index 1b295f9..0aa4ee2 100644
--- a/docs/html/sdk/api_diff/14/changes/android.renderscript.Short4.html
+++ b/docs/html/sdk/api_diff/14/changes/android.renderscript.Short4.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html b/docs/html/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html
index 16d0d11..01da7e94 100644
--- a/docs/html/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html
+++ b/docs/html/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html b/docs/html/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html
index 11ec629..6a61ff0 100644
--- a/docs/html/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html
+++ b/docs/html/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html b/docs/html/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html
index b668613..377c7f9 100644
--- a/docs/html/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html
+++ b/docs/html/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html b/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html
index bb0b4ac..7a01a44 100644
--- a/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html
+++ b/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html b/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html
index 24de846..6ac4c04 100644
--- a/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html
+++ b/docs/html/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html
index 5dcf841..670dd3e 100644
--- a/docs/html/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.text.Layout.html b/docs/html/sdk/api_diff/14/changes/android.text.Layout.html
index 81cc608..952b01f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.text.Layout.html
+++ b/docs/html/sdk/api_diff/14/changes/android.text.Layout.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.Config.html b/docs/html/sdk/api_diff/14/changes/android.util.Config.html
index 4d1cfe4..dbb7c4d 100644
--- a/docs/html/sdk/api_diff/14/changes/android.util.Config.html
+++ b/docs/html/sdk/api_diff/14/changes/android.util.Config.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.Patterns.html b/docs/html/sdk/api_diff/14/changes/android.util.Patterns.html
index c5c0367..2b05290 100644
--- a/docs/html/sdk/api_diff/14/changes/android.util.Patterns.html
+++ b/docs/html/sdk/api_diff/14/changes/android.util.Patterns.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.SparseArray.html b/docs/html/sdk/api_diff/14/changes/android.util.SparseArray.html
index be509fa..091929c 100644
--- a/docs/html/sdk/api_diff/14/changes/android.util.SparseArray.html
+++ b/docs/html/sdk/api_diff/14/changes/android.util.SparseArray.html
@@ -114,7 +114,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html b/docs/html/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html
index 3b6a853..3a54bf2 100644
--- a/docs/html/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html
+++ b/docs/html/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html
@@ -114,7 +114,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.util.SparseIntArray.html b/docs/html/sdk/api_diff/14/changes/android.util.SparseIntArray.html
index 63577a3..669bb8e 100644
--- a/docs/html/sdk/api_diff/14/changes/android.util.SparseIntArray.html
+++ b/docs/html/sdk/api_diff/14/changes/android.util.SparseIntArray.html
@@ -114,7 +114,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ActionMode.html b/docs/html/sdk/api_diff/14/changes/android.view.ActionMode.html
index f0b1252..35b4ab9 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.ActionMode.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ActionMode.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.Gravity.html b/docs/html/sdk/api_diff/14/changes/android.view.Gravity.html
index 12aa839..ad676e3 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.Gravity.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.Gravity.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.InputDevice.html b/docs/html/sdk/api_diff/14/changes/android.view.InputDevice.html
index 4636c47..f508e3b 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.InputDevice.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.InputDevice.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/14/changes/android.view.KeyEvent.html
index df18feb..807a7b0 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.KeyEvent.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.MenuItem.html b/docs/html/sdk/api_diff/14/changes/android.view.MenuItem.html
index 4b72464..6c17673 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.MenuItem.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.MenuItem.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/14/changes/android.view.MotionEvent.html
index 1ab1946..a7e893b 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.MotionEvent.html
@@ -264,7 +264,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.Surface.html b/docs/html/sdk/api_diff/14/changes/android.view.Surface.html
index d6d496b..b924e29 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.Surface.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.Surface.html
@@ -335,7 +335,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.View.html b/docs/html/sdk/api_diff/14/changes/android.view.View.html
index 38a21f7..97b52d8 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.View.html
@@ -380,7 +380,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/14/changes/android.view.ViewConfiguration.html
index 18025b0..f70de47 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.ViewConfiguration.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ViewConfiguration.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/14/changes/android.view.ViewGroup.html
index b869fb4..d541158 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.ViewGroup.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ViewGroup.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ViewParent.html b/docs/html/sdk/api_diff/14/changes/android.view.ViewParent.html
index 6cb3c63..106bc8f 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.ViewParent.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ViewParent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html b/docs/html/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html
index 30e0734..3218fd5 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.Window.html b/docs/html/sdk/api_diff/14/changes/android.view.Window.html
index 5c044fe..7b5eff6 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.Window.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.Window.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html
index ef0bf07..3c6aca5 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html b/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html
index 1b712e3..ebc49ff 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html
@@ -499,7 +499,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html b/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html
index 6a072f7..8f68e77 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html
@@ -154,7 +154,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html
index ae39429..72595ba 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html
index c1ff358..023eb28 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html
index f8e18fa..1f95ffd 100644
--- a/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html
+++ b/docs/html/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html b/docs/html/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html
index d88e6c9..f192bf6 100644
--- a/docs/html/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html
+++ b/docs/html/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html b/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html
index 5555034..08e1112 100644
--- a/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html
+++ b/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.html
index 2966bb8..d66a661 100644
--- a/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/14/changes/android.webkit.WebSettings.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html b/docs/html/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html
index 7778856..4d82db6 100644
--- a/docs/html/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html
+++ b/docs/html/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.AbsListView.html b/docs/html/sdk/api_diff/14/changes/android.widget.AbsListView.html
index c11c111..8a0d5a0 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.AbsListView.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.AbsListView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html b/docs/html/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html
index 0d1bccd..fa7ac99 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.ExpandableListView.html b/docs/html/sdk/api_diff/14/changes/android.widget.ExpandableListView.html
index 71b928a..5ce3ad3 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.ExpandableListView.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.ExpandableListView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.FrameLayout.html b/docs/html/sdk/api_diff/14/changes/android.widget.FrameLayout.html
index be62cbfc..8d6e25c 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.FrameLayout.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.FrameLayout.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.LinearLayout.html b/docs/html/sdk/api_diff/14/changes/android.widget.LinearLayout.html
index 33de5d1..3863dc0 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.LinearLayout.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.LinearLayout.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.OverScroller.html b/docs/html/sdk/api_diff/14/changes/android.widget.OverScroller.html
index 3c902cf..12e1d73 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.OverScroller.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.OverScroller.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.PopupMenu.html b/docs/html/sdk/api_diff/14/changes/android.widget.PopupMenu.html
index 5a82801..f283199 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.PopupMenu.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.PopupMenu.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/14/changes/android.widget.RemoteViews.html
index 2750719..60ec906 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.RemoteViews.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.Scroller.html b/docs/html/sdk/api_diff/14/changes/android.widget.Scroller.html
index d586513..8a920de 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.Scroller.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.Scroller.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.SearchView.html b/docs/html/sdk/api_diff/14/changes/android.widget.SearchView.html
index 1116d30..d14053a 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.SearchView.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.SearchView.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.StackView.html b/docs/html/sdk/api_diff/14/changes/android.widget.StackView.html
index 6b491d0..0e5ca9e 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.StackView.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.StackView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/android.widget.TextView.html b/docs/html/sdk/api_diff/14/changes/android.widget.TextView.html
index a2909ac..b90e8ce 100644
--- a/docs/html/sdk/api_diff/14/changes/android.widget.TextView.html
+++ b/docs/html/sdk/api_diff/14/changes/android.widget.TextView.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/changes-summary.html b/docs/html/sdk/api_diff/14/changes/changes-summary.html
index 0cec877..1b3eae4 100644
--- a/docs/html/sdk/api_diff/14/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/14/changes/changes-summary.html
@@ -493,7 +493,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/classes_index_additions.html b/docs/html/sdk/api_diff/14/changes/classes_index_additions.html
index 72461ce..6b67985 100644
--- a/docs/html/sdk/api_diff/14/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/14/changes/classes_index_additions.html
@@ -407,7 +407,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.net.wifi.html#WpsInfo" class="hiddenlink" target="rightframe"><b>WpsInfo</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/classes_index_all.html b/docs/html/sdk/api_diff/14/changes/classes_index_all.html
index ef8ccca..f76fa80 100644
--- a/docs/html/sdk/api_diff/14/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/14/changes/classes_index_all.html
@@ -834,7 +834,7 @@
 <A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
 <A HREF="pkg_android.net.wifi.html#WpsInfo" class="hiddenlink" target="rightframe"><b>WpsInfo</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/classes_index_changes.html b/docs/html/sdk/api_diff/14/changes/classes_index_changes.html
index 0710892..69c311c 100644
--- a/docs/html/sdk/api_diff/14/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/14/changes/classes_index_changes.html
@@ -744,7 +744,7 @@
 <A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
 <A HREF="android.view.Window.html" class="hiddenlink" target="rightframe">Window</A><br>
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/classes_index_removals.html b/docs/html/sdk/api_diff/14/changes/classes_index_removals.html
index e6da73f..af7f1d0 100644
--- a/docs/html/sdk/api_diff/14/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/14/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/14/changes/constructors_index_additions.html
index 6d53ade..610df5e 100644
--- a/docs/html/sdk/api_diff/14/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/14/changes/constructors_index_additions.html
@@ -140,7 +140,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.ctor_added(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String)" class="hiddenlink" target="rightframe"><b>TextToSpeech</b>
 (<code>Context, OnInitListener, String</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/constructors_index_all.html b/docs/html/sdk/api_diff/14/changes/constructors_index_all.html
index 46b1d72..ddea0d5 100644
--- a/docs/html/sdk/api_diff/14/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/14/changes/constructors_index_all.html
@@ -144,7 +144,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.ctor_added(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String)" class="hiddenlink" target="rightframe"><b>TextToSpeech</b>
 (<code>Context, OnInitListener, String</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/14/changes/constructors_index_changes.html
index ceb631c..07182d7 100644
--- a/docs/html/sdk/api_diff/14/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/14/changes/constructors_index_changes.html
@@ -56,7 +56,7 @@
 (<code>int, SslCertificate</code>)</A></nobr>&nbsp;constructor<br>
 &nbsp;&nbsp;<nobr><A HREF="android.net.http.SslError.html#android.net.http.SslError.ctor_changed(int, java.security.cert.X509Certificate)" class="hiddenlink" target="rightframe">SslError
 (<code>int, X509Certificate</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/14/changes/constructors_index_removals.html
index f1a9952..84bcc63 100644
--- a/docs/html/sdk/api_diff/14/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/14/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html b/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html
index d931d2e..15a0ec9 100644
--- a/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html
+++ b/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html b/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html
index eee755b..fa88aa8 100644
--- a/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html
+++ b/docs/html/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html b/docs/html/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html
index a932a23..4d8d87e 100644
--- a/docs/html/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html
+++ b/docs/html/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html b/docs/html/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html
index 030cef9..94a49dc 100644
--- a/docs/html/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html
+++ b/docs/html/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/fields_index_additions.html b/docs/html/sdk/api_diff/14/changes/fields_index_additions.html
index 17190f8..f587dcf 100644
--- a/docs/html/sdk/api_diff/14/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/14/changes/fields_index_additions.html
@@ -1431,7 +1431,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/fields_index_all.html b/docs/html/sdk/api_diff/14/changes/fields_index_all.html
index 7c9cc67..fbf4e0f 100644
--- a/docs/html/sdk/api_diff/14/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/14/changes/fields_index_all.html
@@ -1579,7 +1579,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/fields_index_changes.html b/docs/html/sdk/api_diff/14/changes/fields_index_changes.html
index 6c6aabd..d264c09 100644
--- a/docs/html/sdk/api_diff/14/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/14/changes/fields_index_changes.html
@@ -269,7 +269,7 @@
 </nobr><br>
 <nobr><A HREF="android.provider.Settings.Secure.html#android.provider.Settings.Secure.WIFI_WATCHDOG_WATCH_LIST" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_WATCH_LIST</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/fields_index_removals.html b/docs/html/sdk/api_diff/14/changes/fields_index_removals.html
index 6bc291f..92c20c0 100644
--- a/docs/html/sdk/api_diff/14/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/14/changes/fields_index_removals.html
@@ -149,7 +149,7 @@
 </nobr><br>
 <nobr><A HREF="android.view.Surface.html#android.view.Surface.SURFACE_HIDDEN" class="hiddenlink" target="rightframe"><strike>SURFACE_HIDDEN</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.io.FilePermission.html b/docs/html/sdk/api_diff/14/changes/java.io.FilePermission.html
index 07432bf..d968796 100644
--- a/docs/html/sdk/api_diff/14/changes/java.io.FilePermission.html
+++ b/docs/html/sdk/api_diff/14/changes/java.io.FilePermission.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.io.ObjectInputStream.html b/docs/html/sdk/api_diff/14/changes/java.io.ObjectInputStream.html
index 21b48ec..9246fa2 100644
--- a/docs/html/sdk/api_diff/14/changes/java.io.ObjectInputStream.html
+++ b/docs/html/sdk/api_diff/14/changes/java.io.ObjectInputStream.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html b/docs/html/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html
index 0ab0ed26..7e13ce9 100644
--- a/docs/html/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html
+++ b/docs/html/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.Class.html b/docs/html/sdk/api_diff/14/changes/java.lang.Class.html
index 394b440..53400f0 100644
--- a/docs/html/sdk/api_diff/14/changes/java.lang.Class.html
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.Class.html
@@ -231,7 +231,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html b/docs/html/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html
index 000481c..9d2a51c 100644
--- a/docs/html/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html
index f90f9e5..92ca07b 100644
--- a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html
index acb83ef..9f0195a 100644
--- a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Field.html b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Field.html
index 19f58eb..b831c66d8 100644
--- a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Field.html
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Field.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Method.html b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Method.html
index 2226260..290f038 100644
--- a/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Method.html
+++ b/docs/html/sdk/api_diff/14/changes/java.lang.reflect.Method.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.net.SocketPermission.html b/docs/html/sdk/api_diff/14/changes/java.net.SocketPermission.html
index 0c386f0..def0165 100644
--- a/docs/html/sdk/api_diff/14/changes/java.net.SocketPermission.html
+++ b/docs/html/sdk/api_diff/14/changes/java.net.SocketPermission.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.security.AllPermission.html b/docs/html/sdk/api_diff/14/changes/java.security.AllPermission.html
index 25c745b..dcf27be 100644
--- a/docs/html/sdk/api_diff/14/changes/java.security.AllPermission.html
+++ b/docs/html/sdk/api_diff/14/changes/java.security.AllPermission.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.security.BasicPermission.html b/docs/html/sdk/api_diff/14/changes/java.security.BasicPermission.html
index 24c047e..02c6483 100644
--- a/docs/html/sdk/api_diff/14/changes/java.security.BasicPermission.html
+++ b/docs/html/sdk/api_diff/14/changes/java.security.BasicPermission.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.security.Permission.html b/docs/html/sdk/api_diff/14/changes/java.security.Permission.html
index 6356059..ff0c382 100644
--- a/docs/html/sdk/api_diff/14/changes/java.security.Permission.html
+++ b/docs/html/sdk/api_diff/14/changes/java.security.Permission.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html b/docs/html/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html
index 8d90dc8..b9c6b87 100644
--- a/docs/html/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html
+++ b/docs/html/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/java.util.logging.Handler.html b/docs/html/sdk/api_diff/14/changes/java.util.logging.Handler.html
index 3a33e6e..f3a6a35 100644
--- a/docs/html/sdk/api_diff/14/changes/java.util.logging.Handler.html
+++ b/docs/html/sdk/api_diff/14/changes/java.util.logging.Handler.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html b/docs/html/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html
index cf64e41..2726306 100644
--- a/docs/html/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html
+++ b/docs/html/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/jdiff_help.html b/docs/html/sdk/api_diff/14/changes/jdiff_help.html
index 8220056..64f7af8 100644
--- a/docs/html/sdk/api_diff/14/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/14/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/14/changes/jdiff_statistics.html
index 6729816..fe9c3a9 100644
--- a/docs/html/sdk/api_diff/14/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/14/changes/jdiff_statistics.html
@@ -1332,7 +1332,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/14/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/14/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/14/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/methods_index_additions.html b/docs/html/sdk/api_diff/14/changes/methods_index_additions.html
index 58dd0bf..3d516a6 100644
--- a/docs/html/sdk/api_diff/14/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/14/changes/methods_index_additions.html
@@ -1025,7 +1025,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.view.inputmethod.InputMethodSession.html#android.view.inputmethod.InputMethodSession.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type&nbsp;<b>
 (<code>boolean</code>)</b>&nbsp;in&nbsp;android.view.inputmethod.InputMethodSession
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/methods_index_all.html b/docs/html/sdk/api_diff/14/changes/methods_index_all.html
index 3ba8441..7518de6 100644
--- a/docs/html/sdk/api_diff/14/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/14/changes/methods_index_all.html
@@ -1410,7 +1410,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.view.inputmethod.InputMethodSession.html#android.view.inputmethod.InputMethodSession.viewClicked_added(boolean)" class="hiddenlink" target="rightframe">type&nbsp;<b>
 (<code>boolean</code>)</b>&nbsp;in&nbsp;android.view.inputmethod.InputMethodSession
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/methods_index_changes.html b/docs/html/sdk/api_diff/14/changes/methods_index_changes.html
index 73a7207..3a5e917 100644
--- a/docs/html/sdk/api_diff/14/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/14/changes/methods_index_changes.html
@@ -451,7 +451,7 @@
 (<code>TextSize</code>)</A></nobr><br>
 <nobr><A HREF="android.os.Process.html#android.os.Process.supportsProcesses_changed()" class="hiddenlink" target="rightframe">supportsProcesses
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/methods_index_removals.html b/docs/html/sdk/api_diff/14/changes/methods_index_removals.html
index 1faf343..ddd4186 100644
--- a/docs/html/sdk/api_diff/14/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/14/changes/methods_index_removals.html
@@ -176,7 +176,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.Surface.html#android.view.Surface.unfreeze_removed()" class="hiddenlink" target="rightframe"><strike>unfreeze</strike>
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/packages_index_additions.html b/docs/html/sdk/api_diff/14/changes/packages_index_additions.html
index 04ac28c..afcc9d4 100644
--- a/docs/html/sdk/api_diff/14/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/14/changes/packages_index_additions.html
@@ -55,7 +55,7 @@
 <A HREF="changes-summary.html#android.security" class="hiddenlink" target="rightframe"><b>android.security</b></A><br>
 <A HREF="changes-summary.html#android.service.textservice" class="hiddenlink" target="rightframe"><b>android.service.textservice</b></A><br>
 <A HREF="changes-summary.html#android.view.textservice" class="hiddenlink" target="rightframe"><b>android.view.textservice</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/packages_index_all.html b/docs/html/sdk/api_diff/14/changes/packages_index_all.html
index 8aa185d..056db4b 100644
--- a/docs/html/sdk/api_diff/14/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/14/changes/packages_index_all.html
@@ -105,7 +105,7 @@
 <A HREF="pkg_java.security.html" class="hiddenlink" target="rightframe">java.security</A><br>
 <A HREF="pkg_java.util.logging.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
 <A HREF="pkg_javax.security.auth.html" class="hiddenlink" target="rightframe">javax.security.auth</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/packages_index_changes.html b/docs/html/sdk/api_diff/14/changes/packages_index_changes.html
index f0e838c..4f24c2e 100644
--- a/docs/html/sdk/api_diff/14/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/14/changes/packages_index_changes.html
@@ -100,7 +100,7 @@
 <A HREF="pkg_java.security.html" class="hiddenlink" target="rightframe">java.security</A><br>
 <A HREF="pkg_java.util.logging.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
 <A HREF="pkg_javax.security.auth.html" class="hiddenlink" target="rightframe">javax.security.auth</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/packages_index_removals.html b/docs/html/sdk/api_diff/14/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/14/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/14/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html b/docs/html/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html
index 0ab9feb..a75d5d62 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.accounts.html b/docs/html/sdk/api_diff/14/changes/pkg_android.accounts.html
index b19da2d..6271f75 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.accounts.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.accounts.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.animation.html b/docs/html/sdk/api_diff/14/changes/pkg_android.animation.html
index 21148bf..5e7cf9c 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.animation.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.animation.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.app.admin.html b/docs/html/sdk/api_diff/14/changes/pkg_android.app.admin.html
index 4dfa032..84880bf 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.app.admin.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.app.admin.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.app.backup.html b/docs/html/sdk/api_diff/14/changes/pkg_android.app.backup.html
index dd5324b..553ba8e 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.app.backup.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.app.backup.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.app.html b/docs/html/sdk/api_diff/14/changes/pkg_android.app.html
index 8e6d724..2b29deb 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.app.html
@@ -239,7 +239,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.appwidget.html b/docs/html/sdk/api_diff/14/changes/pkg_android.appwidget.html
index a8651f3..f93ff7e 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.appwidget.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.appwidget.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/14/changes/pkg_android.bluetooth.html
index 1a5556c..18abc97 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.bluetooth.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.bluetooth.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.content.html b/docs/html/sdk/api_diff/14/changes/pkg_android.content.html
index 60d7c7e..9423e78 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.content.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/14/changes/pkg_android.content.pm.html
index 81ac942..ae942b1 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.content.pm.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.database.sqlite.html b/docs/html/sdk/api_diff/14/changes/pkg_android.database.sqlite.html
index 39291b9..d05d9a2 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.database.sqlite.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.database.sqlite.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/14/changes/pkg_android.graphics.html
index b4b1517..78e0a96 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.graphics.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/14/changes/pkg_android.hardware.html
index 6e6d40e..658d4ca 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.hardware.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.html b/docs/html/sdk/api_diff/14/changes/pkg_android.html
index 7f15e82..72a4769 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html b/docs/html/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html
index c020347..4fd9766 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.media.html b/docs/html/sdk/api_diff/14/changes/pkg_android.media.html
index 6269a65..ccbd289 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.media.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.net.html b/docs/html/sdk/api_diff/14/changes/pkg_android.net.html
index 3deb6bd..466b354 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.net.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.net.http.html b/docs/html/sdk/api_diff/14/changes/pkg_android.net.http.html
index cd51c20..2d74ebc 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.net.http.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.net.http.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.net.wifi.html b/docs/html/sdk/api_diff/14/changes/pkg_android.net.wifi.html
index 5ae5932..c8a8693 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.net.wifi.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.net.wifi.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.html b/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.html
index a044e01..a6845a3 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.tech.html b/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.tech.html
index c7e562d..5150e74 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.tech.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.nfc.tech.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/14/changes/pkg_android.opengl.html
index 0d66ed8..b34bf9d 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.opengl.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.os.html b/docs/html/sdk/api_diff/14/changes/pkg_android.os.html
index 1a56e37..5947519 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.os.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.preference.html b/docs/html/sdk/api_diff/14/changes/pkg_android.preference.html
index ded1274..6a1075f 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.preference.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.preference.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/14/changes/pkg_android.provider.html
index 23a6407..e71e4b6 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.provider.html
@@ -449,7 +449,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.renderscript.html b/docs/html/sdk/api_diff/14/changes/pkg_android.renderscript.html
index 03563af..3e4242f 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.renderscript.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.renderscript.html
@@ -267,7 +267,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html b/docs/html/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html
index c1bdfb1..7d01a65 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.speech.html b/docs/html/sdk/api_diff/14/changes/pkg_android.speech.html
index bfbe14e..be16a62 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.speech.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.speech.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.speech.tts.html b/docs/html/sdk/api_diff/14/changes/pkg_android.speech.tts.html
index 21fca52..1564ad6 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.speech.tts.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.speech.tts.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/14/changes/pkg_android.test.mock.html
index 169b498..77152b0 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.test.mock.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.text.html b/docs/html/sdk/api_diff/14/changes/pkg_android.text.html
index b286fa1..a669cc0 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.text.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.text.style.html b/docs/html/sdk/api_diff/14/changes/pkg_android.text.style.html
index dfda61e..a27cc58 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.text.style.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.text.style.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.util.html b/docs/html/sdk/api_diff/14/changes/pkg_android.util.html
index 6b9a20b..ffccd1c 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.util.html
@@ -155,7 +155,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.view.accessibility.html b/docs/html/sdk/api_diff/14/changes/pkg_android.view.accessibility.html
index c78a800..d1cc5bd 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.view.accessibility.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.view.accessibility.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.view.html b/docs/html/sdk/api_diff/14/changes/pkg_android.view.html
index 58e2441..88b3482 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.view.html
@@ -260,7 +260,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html b/docs/html/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html
index d422a5d..d4d50f4 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/14/changes/pkg_android.webkit.html
index 8d52055..68e6d29 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.webkit.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/14/changes/pkg_android.widget.html
index f5a9ede..aa78ce7 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_android.widget.html
@@ -260,7 +260,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_dalvik.annotation.html b/docs/html/sdk/api_diff/14/changes/pkg_dalvik.annotation.html
index 5d6987a..6ff76e4 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_dalvik.annotation.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_dalvik.annotation.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_dalvik.system.html b/docs/html/sdk/api_diff/14/changes/pkg_dalvik.system.html
index 246b8dd..bd61d60 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_dalvik.system.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_dalvik.system.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.io.html b/docs/html/sdk/api_diff/14/changes/pkg_java.io.html
index 4291f38..b5e4479 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_java.io.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.io.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.html b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.html
index fcf6b25..4c61ae1 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.ref.html b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.ref.html
index 1aabf82..f50ea8a 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.ref.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.ref.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.reflect.html b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.reflect.html
index ca050ee..f320e32 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_java.lang.reflect.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.lang.reflect.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.net.html b/docs/html/sdk/api_diff/14/changes/pkg_java.net.html
index 37a8105..b69348e 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_java.net.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.net.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.security.html b/docs/html/sdk/api_diff/14/changes/pkg_java.security.html
index 38d8f1f..00ed711 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_java.security.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.security.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_java.util.logging.html b/docs/html/sdk/api_diff/14/changes/pkg_java.util.logging.html
index cac83f2..abf9775 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_java.util.logging.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_java.util.logging.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/14/changes/pkg_javax.security.auth.html b/docs/html/sdk/api_diff/14/changes/pkg_javax.security.auth.html
index 9c134cf..4dffa60 100644
--- a/docs/html/sdk/api_diff/14/changes/pkg_javax.security.auth.html
+++ b/docs/html/sdk/api_diff/14/changes/pkg_javax.security.auth.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/15/changes/alldiffs_index_additions.html
index 25c2b0a..08cf438 100644
--- a/docs/html/sdk/api_diff/15/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/15/changes/alldiffs_index_additions.html
@@ -606,7 +606,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_SOCIAL_STREAM" class="hiddenlink" target="rightframe">WRITE_SOCIAL_STREAM</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/15/changes/alldiffs_index_all.html
index c4a67da..fe487e0 100644
--- a/docs/html/sdk/api_diff/15/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/15/changes/alldiffs_index_all.html
@@ -814,7 +814,7 @@
 <!-- Field WRITE_SOCIAL_STREAM -->
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_SOCIAL_STREAM" class="hiddenlink" target="rightframe">WRITE_SOCIAL_STREAM</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/15/changes/alldiffs_index_changes.html
index 5ee3803..fd61052 100644
--- a/docs/html/sdk/api_diff/15/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/15/changes/alldiffs_index_changes.html
@@ -384,7 +384,7 @@
 <A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
 <!-- Class WebSettings.LayoutAlgorithm -->
 <A HREF="android.webkit.WebSettings.LayoutAlgorithm.html" class="hiddenlink" target="rightframe">WebSettings.LayoutAlgorithm</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/15/changes/alldiffs_index_removals.html
index 68d2c20..48c9fcd 100644
--- a/docs/html/sdk/api_diff/15/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/15/changes/alldiffs_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/15/changes/android.Manifest.permission.html
index 37bbd8c..00c6a8e 100644
--- a/docs/html/sdk/api_diff/15/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/15/changes/android.Manifest.permission.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.app.Fragment.html b/docs/html/sdk/api_diff/15/changes/android.app.Fragment.html
index 2b1976e..e7710bc 100644
--- a/docs/html/sdk/api_diff/15/changes/android.app.Fragment.html
+++ b/docs/html/sdk/api_diff/15/changes/android.app.Fragment.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.appwidget.AppWidgetHostView.html b/docs/html/sdk/api_diff/15/changes/android.appwidget.AppWidgetHostView.html
index 59bdb1f..1003446 100644
--- a/docs/html/sdk/api_diff/15/changes/android.appwidget.AppWidgetHostView.html
+++ b/docs/html/sdk/api_diff/15/changes/android.appwidget.AppWidgetHostView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.bluetooth.BluetoothDevice.html b/docs/html/sdk/api_diff/15/changes/android.bluetooth.BluetoothDevice.html
index a2c87cd..c046a82 100644
--- a/docs/html/sdk/api_diff/15/changes/android.bluetooth.BluetoothDevice.html
+++ b/docs/html/sdk/api_diff/15/changes/android.bluetooth.BluetoothDevice.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.content.Context.html b/docs/html/sdk/api_diff/15/changes/android.content.Context.html
index b3b8f1e..7a3a41b 100644
--- a/docs/html/sdk/api_diff/15/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/15/changes/android.content.Context.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.content.Intent.html b/docs/html/sdk/api_diff/15/changes/android.content.Intent.html
index dd2f466..038b214 100644
--- a/docs/html/sdk/api_diff/15/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/15/changes/android.content.Intent.html
@@ -200,7 +200,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.database.CursorWindow.html b/docs/html/sdk/api_diff/15/changes/android.database.CursorWindow.html
index 4ba4252..bc4fdb8 100644
--- a/docs/html/sdk/api_diff/15/changes/android.database.CursorWindow.html
+++ b/docs/html/sdk/api_diff/15/changes/android.database.CursorWindow.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.graphics.SurfaceTexture.html b/docs/html/sdk/api_diff/15/changes/android.graphics.SurfaceTexture.html
index ca44add..e903928 100644
--- a/docs/html/sdk/api_diff/15/changes/android.graphics.SurfaceTexture.html
+++ b/docs/html/sdk/api_diff/15/changes/android.graphics.SurfaceTexture.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/15/changes/android.hardware.Camera.Parameters.html
index 02afe90..75674df 100644
--- a/docs/html/sdk/api_diff/15/changes/android.hardware.Camera.Parameters.html
+++ b/docs/html/sdk/api_diff/15/changes/android.hardware.Camera.Parameters.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.media.CamcorderProfile.html b/docs/html/sdk/api_diff/15/changes/android.media.CamcorderProfile.html
index 6b556bc..6e20d2b 100644
--- a/docs/html/sdk/api_diff/15/changes/android.media.CamcorderProfile.html
+++ b/docs/html/sdk/api_diff/15/changes/android.media.CamcorderProfile.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.media.MediaMetadataRetriever.html b/docs/html/sdk/api_diff/15/changes/android.media.MediaMetadataRetriever.html
index 8247ea9..81b78ee 100644
--- a/docs/html/sdk/api_diff/15/changes/android.media.MediaMetadataRetriever.html
+++ b/docs/html/sdk/api_diff/15/changes/android.media.MediaMetadataRetriever.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.opengl.GLES11Ext.html b/docs/html/sdk/api_diff/15/changes/android.opengl.GLES11Ext.html
index 50913ad..fe433a6 100644
--- a/docs/html/sdk/api_diff/15/changes/android.opengl.GLES11Ext.html
+++ b/docs/html/sdk/api_diff/15/changes/android.opengl.GLES11Ext.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/15/changes/android.os.Build.VERSION_CODES.html
index 8399457..a5c0a50 100644
--- a/docs/html/sdk/api_diff/15/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/15/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.os.IBinder.html b/docs/html/sdk/api_diff/15/changes/android.os.IBinder.html
index 1d090ed..78a9c4b 100644
--- a/docs/html/sdk/api_diff/15/changes/android.os.IBinder.html
+++ b/docs/html/sdk/api_diff/15/changes/android.os.IBinder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.os.RemoteException.html b/docs/html/sdk/api_diff/15/changes/android.os.RemoteException.html
index 55659e3..af69afa 100644
--- a/docs/html/sdk/api_diff/15/changes/android.os.RemoteException.html
+++ b/docs/html/sdk/api_diff/15/changes/android.os.RemoteException.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.AttendeesColumns.html b/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.AttendeesColumns.html
index d2c1f61..e7539e7 100644
--- a/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.AttendeesColumns.html
+++ b/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.AttendeesColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.CalendarColumns.html b/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.CalendarColumns.html
index 60e05ef..a2e64e0 100644
--- a/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.CalendarColumns.html
+++ b/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.CalendarColumns.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.EventsColumns.html b/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.EventsColumns.html
index 6251360..09a3358 100644
--- a/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.EventsColumns.html
+++ b/docs/html/sdk/api_diff/15/changes/android.provider.CalendarContract.EventsColumns.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.provider.MediaStore.html b/docs/html/sdk/api_diff/15/changes/android.provider.MediaStore.html
index 34ee9a8..f4f16b2 100644
--- a/docs/html/sdk/api_diff/15/changes/android.provider.MediaStore.html
+++ b/docs/html/sdk/api_diff/15/changes/android.provider.MediaStore.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/15/changes/android.provider.Settings.Secure.html
index f1cb57b..d81c5f3 100644
--- a/docs/html/sdk/api_diff/15/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/15/changes/android.provider.Settings.Secure.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.service.textservice.SpellCheckerService.Session.html b/docs/html/sdk/api_diff/15/changes/android.service.textservice.SpellCheckerService.Session.html
index 019b98a..5ea9263 100644
--- a/docs/html/sdk/api_diff/15/changes/android.service.textservice.SpellCheckerService.Session.html
+++ b/docs/html/sdk/api_diff/15/changes/android.service.textservice.SpellCheckerService.Session.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.service.wallpaper.WallpaperService.Engine.html b/docs/html/sdk/api_diff/15/changes/android.service.wallpaper.WallpaperService.Engine.html
index 356cf9d..7a59f14 100644
--- a/docs/html/sdk/api_diff/15/changes/android.service.wallpaper.WallpaperService.Engine.html
+++ b/docs/html/sdk/api_diff/15/changes/android.service.wallpaper.WallpaperService.Engine.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.Engine.html b/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.Engine.html
index 6f53f8f..8228628 100644
--- a/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.Engine.html
+++ b/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.Engine.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.html b/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.html
index e6e22a5..6f1bae0 100644
--- a/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.html
+++ b/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeechService.html b/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeechService.html
index e772e19..face4e2 100644
--- a/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeechService.html
+++ b/docs/html/sdk/api_diff/15/changes/android.speech.tts.TextToSpeechService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.text.style.SuggestionSpan.html b/docs/html/sdk/api_diff/15/changes/android.text.style.SuggestionSpan.html
index 0add186..6eaf050 100644
--- a/docs/html/sdk/api_diff/15/changes/android.text.style.SuggestionSpan.html
+++ b/docs/html/sdk/api_diff/15/changes/android.text.style.SuggestionSpan.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/15/changes/android.view.KeyEvent.html
index 70843f6..acfa8a0 100644
--- a/docs/html/sdk/api_diff/15/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/15/changes/android.view.KeyEvent.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.view.View.html b/docs/html/sdk/api_diff/15/changes/android.view.View.html
index fa772f9..26a6177 100644
--- a/docs/html/sdk/api_diff/15/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/15/changes/android.view.View.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.view.accessibility.AccessibilityRecord.html b/docs/html/sdk/api_diff/15/changes/android.view.accessibility.AccessibilityRecord.html
index b88467c..e70ce72 100644
--- a/docs/html/sdk/api_diff/15/changes/android.view.accessibility.AccessibilityRecord.html
+++ b/docs/html/sdk/api_diff/15/changes/android.view.accessibility.AccessibilityRecord.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.view.textservice.SpellCheckerSession.html b/docs/html/sdk/api_diff/15/changes/android.view.textservice.SpellCheckerSession.html
index 0782c9c..b5720c2 100644
--- a/docs/html/sdk/api_diff/15/changes/android.view.textservice.SpellCheckerSession.html
+++ b/docs/html/sdk/api_diff/15/changes/android.view.textservice.SpellCheckerSession.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.view.textservice.SuggestionsInfo.html b/docs/html/sdk/api_diff/15/changes/android.view.textservice.SuggestionsInfo.html
index bd1859b..f84d107 100644
--- a/docs/html/sdk/api_diff/15/changes/android.view.textservice.SuggestionsInfo.html
+++ b/docs/html/sdk/api_diff/15/changes/android.view.textservice.SuggestionsInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.webkit.WebSettings.LayoutAlgorithm.html b/docs/html/sdk/api_diff/15/changes/android.webkit.WebSettings.LayoutAlgorithm.html
index 40424ed..d4aa885 100644
--- a/docs/html/sdk/api_diff/15/changes/android.webkit.WebSettings.LayoutAlgorithm.html
+++ b/docs/html/sdk/api_diff/15/changes/android.webkit.WebSettings.LayoutAlgorithm.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/15/changes/android.webkit.WebSettings.html
index b7005a0..fd971ee 100644
--- a/docs/html/sdk/api_diff/15/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/15/changes/android.webkit.WebSettings.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/15/changes/android.widget.RemoteViews.html
index 50cacab..0d8512d 100644
--- a/docs/html/sdk/api_diff/15/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/15/changes/android.widget.RemoteViews.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/changes-summary.html b/docs/html/sdk/api_diff/15/changes/changes-summary.html
index 7f00168..8bbac97 100644
--- a/docs/html/sdk/api_diff/15/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/15/changes/changes-summary.html
@@ -261,7 +261,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/classes_index_additions.html b/docs/html/sdk/api_diff/15/changes/classes_index_additions.html
index 16969ea..5e21dcd 100644
--- a/docs/html/sdk/api_diff/15/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/15/changes/classes_index_additions.html
@@ -77,7 +77,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.speech.tts.html#UtteranceProgressListener" class="hiddenlink" target="rightframe"><b>UtteranceProgressListener</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/classes_index_all.html b/docs/html/sdk/api_diff/15/changes/classes_index_all.html
index e03eba3..f18a87c 100644
--- a/docs/html/sdk/api_diff/15/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/15/changes/classes_index_all.html
@@ -331,7 +331,7 @@
 <A HREF="android.service.wallpaper.WallpaperService.Engine.html" class="hiddenlink" target="rightframe">WallpaperService.Engine</A><br>
 <A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
 <A HREF="android.webkit.WebSettings.LayoutAlgorithm.html" class="hiddenlink" target="rightframe">WebSettings.LayoutAlgorithm</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/classes_index_changes.html b/docs/html/sdk/api_diff/15/changes/classes_index_changes.html
index 3109b6e..23f2320 100644
--- a/docs/html/sdk/api_diff/15/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/15/changes/classes_index_changes.html
@@ -289,7 +289,7 @@
 <A HREF="android.service.wallpaper.WallpaperService.Engine.html" class="hiddenlink" target="rightframe">WallpaperService.Engine</A><br>
 <A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
 <A HREF="android.webkit.WebSettings.LayoutAlgorithm.html" class="hiddenlink" target="rightframe">WebSettings.LayoutAlgorithm</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/classes_index_removals.html b/docs/html/sdk/api_diff/15/changes/classes_index_removals.html
index e6da73f..af7f1d0 100644
--- a/docs/html/sdk/api_diff/15/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/15/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/15/changes/constructors_index_additions.html
index c834d4f..b67d085 100644
--- a/docs/html/sdk/api_diff/15/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/15/changes/constructors_index_additions.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.os.RemoteException.html#android.os.RemoteException.ctor_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>RemoteException</b>
 (<code>String</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/constructors_index_all.html b/docs/html/sdk/api_diff/15/changes/constructors_index_all.html
index 4e8e692..0470e4b 100644
--- a/docs/html/sdk/api_diff/15/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/15/changes/constructors_index_all.html
@@ -64,7 +64,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.os.RemoteException.html#android.os.RemoteException.ctor_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>RemoteException</b>
 (<code>String</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/15/changes/constructors_index_changes.html
index 74dc718..30f7b8d 100644
--- a/docs/html/sdk/api_diff/15/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/15/changes/constructors_index_changes.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.database.CursorWindow.html#android.database.CursorWindow.ctor_changed(boolean)" class="hiddenlink" target="rightframe">CursorWindow
 (<code>boolean</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/15/changes/constructors_index_removals.html
index f1a9952..84bcc63 100644
--- a/docs/html/sdk/api_diff/15/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/15/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/fields_index_additions.html b/docs/html/sdk/api_diff/15/changes/fields_index_additions.html
index 6012ce8..d10ec8a 100644
--- a/docs/html/sdk/api_diff/15/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/15/changes/fields_index_additions.html
@@ -331,7 +331,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_SOCIAL_STREAM" class="hiddenlink" target="rightframe">WRITE_SOCIAL_STREAM</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/fields_index_all.html b/docs/html/sdk/api_diff/15/changes/fields_index_all.html
index 66fbf8f..5d4f366 100644
--- a/docs/html/sdk/api_diff/15/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/15/changes/fields_index_all.html
@@ -365,7 +365,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_SOCIAL_STREAM" class="hiddenlink" target="rightframe">WRITE_SOCIAL_STREAM</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/fields_index_changes.html b/docs/html/sdk/api_diff/15/changes/fields_index_changes.html
index 82b093d..394c152 100644
--- a/docs/html/sdk/api_diff/15/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/15/changes/fields_index_changes.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.provider.MediaStore.html#android.provider.MediaStore.INTENT_ACTION_MUSIC_PLAYER" class="hiddenlink" target="rightframe">INTENT_ACTION_MUSIC_PLAYER</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/fields_index_removals.html b/docs/html/sdk/api_diff/15/changes/fields_index_removals.html
index 9f62d88..9ad97a7 100644
--- a/docs/html/sdk/api_diff/15/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/15/changes/fields_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/jdiff_help.html b/docs/html/sdk/api_diff/15/changes/jdiff_help.html
index 4152998..f835a2b 100644
--- a/docs/html/sdk/api_diff/15/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/15/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/15/changes/jdiff_statistics.html
index 2c15e76..2dd3aad 100644
--- a/docs/html/sdk/api_diff/15/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/15/changes/jdiff_statistics.html
@@ -434,7 +434,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/15/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/15/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/15/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/methods_index_additions.html b/docs/html/sdk/api_diff/15/changes/methods_index_additions.html
index 260ec1e..bb778cb 100644
--- a/docs/html/sdk/api_diff/15/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/15/changes/methods_index_additions.html
@@ -185,7 +185,7 @@
 (<code>boolean</code>)</A></nobr><br>
 <nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setVideoStabilization_added(boolean)" class="hiddenlink" target="rightframe"><b>setVideoStabilization</b>
 (<code>boolean</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/methods_index_all.html b/docs/html/sdk/api_diff/15/changes/methods_index_all.html
index 2f0e734..1b23b4d 100644
--- a/docs/html/sdk/api_diff/15/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/15/changes/methods_index_all.html
@@ -191,7 +191,7 @@
 (<code>boolean</code>)</A></nobr><br>
 <nobr><A HREF="android.hardware.Camera.Parameters.html#android.hardware.Camera.Parameters.setVideoStabilization_added(boolean)" class="hiddenlink" target="rightframe"><b>setVideoStabilization</b>
 (<code>boolean</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/methods_index_changes.html b/docs/html/sdk/api_diff/15/changes/methods_index_changes.html
index d22fde3..a4a1dce 100644
--- a/docs/html/sdk/api_diff/15/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/15/changes/methods_index_changes.html
@@ -63,7 +63,7 @@
 (<code>LayoutAlgorithm</code>)</A></nobr><br>
 <nobr><A HREF="android.speech.tts.TextToSpeech.html#android.speech.tts.TextToSpeech.setOnUtteranceCompletedListener_changed(android.speech.tts.TextToSpeech.OnUtteranceCompletedListener)" class="hiddenlink" target="rightframe">setOnUtteranceCompletedListener
 (<code>OnUtteranceCompletedListener</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/methods_index_removals.html b/docs/html/sdk/api_diff/15/changes/methods_index_removals.html
index b5aea4f..b9d406e 100644
--- a/docs/html/sdk/api_diff/15/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/15/changes/methods_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/packages_index_additions.html b/docs/html/sdk/api_diff/15/changes/packages_index_additions.html
index 1776064..cb6e9d5 100644
--- a/docs/html/sdk/api_diff/15/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/15/changes/packages_index_additions.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/packages_index_all.html b/docs/html/sdk/api_diff/15/changes/packages_index_all.html
index ef66568..4db1089 100644
--- a/docs/html/sdk/api_diff/15/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/15/changes/packages_index_all.html
@@ -71,7 +71,7 @@
 <A HREF="pkg_android.view.textservice.html" class="hiddenlink" target="rightframe">android.view.textservice</A><br>
 <A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/packages_index_changes.html b/docs/html/sdk/api_diff/15/changes/packages_index_changes.html
index a2b0a19..634a3ea 100644
--- a/docs/html/sdk/api_diff/15/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/15/changes/packages_index_changes.html
@@ -71,7 +71,7 @@
 <A HREF="pkg_android.view.textservice.html" class="hiddenlink" target="rightframe">android.view.textservice</A><br>
 <A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/packages_index_removals.html b/docs/html/sdk/api_diff/15/changes/packages_index_removals.html
index 9fd0f7e..eaaeb6c 100644
--- a/docs/html/sdk/api_diff/15/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/15/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.app.html b/docs/html/sdk/api_diff/15/changes/pkg_android.app.html
index 1b2e65b..a92180e 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.app.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.appwidget.html b/docs/html/sdk/api_diff/15/changes/pkg_android.appwidget.html
index 46bc1dc..63d6dd7 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.appwidget.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.appwidget.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/15/changes/pkg_android.bluetooth.html
index 16e9db7..1bec24c 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.bluetooth.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.bluetooth.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.content.html b/docs/html/sdk/api_diff/15/changes/pkg_android.content.html
index 036a96e..45fd6fa 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.content.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.database.html b/docs/html/sdk/api_diff/15/changes/pkg_android.database.html
index a8a2963..9367954 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.database.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/15/changes/pkg_android.graphics.html
index 8388466..f5d4f09 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.graphics.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/15/changes/pkg_android.hardware.html
index 7b02735..f5daf6c 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.hardware.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.html b/docs/html/sdk/api_diff/15/changes/pkg_android.html
index 3af011e..f6a2900 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.media.html b/docs/html/sdk/api_diff/15/changes/pkg_android.media.html
index e537fc9..81622bf 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.media.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/15/changes/pkg_android.opengl.html
index dff132d..1afb5cb 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.opengl.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.os.html b/docs/html/sdk/api_diff/15/changes/pkg_android.os.html
index ba005a0..7d2868e 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.os.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/15/changes/pkg_android.provider.html
index 93209fa..88573fc 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.provider.html
@@ -204,7 +204,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.service.textservice.html b/docs/html/sdk/api_diff/15/changes/pkg_android.service.textservice.html
index 5a14d82..cb5e605 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.service.textservice.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.service.textservice.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.service.wallpaper.html b/docs/html/sdk/api_diff/15/changes/pkg_android.service.wallpaper.html
index b6f52e4..9ba5bcc 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.service.wallpaper.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.service.wallpaper.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.speech.tts.html b/docs/html/sdk/api_diff/15/changes/pkg_android.speech.tts.html
index 1afe9e3..a826b71 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.speech.tts.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.speech.tts.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.text.style.html b/docs/html/sdk/api_diff/15/changes/pkg_android.text.style.html
index 5936ed5..105ad3f 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.text.style.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.text.style.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.view.accessibility.html b/docs/html/sdk/api_diff/15/changes/pkg_android.view.accessibility.html
index 7cca96d5..1607519 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.view.accessibility.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.view.accessibility.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.view.html b/docs/html/sdk/api_diff/15/changes/pkg_android.view.html
index a9c91e0..d0693ec 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.view.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.view.textservice.html b/docs/html/sdk/api_diff/15/changes/pkg_android.view.textservice.html
index 2d874b2..31bb50c 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.view.textservice.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.view.textservice.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/15/changes/pkg_android.webkit.html
index ad63378..62d2774 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.webkit.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/15/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/15/changes/pkg_android.widget.html
index 02e4b806..99c3bbb 100644
--- a/docs/html/sdk/api_diff/15/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/15/changes/pkg_android.widget.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/16/changes/alldiffs_index_additions.html
index d47f571..7c542a1 100644
--- a/docs/html/sdk/api_diff/16/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/16/changes/alldiffs_index_additions.html
@@ -2541,7 +2541,7 @@
 <!-- Method writeToParcel -->
 <nobr><A HREF="android.view.KeyCharacterMap.html#android.view.KeyCharacterMap.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe"><b>writeToParcel</b>
 (<code>Parcel, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/16/changes/alldiffs_index_all.html
index 02c78b4..136caf7 100644
--- a/docs/html/sdk/api_diff/16/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/16/changes/alldiffs_index_all.html
@@ -4037,7 +4037,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/16/changes/alldiffs_index_changes.html
index a043252..482e396 100644
--- a/docs/html/sdk/api_diff/16/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/16/changes/alldiffs_index_changes.html
@@ -1964,7 +1964,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/16/changes/alldiffs_index_removals.html
index 8175b8d..d0ee440 100644
--- a/docs/html/sdk/api_diff/16/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/16/changes/alldiffs_index_removals.html
@@ -268,7 +268,7 @@
 <!-- Constructor WebStorage -->
 <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.ctor_removed()" class="hiddenlink" target="rightframe"><strike>WebStorage</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/16/changes/android.Manifest.permission.html
index 3ec476f..260be39c 100644
--- a/docs/html/sdk/api_diff/16/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/16/changes/android.Manifest.permission.html
@@ -160,7 +160,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.R.attr.html b/docs/html/sdk/api_diff/16/changes/android.R.attr.html
index a4db7cf..347a291 100644
--- a/docs/html/sdk/api_diff/16/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/16/changes/android.R.attr.html
@@ -203,7 +203,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.R.style.html b/docs/html/sdk/api_diff/16/changes/android.R.style.html
index 988463c..097a5c1 100644
--- a/docs/html/sdk/api_diff/16/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/16/changes/android.R.style.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityService.html b/docs/html/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityService.html
index 227ab96..047bd74 100644
--- a/docs/html/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityService.html
+++ b/docs/html/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityService.html
@@ -277,7 +277,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityServiceInfo.html b/docs/html/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityServiceInfo.html
index c5f3e7c..067613d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityServiceInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityServiceInfo.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.animation.LayoutTransition.html b/docs/html/sdk/api_diff/16/changes/android.animation.LayoutTransition.html
index a170508..7f1fa3f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.animation.LayoutTransition.html
+++ b/docs/html/sdk/api_diff/16/changes/android.animation.LayoutTransition.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.Activity.html b/docs/html/sdk/api_diff/16/changes/android.app.Activity.html
index b15de59..fcaa6b3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.Activity.html
@@ -213,7 +213,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.MemoryInfo.html b/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.MemoryInfo.html
index 99c8ca0..a229d1a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.MemoryInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.MemoryInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.RunningAppProcessInfo.html b/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.RunningAppProcessInfo.html
index 041094e..8001e2b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.RunningAppProcessInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.RunningAppProcessInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.html b/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.html
index 309551c..5c7002a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.ActivityManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.DownloadManager.Request.html b/docs/html/sdk/api_diff/16/changes/android.app.DownloadManager.Request.html
index 97f5b10..4b475f1 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.DownloadManager.Request.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.DownloadManager.Request.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.Fragment.html b/docs/html/sdk/api_diff/16/changes/android.app.Fragment.html
index d60cecb..3ec3e1f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.Fragment.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.Fragment.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.KeyguardManager.html b/docs/html/sdk/api_diff/16/changes/android.app.KeyguardManager.html
index dd6dd34..33cae40 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.KeyguardManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.KeyguardManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.Notification.Builder.html b/docs/html/sdk/api_diff/16/changes/android.app.Notification.Builder.html
index 85d595a..2cf58b9 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.Notification.Builder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.Notification.Builder.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.Notification.html b/docs/html/sdk/api_diff/16/changes/android.app.Notification.html
index 842bd39..b2e5a67 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.Notification.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.Notification.html
@@ -167,7 +167,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/16/changes/android.app.PendingIntent.html
index d262768..8fd553e 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.PendingIntent.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.PendingIntent.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/16/changes/android.app.SearchManager.html
index 285781e..7c52a0b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.SearchManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.SearchManager.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/16/changes/android.app.WallpaperManager.html
index 1fb21b4..f830fa2 100644
--- a/docs/html/sdk/api_diff/16/changes/android.app.WallpaperManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.app.WallpaperManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetHostView.html b/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetHostView.html
index be9f0c8..113f94a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetHostView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetHostView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetManager.html b/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetManager.html
index 47b3c4a..b5177d1 100644
--- a/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetManager.html
@@ -201,7 +201,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetProvider.html b/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetProvider.html
index e8f677f..233fef6 100644
--- a/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetProvider.html
+++ b/docs/html/sdk/api_diff/16/changes/android.appwidget.AppWidgetProvider.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.bluetooth.BluetoothAdapter.html b/docs/html/sdk/api_diff/16/changes/android.bluetooth.BluetoothAdapter.html
index cb152f9..e236659 100644
--- a/docs/html/sdk/api_diff/16/changes/android.bluetooth.BluetoothAdapter.html
+++ b/docs/html/sdk/api_diff/16/changes/android.bluetooth.BluetoothAdapter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.AsyncTaskLoader.html b/docs/html/sdk/api_diff/16/changes/android.content.AsyncTaskLoader.html
index b153537..52b45ba 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.AsyncTaskLoader.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.AsyncTaskLoader.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.ClipData.Item.html b/docs/html/sdk/api_diff/16/changes/android.content.ClipData.Item.html
index 38c37b4..9c71555 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.ClipData.Item.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.ClipData.Item.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.ClipData.html b/docs/html/sdk/api_diff/16/changes/android.content.ClipData.html
index 2f60ec4..66f9aea 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.ClipData.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.ClipData.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.ClipDescription.html b/docs/html/sdk/api_diff/16/changes/android.content.ClipDescription.html
index dc32779..d8b27eb 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.ClipDescription.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.ClipDescription.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.ComponentCallbacks2.html b/docs/html/sdk/api_diff/16/changes/android.content.ComponentCallbacks2.html
index 061fa82..3c7bbe6 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.ComponentCallbacks2.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.ComponentCallbacks2.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.ContentProvider.html b/docs/html/sdk/api_diff/16/changes/android.content.ContentProvider.html
index 44e061b..46057c9 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.ContentProvider.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.ContentProvider.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.ContentProviderClient.html b/docs/html/sdk/api_diff/16/changes/android.content.ContentProviderClient.html
index a70ba55..183d93d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.ContentProviderClient.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.ContentProviderClient.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.ContentResolver.html b/docs/html/sdk/api_diff/16/changes/android.content.ContentResolver.html
index 773aa64..a81f825 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.ContentResolver.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.ContentResolver.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.Context.html b/docs/html/sdk/api_diff/16/changes/android.content.Context.html
index 8a07fda..a06e674 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.Context.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.ContextWrapper.html b/docs/html/sdk/api_diff/16/changes/android.content.ContextWrapper.html
index 4a856e4..2a43b69 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.ContextWrapper.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.ContextWrapper.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.Intent.html b/docs/html/sdk/api_diff/16/changes/android.content.Intent.html
index 05391d4..ac2ca65 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.Intent.html
@@ -205,7 +205,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.Loader.html b/docs/html/sdk/api_diff/16/changes/android.content.Loader.html
index 1fdb042..0cbf5cb 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.Loader.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.Loader.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/16/changes/android.content.pm.ActivityInfo.html
index a2db676..a64b5b0 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.pm.ActivityInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.pm.PackageInfo.html b/docs/html/sdk/api_diff/16/changes/android.content.pm.PackageInfo.html
index 408e4c2..54991d9 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.pm.PackageInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.pm.PackageInfo.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/16/changes/android.content.pm.PackageManager.html
index 65c5f21..27d08f0 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.pm.PackageManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.pm.PermissionInfo.html b/docs/html/sdk/api_diff/16/changes/android.content.pm.PermissionInfo.html
index 6000877..47c27f9 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.pm.PermissionInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.pm.PermissionInfo.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.pm.ServiceInfo.html b/docs/html/sdk/api_diff/16/changes/android.content.pm.ServiceInfo.html
index 07018f0..1c8f2f3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.pm.ServiceInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.pm.ServiceInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/16/changes/android.content.res.Configuration.html
index 00f3f75a..93394ee 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.res.Configuration.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.content.res.Resources.html b/docs/html/sdk/api_diff/16/changes/android.content.res.Resources.html
index dca61d8..564df87 100644
--- a/docs/html/sdk/api_diff/16/changes/android.content.res.Resources.html
+++ b/docs/html/sdk/api_diff/16/changes/android.content.res.Resources.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.AbstractCursor.html b/docs/html/sdk/api_diff/16/changes/android.database.AbstractCursor.html
index 7a42022..02a8859 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.AbstractCursor.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.AbstractCursor.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.ContentObservable.html b/docs/html/sdk/api_diff/16/changes/android.database.ContentObservable.html
index ec458e4..b8d2d87 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.ContentObservable.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.ContentObservable.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.ContentObserver.html b/docs/html/sdk/api_diff/16/changes/android.database.ContentObserver.html
index 4f376b4..69397fa 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.ContentObserver.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.ContentObserver.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.Cursor.html b/docs/html/sdk/api_diff/16/changes/android.database.Cursor.html
index 024e8d0..c9682ed 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.Cursor.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.Cursor.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.CursorWindow.html b/docs/html/sdk/api_diff/16/changes/android.database.CursorWindow.html
index c42f140..c3ee836 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.CursorWindow.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.CursorWindow.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.SQLException.html b/docs/html/sdk/api_diff/16/changes/android.database.SQLException.html
index 1f6e1c1..5c3e50e 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.SQLException.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.SQLException.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteClosable.html b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteClosable.html
index cb1552d..46d54dc 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteClosable.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteClosable.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteDatabase.html b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteDatabase.html
index 12ad842..f51e32b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteDatabase.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteDatabase.html
@@ -211,7 +211,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteException.html b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteException.html
index d6e4ebc..d6f007cb 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteException.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteException.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteOpenHelper.html b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteOpenHelper.html
index 08a21fe..9d88207 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteOpenHelper.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteOpenHelper.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteProgram.html b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteProgram.html
index 854d9fc..cdcc41e 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteProgram.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteProgram.html
@@ -204,7 +204,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQuery.html b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQuery.html
index eeec07c..430b9e6 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQuery.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQuery.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQueryBuilder.html b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQueryBuilder.html
index 9863ac3..574e6e9 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQueryBuilder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQueryBuilder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteStatement.html b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteStatement.html
index 3df6e69..31767cb 100644
--- a/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteStatement.html
+++ b/docs/html/sdk/api_diff/16/changes/android.database.sqlite.SQLiteStatement.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.drm.DrmManagerClient.html b/docs/html/sdk/api_diff/16/changes/android.drm.DrmManagerClient.html
index 5eee746..3e0cfd3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.drm.DrmManagerClient.html
+++ b/docs/html/sdk/api_diff/16/changes/android.drm.DrmManagerClient.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.Action.html b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.Action.html
index 2aaf764..0943f86 100644
--- a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.Action.html
+++ b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.Action.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.DrmObjectType.html b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.DrmObjectType.html
index 122e3ae..ab7ed36 100644
--- a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.DrmObjectType.html
+++ b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.DrmObjectType.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.Playback.html b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.Playback.html
index f2038d9..00d3609 100644
--- a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.Playback.html
+++ b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.Playback.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.RightsStatus.html b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.RightsStatus.html
index 37b04a8..35084ff 100644
--- a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.RightsStatus.html
+++ b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.RightsStatus.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.html b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.html
index 7039935..08ff56f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.html
+++ b/docs/html/sdk/api_diff/16/changes/android.drm.DrmStore.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.drm.DrmSupportInfo.html b/docs/html/sdk/api_diff/16/changes/android.drm.DrmSupportInfo.html
index ab22f87..c11df45 100644
--- a/docs/html/sdk/api_diff/16/changes/android.drm.DrmSupportInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.drm.DrmSupportInfo.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.graphics.AvoidXfermode.html b/docs/html/sdk/api_diff/16/changes/android.graphics.AvoidXfermode.html
index e9d0ebe..b6dd0d3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.graphics.AvoidXfermode.html
+++ b/docs/html/sdk/api_diff/16/changes/android.graphics.AvoidXfermode.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.graphics.Camera.html b/docs/html/sdk/api_diff/16/changes/android.graphics.Camera.html
index f75d71b..2173466 100644
--- a/docs/html/sdk/api_diff/16/changes/android.graphics.Camera.html
+++ b/docs/html/sdk/api_diff/16/changes/android.graphics.Camera.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.graphics.Canvas.html b/docs/html/sdk/api_diff/16/changes/android.graphics.Canvas.html
index f025bc0..a8c8ae2 100644
--- a/docs/html/sdk/api_diff/16/changes/android.graphics.Canvas.html
+++ b/docs/html/sdk/api_diff/16/changes/android.graphics.Canvas.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.graphics.Paint.html b/docs/html/sdk/api_diff/16/changes/android.graphics.Paint.html
index bad0f84..5b1b14c 100644
--- a/docs/html/sdk/api_diff/16/changes/android.graphics.Paint.html
+++ b/docs/html/sdk/api_diff/16/changes/android.graphics.Paint.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.graphics.PixelFormat.html b/docs/html/sdk/api_diff/16/changes/android.graphics.PixelFormat.html
index ea2342b..8e5f10f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.graphics.PixelFormat.html
+++ b/docs/html/sdk/api_diff/16/changes/android.graphics.PixelFormat.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.graphics.PixelXorXfermode.html b/docs/html/sdk/api_diff/16/changes/android.graphics.PixelXorXfermode.html
index 147d373..5af6611 100644
--- a/docs/html/sdk/api_diff/16/changes/android.graphics.PixelXorXfermode.html
+++ b/docs/html/sdk/api_diff/16/changes/android.graphics.PixelXorXfermode.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.graphics.SurfaceTexture.html b/docs/html/sdk/api_diff/16/changes/android.graphics.SurfaceTexture.html
index ecd2e9f..48da8b8 100644
--- a/docs/html/sdk/api_diff/16/changes/android.graphics.SurfaceTexture.html
+++ b/docs/html/sdk/api_diff/16/changes/android.graphics.SurfaceTexture.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.graphics.drawable.GradientDrawable.html b/docs/html/sdk/api_diff/16/changes/android.graphics.drawable.GradientDrawable.html
index 387d2d9..d8680d7 100644
--- a/docs/html/sdk/api_diff/16/changes/android.graphics.drawable.GradientDrawable.html
+++ b/docs/html/sdk/api_diff/16/changes/android.graphics.drawable.GradientDrawable.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/16/changes/android.hardware.Camera.html
index 5329266..e11bb6d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/16/changes/android.hardware.Camera.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.hardware.SensorManager.html b/docs/html/sdk/api_diff/16/changes/android.hardware.SensorManager.html
index 6b8316c..2405919 100644
--- a/docs/html/sdk/api_diff/16/changes/android.hardware.SensorManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.hardware.SensorManager.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/16/changes/android.media.AudioManager.html
index 4ad8ede..94ed002 100644
--- a/docs/html/sdk/api_diff/16/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.media.AudioManager.html
@@ -211,7 +211,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.media.AudioRecord.html b/docs/html/sdk/api_diff/16/changes/android.media.AudioRecord.html
index 00502f1..975981f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.media.AudioRecord.html
+++ b/docs/html/sdk/api_diff/16/changes/android.media.AudioRecord.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.media.MediaPlayer.html b/docs/html/sdk/api_diff/16/changes/android.media.MediaPlayer.html
index 602686e..b2e7a67 100644
--- a/docs/html/sdk/api_diff/16/changes/android.media.MediaPlayer.html
+++ b/docs/html/sdk/api_diff/16/changes/android.media.MediaPlayer.html
@@ -200,7 +200,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.AudioEncoder.html b/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.AudioEncoder.html
index 4672d3a..9d0cbf8 100644
--- a/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.AudioEncoder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.AudioEncoder.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.OutputFormat.html b/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.OutputFormat.html
index cc155eb..2cb27a3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.OutputFormat.html
+++ b/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.OutputFormat.html
@@ -125,7 +125,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.html
index ab168ed..51d6aa3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.media.MediaRecorder.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.media.ToneGenerator.html b/docs/html/sdk/api_diff/16/changes/android.media.ToneGenerator.html
index db2c2436..d62cf9c 100644
--- a/docs/html/sdk/api_diff/16/changes/android.media.ToneGenerator.html
+++ b/docs/html/sdk/api_diff/16/changes/android.media.ToneGenerator.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.media.audiofx.Visualizer.html b/docs/html/sdk/api_diff/16/changes/android.media.audiofx.Visualizer.html
index 2d359ea..dc3431f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.media.audiofx.Visualizer.html
+++ b/docs/html/sdk/api_diff/16/changes/android.media.audiofx.Visualizer.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.net.ConnectivityManager.html b/docs/html/sdk/api_diff/16/changes/android.net.ConnectivityManager.html
index 151f58a..8ada3da 100644
--- a/docs/html/sdk/api_diff/16/changes/android.net.ConnectivityManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.net.ConnectivityManager.html
@@ -125,7 +125,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.net.SSLCertificateSocketFactory.html b/docs/html/sdk/api_diff/16/changes/android.net.SSLCertificateSocketFactory.html
index 69cf35d..e711f25 100644
--- a/docs/html/sdk/api_diff/16/changes/android.net.SSLCertificateSocketFactory.html
+++ b/docs/html/sdk/api_diff/16/changes/android.net.SSLCertificateSocketFactory.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.net.Uri.html b/docs/html/sdk/api_diff/16/changes/android.net.Uri.html
index c8d747b..0e50cbe 100644
--- a/docs/html/sdk/api_diff/16/changes/android.net.Uri.html
+++ b/docs/html/sdk/api_diff/16/changes/android.net.Uri.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.net.wifi.p2p.WifiP2pManager.html b/docs/html/sdk/api_diff/16/changes/android.net.wifi.p2p.WifiP2pManager.html
index 1605831..2aeac8f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.net.wifi.p2p.WifiP2pManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.net.wifi.p2p.WifiP2pManager.html
@@ -221,7 +221,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.nfc.FormatException.html b/docs/html/sdk/api_diff/16/changes/android.nfc.FormatException.html
index 2d6b396..12a4d88 100644
--- a/docs/html/sdk/api_diff/16/changes/android.nfc.FormatException.html
+++ b/docs/html/sdk/api_diff/16/changes/android.nfc.FormatException.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.nfc.NdefMessage.html b/docs/html/sdk/api_diff/16/changes/android.nfc.NdefMessage.html
index 9a8db58..2044ab0 100644
--- a/docs/html/sdk/api_diff/16/changes/android.nfc.NdefMessage.html
+++ b/docs/html/sdk/api_diff/16/changes/android.nfc.NdefMessage.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.nfc.NdefRecord.html b/docs/html/sdk/api_diff/16/changes/android.nfc.NdefRecord.html
index 0eab428..cb75fbe 100644
--- a/docs/html/sdk/api_diff/16/changes/android.nfc.NdefRecord.html
+++ b/docs/html/sdk/api_diff/16/changes/android.nfc.NdefRecord.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.nfc.NfcAdapter.html b/docs/html/sdk/api_diff/16/changes/android.nfc.NfcAdapter.html
index 4d22a1a..3858fa2 100644
--- a/docs/html/sdk/api_diff/16/changes/android.nfc.NfcAdapter.html
+++ b/docs/html/sdk/api_diff/16/changes/android.nfc.NfcAdapter.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.nfc.tech.IsoDep.html b/docs/html/sdk/api_diff/16/changes/android.nfc.tech.IsoDep.html
index b6a9cf6..e2f71f9 100644
--- a/docs/html/sdk/api_diff/16/changes/android.nfc.tech.IsoDep.html
+++ b/docs/html/sdk/api_diff/16/changes/android.nfc.tech.IsoDep.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/16/changes/android.os.Build.VERSION_CODES.html
index 422d0c1..3423e5b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/16/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.os.ParcelFileDescriptor.html b/docs/html/sdk/api_diff/16/changes/android.os.ParcelFileDescriptor.html
index dec148b..8bd272a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.os.ParcelFileDescriptor.html
+++ b/docs/html/sdk/api_diff/16/changes/android.os.ParcelFileDescriptor.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.os.Process.html b/docs/html/sdk/api_diff/16/changes/android.os.Process.html
index 7a7c4d5..df0e7b1 100644
--- a/docs/html/sdk/api_diff/16/changes/android.os.Process.html
+++ b/docs/html/sdk/api_diff/16/changes/android.os.Process.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.os.StrictMode.VmPolicy.Builder.html b/docs/html/sdk/api_diff/16/changes/android.os.StrictMode.VmPolicy.Builder.html
index c5c332d..32cd67d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.os.StrictMode.VmPolicy.Builder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.os.StrictMode.VmPolicy.Builder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.os.TokenWatcher.html b/docs/html/sdk/api_diff/16/changes/android.os.TokenWatcher.html
index 084af83..3d9e643 100644
--- a/docs/html/sdk/api_diff/16/changes/android.os.TokenWatcher.html
+++ b/docs/html/sdk/api_diff/16/changes/android.os.TokenWatcher.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.os.Vibrator.html b/docs/html/sdk/api_diff/16/changes/android.os.Vibrator.html
index 6b20dac..58c8d21 100644
--- a/docs/html/sdk/api_diff/16/changes/android.os.Vibrator.html
+++ b/docs/html/sdk/api_diff/16/changes/android.os.Vibrator.html
@@ -142,7 +142,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.AttendeesColumns.html b/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.AttendeesColumns.html
index f1a9577..05b798e 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.AttendeesColumns.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.AttendeesColumns.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.EventsColumns.html b/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.EventsColumns.html
index 868f1de..3441dfa 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.EventsColumns.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.EventsColumns.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.RemindersColumns.html b/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.RemindersColumns.html
index 1d9e485..e82f81d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.RemindersColumns.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.RemindersColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.html b/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.html
index 172b1ed..5dbf5c0 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.CalendarContract.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.CommonDataKinds.Phone.html b/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.CommonDataKinds.Phone.html
index 21d29b8..0ce22d2 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.CommonDataKinds.Phone.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.CommonDataKinds.Phone.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.Contacts.html b/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.Contacts.html
index a0f3ad6..220aa8f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.Contacts.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.Contacts.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.DataUsageFeedback.html b/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.DataUsageFeedback.html
index e27e55c..3446e1d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.DataUsageFeedback.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.DataUsageFeedback.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.PhoneLookupColumns.html b/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.PhoneLookupColumns.html
index 086f29a..5173cf2 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.PhoneLookupColumns.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.ContactsContract.PhoneLookupColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.MediaStore.MediaColumns.html b/docs/html/sdk/api_diff/16/changes/android.provider.MediaStore.MediaColumns.html
index 1e9b8dd..56ea462 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.MediaStore.MediaColumns.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.MediaStore.MediaColumns.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/16/changes/android.provider.Settings.Secure.html
index 85b97e3..85fd43d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.Settings.Secure.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/16/changes/android.provider.Settings.System.html
index b13218a..716f3be 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.Settings.System.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/16/changes/android.provider.Settings.html
index fdd2e82..080637b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.Settings.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.provider.UserDictionary.Words.html b/docs/html/sdk/api_diff/16/changes/android.provider.UserDictionary.Words.html
index 048f9e7..27e6984 100644
--- a/docs/html/sdk/api_diff/16/changes/android.provider.UserDictionary.Words.html
+++ b/docs/html/sdk/api_diff/16/changes/android.provider.UserDictionary.Words.html
@@ -167,7 +167,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Allocation.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Allocation.html
index a63823f..cdbfc96 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Allocation.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Allocation.html
@@ -172,7 +172,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Element.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Element.html
index c2e53fe..c803643 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Element.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Element.html
@@ -189,7 +189,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.EntryType.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.EntryType.html
index ef49db3..ff01e2f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.EntryType.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.EntryType.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.IndexEntry.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.IndexEntry.html
index 5d5f307..5b4eeae 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.IndexEntry.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.IndexEntry.html
@@ -142,7 +142,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.html
index 3f65c2c..3de4f0c 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.FileA3D.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Font.Style.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Font.Style.html
index 85bca91..9f95477 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Font.Style.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Font.Style.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Font.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Font.html
index b9efb85..864319a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Font.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Font.html
@@ -152,7 +152,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.AllocationBuilder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.AllocationBuilder.html
index faf6237..c928f5e 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.AllocationBuilder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.AllocationBuilder.html
@@ -180,7 +180,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.Builder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.Builder.html
index 1ed9a63..b427b73 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.Builder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.Builder.html
@@ -200,7 +200,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.Primitive.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.Primitive.html
index dc94449..04106d1 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.Primitive.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.Primitive.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.TriangleMeshBuilder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.TriangleMeshBuilder.html
index 30772e0..34e7382 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.TriangleMeshBuilder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.TriangleMeshBuilder.html
@@ -225,7 +225,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.html
index a7d6b19..5adb660 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Mesh.html
@@ -152,7 +152,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Program.BaseProgramBuilder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Program.BaseProgramBuilder.html
index f2ece67..ff55bc4 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Program.BaseProgramBuilder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Program.BaseProgramBuilder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Program.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Program.html
index cea3097..8a290a1 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Program.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Program.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.Builder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.Builder.html
index b6c50d3..96f55e8 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.Builder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.Builder.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.html
index 82f0614..577eb43 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode.html
index 42e4c41..334f006 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.Format.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.Format.html
index 6b0d42a..736ed3b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.Format.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.Format.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.html
index 866e75e..4f03add 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.html
@@ -177,7 +177,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.html
index 043927d..d4a745c 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.Builder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.Builder.html
index 7a36129..44cd976 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.Builder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.Builder.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.CullMode.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.CullMode.html
index 135a7bf..5729ffa 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.CullMode.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.CullMode.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.html
index 60042f4..6ff37eb 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.html
@@ -154,7 +154,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramStore.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramStore.html
index 4e96e4f..63f9bd2 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramStore.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramStore.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.Builder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.Builder.html
index adfdd1c..f28b1e8 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.Builder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.Builder.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.html
index 278079f..14eae0a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.html
@@ -116,7 +116,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Builder.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Builder.html
index 52bbdf9..5957b82 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Builder.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Builder.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Constants.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Constants.html
index 274ae05..63f0746 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Constants.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Constants.html
@@ -160,7 +160,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.html
index 6b1894f..cdf9d6b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.RSSurfaceView.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.RSSurfaceView.html
index 7c9d264b..d214908 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.RSSurfaceView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.RSSurfaceView.html
@@ -220,7 +220,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.RSTextureView.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.RSTextureView.html
index b0b87ae..c581eaf 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.RSTextureView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.RSTextureView.html
@@ -230,7 +230,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.SurfaceConfig.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.SurfaceConfig.html
index e07b1ac..c600f08 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.SurfaceConfig.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.SurfaceConfig.html
@@ -170,7 +170,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.html
index 6cf0f6c..16425d5 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.html
@@ -230,7 +230,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Sampler.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Sampler.html
index 1345dae5..38b6b93 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Sampler.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Sampler.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.renderscript.Script.html b/docs/html/sdk/api_diff/16/changes/android.renderscript.Script.html
index 8fc9924..0c100b7 100644
--- a/docs/html/sdk/api_diff/16/changes/android.renderscript.Script.html
+++ b/docs/html/sdk/api_diff/16/changes/android.renderscript.Script.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.security.KeyChain.html b/docs/html/sdk/api_diff/16/changes/android.security.KeyChain.html
index 92e57b5..cb78be6 100644
--- a/docs/html/sdk/api_diff/16/changes/android.security.KeyChain.html
+++ b/docs/html/sdk/api_diff/16/changes/android.security.KeyChain.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.service.textservice.SpellCheckerService.Session.html b/docs/html/sdk/api_diff/16/changes/android.service.textservice.SpellCheckerService.Session.html
index c83d21f..87a14e2 100644
--- a/docs/html/sdk/api_diff/16/changes/android.service.textservice.SpellCheckerService.Session.html
+++ b/docs/html/sdk/api_diff/16/changes/android.service.textservice.SpellCheckerService.Session.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.speech.RecognizerIntent.html b/docs/html/sdk/api_diff/16/changes/android.speech.RecognizerIntent.html
index d869c23..bc2998a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.speech.RecognizerIntent.html
+++ b/docs/html/sdk/api_diff/16/changes/android.speech.RecognizerIntent.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.test.AssertionFailedError.html b/docs/html/sdk/api_diff/16/changes/android.test.AssertionFailedError.html
index feba168..052da23 100644
--- a/docs/html/sdk/api_diff/16/changes/android.test.AssertionFailedError.html
+++ b/docs/html/sdk/api_diff/16/changes/android.test.AssertionFailedError.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.test.ComparisonFailure.html b/docs/html/sdk/api_diff/16/changes/android.test.ComparisonFailure.html
index 4f9406d..b6cd956 100644
--- a/docs/html/sdk/api_diff/16/changes/android.test.ComparisonFailure.html
+++ b/docs/html/sdk/api_diff/16/changes/android.test.ComparisonFailure.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.test.InstrumentationTestSuite.html b/docs/html/sdk/api_diff/16/changes/android.test.InstrumentationTestSuite.html
index 41f0bc0..5906889 100644
--- a/docs/html/sdk/api_diff/16/changes/android.test.InstrumentationTestSuite.html
+++ b/docs/html/sdk/api_diff/16/changes/android.test.InstrumentationTestSuite.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.test.mock.MockContext.html b/docs/html/sdk/api_diff/16/changes/android.test.mock.MockContext.html
index a44c902..abffd44 100644
--- a/docs/html/sdk/api_diff/16/changes/android.test.mock.MockContext.html
+++ b/docs/html/sdk/api_diff/16/changes/android.test.mock.MockContext.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.text.Html.html b/docs/html/sdk/api_diff/16/changes/android.text.Html.html
index a0361cd..a14cc7e 100644
--- a/docs/html/sdk/api_diff/16/changes/android.text.Html.html
+++ b/docs/html/sdk/api_diff/16/changes/android.text.Html.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.util.DisplayMetrics.html b/docs/html/sdk/api_diff/16/changes/android.util.DisplayMetrics.html
index 2f93ccf..93b3ed1 100644
--- a/docs/html/sdk/api_diff/16/changes/android.util.DisplayMetrics.html
+++ b/docs/html/sdk/api_diff/16/changes/android.util.DisplayMetrics.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ActionMode.html b/docs/html/sdk/api_diff/16/changes/android.view.ActionMode.html
index 0633827..074c726 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ActionMode.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ActionMode.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ActionProvider.html b/docs/html/sdk/api_diff/16/changes/android.view.ActionProvider.html
index 9c65f8f..3a46ccb 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ActionProvider.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ActionProvider.html
@@ -154,7 +154,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.Display.html b/docs/html/sdk/api_diff/16/changes/android.view.Display.html
index c519edf..9753fad 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.Display.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.Display.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.Gravity.html b/docs/html/sdk/api_diff/16/changes/android.view.Gravity.html
index 7e6daea..f3ae68111 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.Gravity.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.Gravity.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.InputDevice.html b/docs/html/sdk/api_diff/16/changes/android.view.InputDevice.html
index 9515708..df09892 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.InputDevice.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.InputDevice.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.InputEvent.html b/docs/html/sdk/api_diff/16/changes/android.view.InputEvent.html
index e3b872c..af85c46 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.InputEvent.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.InputEvent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.KeyCharacterMap.html b/docs/html/sdk/api_diff/16/changes/android.view.KeyCharacterMap.html
index e18e9b5..8405f35 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.KeyCharacterMap.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.KeyCharacterMap.html
@@ -131,7 +131,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/16/changes/android.view.KeyEvent.html
index bedd73f..d54a1c9 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.KeyEvent.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.TextureView.html b/docs/html/sdk/api_diff/16/changes/android.view.TextureView.html
index e8fd732..f91d0888 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.TextureView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.TextureView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.View.AccessibilityDelegate.html b/docs/html/sdk/api_diff/16/changes/android.view.View.AccessibilityDelegate.html
index 6350eee..924313d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.View.AccessibilityDelegate.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.View.AccessibilityDelegate.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.View.html b/docs/html/sdk/api_diff/16/changes/android.view.View.html
index 015f638..ae8e90b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.View.html
@@ -541,7 +541,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.HierarchyTraceType.html b/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.HierarchyTraceType.html
index e908fb5..f1eccd1 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.HierarchyTraceType.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.HierarchyTraceType.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.RecyclerTraceType.html b/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.RecyclerTraceType.html
index 6fa0d11..4059a7a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.RecyclerTraceType.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.RecyclerTraceType.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.html b/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.html
index 9bc7af1..cdeff88 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ViewDebug.html
@@ -187,7 +187,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/16/changes/android.view.ViewGroup.html
index e30c4b3..08d98ac 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ViewGroup.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ViewGroup.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ViewParent.html b/docs/html/sdk/api_diff/16/changes/android.view.ViewParent.html
index fc32c23..a721ba0 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ViewParent.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ViewParent.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ViewPropertyAnimator.html b/docs/html/sdk/api_diff/16/changes/android.view.ViewPropertyAnimator.html
index 49be2b7..79e3b4f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ViewPropertyAnimator.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ViewPropertyAnimator.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ViewStub.html b/docs/html/sdk/api_diff/16/changes/android.view.ViewStub.html
index ff1b0fe..1fe043d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ViewStub.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ViewStub.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.ViewTreeObserver.html b/docs/html/sdk/api_diff/16/changes/android.view.ViewTreeObserver.html
index 8ba4bab..936cd0a 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.ViewTreeObserver.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.ViewTreeObserver.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityEvent.html b/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityEvent.html
index 0c51ee4..1c5facb 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityEvent.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityEvent.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityNodeInfo.html b/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityNodeInfo.html
index 7d3e447..a6edc26 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityNodeInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityNodeInfo.html
@@ -333,7 +333,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityRecord.html b/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityRecord.html
index 9637ca2..fb3aca8 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityRecord.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityRecord.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.inputmethod.EditorInfo.html b/docs/html/sdk/api_diff/16/changes/android.view.inputmethod.EditorInfo.html
index bd05573..ab74ec9 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.inputmethod.EditorInfo.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.inputmethod.EditorInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.inputmethod.InputMethodManager.html b/docs/html/sdk/api_diff/16/changes/android.view.inputmethod.InputMethodManager.html
index c8194cf..288b2ee 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.inputmethod.InputMethodManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.inputmethod.InputMethodManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener.html b/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener.html
index 0873414..4bc2f5e 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.html b/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.html
index 32fc681..7822de4 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSubtype.html b/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSubtype.html
index 068b5b8..d42587e 100644
--- a/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSubtype.html
+++ b/docs/html/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSubtype.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.webkit.CookieManager.html b/docs/html/sdk/api_diff/16/changes/android.webkit.CookieManager.html
index b740796..e8b6d77 100644
--- a/docs/html/sdk/api_diff/16/changes/android.webkit.CookieManager.html
+++ b/docs/html/sdk/api_diff/16/changes/android.webkit.CookieManager.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.webkit.GeolocationPermissions.html b/docs/html/sdk/api_diff/16/changes/android.webkit.GeolocationPermissions.html
index 3ffe9a7..c276185 100644
--- a/docs/html/sdk/api_diff/16/changes/android.webkit.GeolocationPermissions.html
+++ b/docs/html/sdk/api_diff/16/changes/android.webkit.GeolocationPermissions.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.webkit.JsResult.html b/docs/html/sdk/api_diff/16/changes/android.webkit.JsResult.html
index 8f2577f..627a831 100644
--- a/docs/html/sdk/api_diff/16/changes/android.webkit.JsResult.html
+++ b/docs/html/sdk/api_diff/16/changes/android.webkit.JsResult.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.webkit.WebIconDatabase.html b/docs/html/sdk/api_diff/16/changes/android.webkit.WebIconDatabase.html
index 26024f2..d2aafcd 100644
--- a/docs/html/sdk/api_diff/16/changes/android.webkit.WebIconDatabase.html
+++ b/docs/html/sdk/api_diff/16/changes/android.webkit.WebIconDatabase.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/16/changes/android.webkit.WebSettings.html
index 6337887..f89bdf3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/16/changes/android.webkit.WebSettings.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.webkit.WebStorage.html b/docs/html/sdk/api_diff/16/changes/android.webkit.WebStorage.html
index b900c0a..6b7346c 100644
--- a/docs/html/sdk/api_diff/16/changes/android.webkit.WebStorage.html
+++ b/docs/html/sdk/api_diff/16/changes/android.webkit.WebStorage.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.webkit.WebView.HitTestResult.html b/docs/html/sdk/api_diff/16/changes/android.webkit.WebView.HitTestResult.html
index f3a25c0..4cd4a9b7 100644
--- a/docs/html/sdk/api_diff/16/changes/android.webkit.WebView.HitTestResult.html
+++ b/docs/html/sdk/api_diff/16/changes/android.webkit.WebView.HitTestResult.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/16/changes/android.webkit.WebView.html
index e009999..23f4f93 100644
--- a/docs/html/sdk/api_diff/16/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.webkit.WebView.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.AbsSeekBar.html b/docs/html/sdk/api_diff/16/changes/android.widget.AbsSeekBar.html
index e5ca3d5..0f0796f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.AbsSeekBar.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.AbsSeekBar.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.AdapterViewAnimator.html b/docs/html/sdk/api_diff/16/changes/android.widget.AdapterViewAnimator.html
index 1b484be..7f17ba0 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.AdapterViewAnimator.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.AdapterViewAnimator.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.AdapterViewFlipper.html b/docs/html/sdk/api_diff/16/changes/android.widget.AdapterViewFlipper.html
index aa2f295..b8daa6c 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.AdapterViewFlipper.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.AdapterViewFlipper.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.AutoCompleteTextView.html b/docs/html/sdk/api_diff/16/changes/android.widget.AutoCompleteTextView.html
index d32a076..a81d77d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.AutoCompleteTextView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.AutoCompleteTextView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.CalendarView.html b/docs/html/sdk/api_diff/16/changes/android.widget.CalendarView.html
index fd7b0e4..bb115d3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.CalendarView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.CalendarView.html
@@ -234,7 +234,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.CheckedTextView.html b/docs/html/sdk/api_diff/16/changes/android.widget.CheckedTextView.html
index 4d257dc..2675673 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.CheckedTextView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.CheckedTextView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.FrameLayout.html b/docs/html/sdk/api_diff/16/changes/android.widget.FrameLayout.html
index 2d18399..e66de8c 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.FrameLayout.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.FrameLayout.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.Gallery.html b/docs/html/sdk/api_diff/16/changes/android.widget.Gallery.html
index bea43e60..40c65a5 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.Gallery.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.Gallery.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.GridLayout.html b/docs/html/sdk/api_diff/16/changes/android.widget.GridLayout.html
index 70600ae..0b4c8ec 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.GridLayout.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.GridLayout.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.GridView.html b/docs/html/sdk/api_diff/16/changes/android.widget.GridView.html
index 31a0a95..087c030 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.GridView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.GridView.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.ImageView.html b/docs/html/sdk/api_diff/16/changes/android.widget.ImageView.html
index bb505bf..53457e3 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.ImageView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.ImageView.html
@@ -175,7 +175,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.LinearLayout.html b/docs/html/sdk/api_diff/16/changes/android.widget.LinearLayout.html
index f7717ec..9a9bd2d 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.LinearLayout.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.LinearLayout.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.RelativeLayout.html b/docs/html/sdk/api_diff/16/changes/android.widget.RelativeLayout.html
index 75ce6e6..925c935 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.RelativeLayout.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.RelativeLayout.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/16/changes/android.widget.RemoteViews.html
index c05ae10..9544af0 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.RemoteViews.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.SearchView.html b/docs/html/sdk/api_diff/16/changes/android.widget.SearchView.html
index 0cd0cfb..76e9307 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.SearchView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.SearchView.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.Spinner.html b/docs/html/sdk/api_diff/16/changes/android.widget.Spinner.html
index 0d571994..c0ff14b 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.Spinner.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.Spinner.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.Switch.html b/docs/html/sdk/api_diff/16/changes/android.widget.Switch.html
index 6fa62d40..9b6c27f 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.Switch.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.Switch.html
@@ -185,7 +185,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/android.widget.TextView.html b/docs/html/sdk/api_diff/16/changes/android.widget.TextView.html
index 0cb483b..5b1ef10 100644
--- a/docs/html/sdk/api_diff/16/changes/android.widget.TextView.html
+++ b/docs/html/sdk/api_diff/16/changes/android.widget.TextView.html
@@ -256,7 +256,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/changes-summary.html b/docs/html/sdk/api_diff/16/changes/changes-summary.html
index 93c9aaa..63e47c3 100644
--- a/docs/html/sdk/api_diff/16/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/16/changes/changes-summary.html
@@ -423,7 +423,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/classes_index_additions.html b/docs/html/sdk/api_diff/16/changes/classes_index_additions.html
index 4cd366a..34642e0 100644
--- a/docs/html/sdk/api_diff/16/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/16/changes/classes_index_additions.html
@@ -234,7 +234,7 @@
 <A HREF="pkg_android.net.wifi.p2p.html#WifiP2pManager.DnsSdTxtRecordListener" class="hiddenlink" target="rightframe"><b><i>WifiP2pManager.DnsSdTxtRecordListener</i></b></A><br>
 <A HREF="pkg_android.net.wifi.p2p.html#WifiP2pManager.ServiceResponseListener" class="hiddenlink" target="rightframe"><b><i>WifiP2pManager.ServiceResponseListener</i></b></A><br>
 <A HREF="pkg_android.net.wifi.p2p.html#WifiP2pManager.UpnpServiceResponseListener" class="hiddenlink" target="rightframe"><b><i>WifiP2pManager.UpnpServiceResponseListener</i></b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/classes_index_all.html b/docs/html/sdk/api_diff/16/changes/classes_index_all.html
index 6caf76c..ecb6f13 100644
--- a/docs/html/sdk/api_diff/16/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/16/changes/classes_index_all.html
@@ -868,7 +868,7 @@
 <A HREF="pkg_android.net.wifi.p2p.html#WifiP2pManager.DnsSdTxtRecordListener" class="hiddenlink" target="rightframe"><b><i>WifiP2pManager.DnsSdTxtRecordListener</i></b></A><br>
 <A HREF="pkg_android.net.wifi.p2p.html#WifiP2pManager.ServiceResponseListener" class="hiddenlink" target="rightframe"><b><i>WifiP2pManager.ServiceResponseListener</i></b></A><br>
 <A HREF="pkg_android.net.wifi.p2p.html#WifiP2pManager.UpnpServiceResponseListener" class="hiddenlink" target="rightframe"><b><i>WifiP2pManager.UpnpServiceResponseListener</i></b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/classes_index_changes.html b/docs/html/sdk/api_diff/16/changes/classes_index_changes.html
index 987bdc7..ba9499f 100644
--- a/docs/html/sdk/api_diff/16/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/16/changes/classes_index_changes.html
@@ -765,7 +765,7 @@
 <A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
 <A HREF="android.webkit.WebView.HitTestResult.html" class="hiddenlink" target="rightframe">WebView.HitTestResult</A><br>
 <A HREF="android.net.wifi.p2p.WifiP2pManager.html" class="hiddenlink" target="rightframe">WifiP2pManager</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/classes_index_removals.html b/docs/html/sdk/api_diff/16/changes/classes_index_removals.html
index e6da73f..af7f1d0 100644
--- a/docs/html/sdk/api_diff/16/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/16/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/16/changes/constructors_index_additions.html
index 6fe939a..ad1d44a 100644
--- a/docs/html/sdk/api_diff/16/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/16/changes/constructors_index_additions.html
@@ -127,7 +127,7 @@
 (<code>Class&lt;?&gt;</code>)</A></nobr>&nbsp;constructor<br>
 &nbsp;&nbsp;<nobr><A HREF="junit.framework.TestSuite.html#junit.framework.TestSuite.ctor_added(java.lang.Class<?>...)" class="hiddenlink" target="rightframe"><b>TestSuite</b>
 (<code>Class&lt;?&gt;</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/constructors_index_all.html b/docs/html/sdk/api_diff/16/changes/constructors_index_all.html
index 9bbc54e..1b0ecb7 100644
--- a/docs/html/sdk/api_diff/16/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/16/changes/constructors_index_all.html
@@ -282,7 +282,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.ctor_removed()" class="hiddenlink" target="rightframe"><strike>WebStorage</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/16/changes/constructors_index_changes.html
index 9625eed..687f154 100644
--- a/docs/html/sdk/api_diff/16/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/16/changes/constructors_index_changes.html
@@ -134,7 +134,7 @@
 (<code>Context</code>)</A></nobr>&nbsp;constructor<br>
 &nbsp;&nbsp;<nobr><A HREF="android.renderscript.RSTextureView.html#android.renderscript.RSTextureView.ctor_changed(android.content.Context, android.util.AttributeSet)" class="hiddenlink" target="rightframe">RSTextureView
 (<code>Context, AttributeSet</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/16/changes/constructors_index_removals.html
index 29bad17..766bd1b 100644
--- a/docs/html/sdk/api_diff/16/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/16/changes/constructors_index_removals.html
@@ -74,7 +74,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.webkit.WebStorage.html#android.webkit.WebStorage.ctor_removed()" class="hiddenlink" target="rightframe"><strike>WebStorage</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/fields_index_additions.html b/docs/html/sdk/api_diff/16/changes/fields_index_additions.html
index 0d93032..10df363 100644
--- a/docs/html/sdk/api_diff/16/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/16/changes/fields_index_additions.html
@@ -945,7 +945,7 @@
 </nobr><br>
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_USER_DICTIONARY" class="hiddenlink" target="rightframe">WRITE_USER_DICTIONARY</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/fields_index_all.html b/docs/html/sdk/api_diff/16/changes/fields_index_all.html
index 2eee5e3..38b57d7 100644
--- a/docs/html/sdk/api_diff/16/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/16/changes/fields_index_all.html
@@ -1143,7 +1143,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/fields_index_changes.html b/docs/html/sdk/api_diff/16/changes/fields_index_changes.html
index e86c488..590263b 100644
--- a/docs/html/sdk/api_diff/16/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/16/changes/fields_index_changes.html
@@ -377,7 +377,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.View.html#android.view.View.Y" class="hiddenlink" target="rightframe">Y</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/fields_index_removals.html b/docs/html/sdk/api_diff/16/changes/fields_index_removals.html
index c264afeba..aa89b81 100644
--- a/docs/html/sdk/api_diff/16/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/16/changes/fields_index_removals.html
@@ -65,7 +65,7 @@
 </nobr><br>
 <nobr><A HREF="android.database.sqlite.SQLiteProgram.html#android.database.sqlite.SQLiteProgram.nStatement" class="hiddenlink" target="rightframe"><strike>nStatement</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/jdiff_help.html b/docs/html/sdk/api_diff/16/changes/jdiff_help.html
index 543eadb..a30d5bb 100644
--- a/docs/html/sdk/api_diff/16/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/16/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/16/changes/jdiff_statistics.html
index f0ddde1..14cec4b 100644
--- a/docs/html/sdk/api_diff/16/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/16/changes/jdiff_statistics.html
@@ -1391,7 +1391,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/16/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/16/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/16/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/junit.framework.Assert.html b/docs/html/sdk/api_diff/16/changes/junit.framework.Assert.html
index 0d5b2cb..040eed8 100644
--- a/docs/html/sdk/api_diff/16/changes/junit.framework.Assert.html
+++ b/docs/html/sdk/api_diff/16/changes/junit.framework.Assert.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/junit.framework.AssertionFailedError.html b/docs/html/sdk/api_diff/16/changes/junit.framework.AssertionFailedError.html
index 8cc284c6..d43b3f8 100644
--- a/docs/html/sdk/api_diff/16/changes/junit.framework.AssertionFailedError.html
+++ b/docs/html/sdk/api_diff/16/changes/junit.framework.AssertionFailedError.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/junit.framework.ComparisonFailure.html b/docs/html/sdk/api_diff/16/changes/junit.framework.ComparisonFailure.html
index afdcc5f..1250af2 100644
--- a/docs/html/sdk/api_diff/16/changes/junit.framework.ComparisonFailure.html
+++ b/docs/html/sdk/api_diff/16/changes/junit.framework.ComparisonFailure.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/junit.framework.TestResult.html b/docs/html/sdk/api_diff/16/changes/junit.framework.TestResult.html
index ada98fd..35178bc 100644
--- a/docs/html/sdk/api_diff/16/changes/junit.framework.TestResult.html
+++ b/docs/html/sdk/api_diff/16/changes/junit.framework.TestResult.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/junit.framework.TestSuite.html b/docs/html/sdk/api_diff/16/changes/junit.framework.TestSuite.html
index fd9a0ca..a009900 100644
--- a/docs/html/sdk/api_diff/16/changes/junit.framework.TestSuite.html
+++ b/docs/html/sdk/api_diff/16/changes/junit.framework.TestSuite.html
@@ -215,7 +215,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/junit.runner.BaseTestRunner.html b/docs/html/sdk/api_diff/16/changes/junit.runner.BaseTestRunner.html
index 64880bc..d55b3e7 100644
--- a/docs/html/sdk/api_diff/16/changes/junit.runner.BaseTestRunner.html
+++ b/docs/html/sdk/api_diff/16/changes/junit.runner.BaseTestRunner.html
@@ -131,7 +131,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/methods_index_additions.html b/docs/html/sdk/api_diff/16/changes/methods_index_additions.html
index 3264969..f13c64e 100644
--- a/docs/html/sdk/api_diff/16/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/16/changes/methods_index_additions.html
@@ -1343,7 +1343,7 @@
 (<code>Runnable</code>)</A></nobr><br>
 <nobr><A HREF="android.view.KeyCharacterMap.html#android.view.KeyCharacterMap.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe"><b>writeToParcel</b>
 (<code>Parcel, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/methods_index_all.html b/docs/html/sdk/api_diff/16/changes/methods_index_all.html
index 628f0b7..45817d9 100644
--- a/docs/html/sdk/api_diff/16/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/16/changes/methods_index_all.html
@@ -1852,7 +1852,7 @@
 (<code>Runnable</code>)</A></nobr><br>
 <nobr><A HREF="android.view.KeyCharacterMap.html#android.view.KeyCharacterMap.writeToParcel_added(android.os.Parcel, int)" class="hiddenlink" target="rightframe"><b>writeToParcel</b>
 (<code>Parcel, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/methods_index_changes.html b/docs/html/sdk/api_diff/16/changes/methods_index_changes.html
index f6a95dd..a3c4bed 100644
--- a/docs/html/sdk/api_diff/16/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/16/changes/methods_index_changes.html
@@ -817,7 +817,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.os.Vibrator.html#android.os.Vibrator.vibrate_changed(long[], int)" class="hiddenlink" target="rightframe">type&nbsp;
 (<code>long[], int</code>)&nbsp;in&nbsp;android.os.Vibrator
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/methods_index_removals.html b/docs/html/sdk/api_diff/16/changes/methods_index_removals.html
index 4efdbd4..38f3bef 100644
--- a/docs/html/sdk/api_diff/16/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/16/changes/methods_index_removals.html
@@ -181,7 +181,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.webkit.JsResult.html#android.webkit.JsResult.wakeUp_removed()" class="hiddenlink" target="rightframe"><strike>wakeUp</strike>
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/packages_index_additions.html b/docs/html/sdk/api_diff/16/changes/packages_index_additions.html
index 3f603e5..1b6c980 100644
--- a/docs/html/sdk/api_diff/16/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/16/changes/packages_index_additions.html
@@ -54,7 +54,7 @@
 <A HREF="changes-summary.html#android.hardware.input" class="hiddenlink" target="rightframe"><b>android.hardware.input</b></A><br>
 <A HREF="changes-summary.html#android.net.nsd" class="hiddenlink" target="rightframe"><b>android.net.nsd</b></A><br>
 <A HREF="changes-summary.html#android.net.wifi.p2p.nsd" class="hiddenlink" target="rightframe"><b>android.net.wifi.p2p.nsd</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/packages_index_all.html b/docs/html/sdk/api_diff/16/changes/packages_index_all.html
index 100c124..48525ef 100644
--- a/docs/html/sdk/api_diff/16/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/16/changes/packages_index_all.html
@@ -94,7 +94,7 @@
 <A NAME="J"></A>
 <A HREF="pkg_junit.framework.html" class="hiddenlink" target="rightframe">junit.framework</A><br>
 <A HREF="pkg_junit.runner.html" class="hiddenlink" target="rightframe">junit.runner</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/packages_index_changes.html b/docs/html/sdk/api_diff/16/changes/packages_index_changes.html
index b99dfc9..93c5fd3 100644
--- a/docs/html/sdk/api_diff/16/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/16/changes/packages_index_changes.html
@@ -90,7 +90,7 @@
 <A NAME="J"></A>
 <A HREF="pkg_junit.framework.html" class="hiddenlink" target="rightframe">junit.framework</A><br>
 <A HREF="pkg_junit.runner.html" class="hiddenlink" target="rightframe">junit.runner</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/packages_index_removals.html b/docs/html/sdk/api_diff/16/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/16/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/16/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.accessibilityservice.html b/docs/html/sdk/api_diff/16/changes/pkg_android.accessibilityservice.html
index e348264..68d3da1 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.accessibilityservice.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.accessibilityservice.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.animation.html b/docs/html/sdk/api_diff/16/changes/pkg_android.animation.html
index 148635b..6fb398b 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.animation.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.animation.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.app.html b/docs/html/sdk/api_diff/16/changes/pkg_android.app.html
index 1eaef10..4550e07 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.app.html
@@ -246,7 +246,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.appwidget.html b/docs/html/sdk/api_diff/16/changes/pkg_android.appwidget.html
index 1495d4b..8793169 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.appwidget.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.appwidget.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/16/changes/pkg_android.bluetooth.html
index f408836..f1b988a 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.bluetooth.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.bluetooth.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.content.html b/docs/html/sdk/api_diff/16/changes/pkg_android.content.html
index cb45c96..4a710f1 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.content.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/16/changes/pkg_android.content.pm.html
index 7f80041..72420fa 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.content.pm.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/16/changes/pkg_android.content.res.html
index b2dde4d..2748506 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.content.res.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.database.html b/docs/html/sdk/api_diff/16/changes/pkg_android.database.html
index 43029e5..58d746f 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.database.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.database.sqlite.html b/docs/html/sdk/api_diff/16/changes/pkg_android.database.sqlite.html
index 4c47f61..d8ac540 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.database.sqlite.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.database.sqlite.html
@@ -154,7 +154,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.drm.html b/docs/html/sdk/api_diff/16/changes/pkg_android.drm.html
index 9973797..8c75056 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.drm.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.drm.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.graphics.drawable.html b/docs/html/sdk/api_diff/16/changes/pkg_android.graphics.drawable.html
index e4f0911..b05d97d 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.graphics.drawable.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.graphics.drawable.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/16/changes/pkg_android.graphics.html
index 3b8d71b..26c3e89 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.graphics.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/16/changes/pkg_android.hardware.html
index fb6b102..0aad978 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.hardware.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.html b/docs/html/sdk/api_diff/16/changes/pkg_android.html
index 19b3c01..2bee06f 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.media.audiofx.html b/docs/html/sdk/api_diff/16/changes/pkg_android.media.audiofx.html
index 757acd1..914ccc9 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.media.audiofx.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.media.audiofx.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.media.html b/docs/html/sdk/api_diff/16/changes/pkg_android.media.html
index 5083802..9bb4383 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.media.html
@@ -330,7 +330,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.net.html b/docs/html/sdk/api_diff/16/changes/pkg_android.net.html
index fb9213e..ec76384 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.net.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.net.wifi.p2p.html b/docs/html/sdk/api_diff/16/changes/pkg_android.net.wifi.p2p.html
index e346fed..7287372 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.net.wifi.p2p.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.net.wifi.p2p.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.nfc.html b/docs/html/sdk/api_diff/16/changes/pkg_android.nfc.html
index d6a49d2..75d696c 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.nfc.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.nfc.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.nfc.tech.html b/docs/html/sdk/api_diff/16/changes/pkg_android.nfc.tech.html
index f01ce8c..0a27605 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.nfc.tech.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.nfc.tech.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.os.html b/docs/html/sdk/api_diff/16/changes/pkg_android.os.html
index 689f8b3..286585a 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.os.html
@@ -169,7 +169,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/16/changes/pkg_android.provider.html
index 6a9f620..929e315 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.provider.html
@@ -189,7 +189,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.renderscript.html b/docs/html/sdk/api_diff/16/changes/pkg_android.renderscript.html
index 84f8524f..03b5e8c 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.renderscript.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.renderscript.html
@@ -343,7 +343,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.security.html b/docs/html/sdk/api_diff/16/changes/pkg_android.security.html
index c3b16dd..38c5714 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.security.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.security.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.service.textservice.html b/docs/html/sdk/api_diff/16/changes/pkg_android.service.textservice.html
index 511016d..606832c 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.service.textservice.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.service.textservice.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.speech.html b/docs/html/sdk/api_diff/16/changes/pkg_android.speech.html
index 990b7b1..287cdf0 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.speech.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.speech.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.test.html b/docs/html/sdk/api_diff/16/changes/pkg_android.test.html
index 8d4a6cb..993a7e1 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.test.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.test.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/16/changes/pkg_android.test.mock.html
index 30be34c..1362a7c 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.test.mock.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.text.html b/docs/html/sdk/api_diff/16/changes/pkg_android.text.html
index 378f3b5..a29d420 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.text.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.util.html b/docs/html/sdk/api_diff/16/changes/pkg_android.util.html
index b035341..675993c 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.util.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.view.accessibility.html b/docs/html/sdk/api_diff/16/changes/pkg_android.view.accessibility.html
index 5e2edfe..67758d0 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.view.accessibility.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.view.accessibility.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.view.html b/docs/html/sdk/api_diff/16/changes/pkg_android.view.html
index 85d3c36..9cfee71 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.view.html
@@ -267,7 +267,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.view.inputmethod.html b/docs/html/sdk/api_diff/16/changes/pkg_android.view.inputmethod.html
index 976a051..fee0bc8 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.view.inputmethod.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.view.inputmethod.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.view.textservice.html b/docs/html/sdk/api_diff/16/changes/pkg_android.view.textservice.html
index c4cac96..d0868de 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.view.textservice.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.view.textservice.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/16/changes/pkg_android.webkit.html
index 62fb8ee..9980bf6 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.webkit.html
@@ -169,7 +169,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/16/changes/pkg_android.widget.html
index d52b211..5f6c894 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_android.widget.html
@@ -239,7 +239,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_junit.framework.html b/docs/html/sdk/api_diff/16/changes/pkg_junit.framework.html
index a5d6fcc..5ac6e32 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_junit.framework.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_junit.framework.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/16/changes/pkg_junit.runner.html b/docs/html/sdk/api_diff/16/changes/pkg_junit.runner.html
index dcd45ef..fd9654e 100644
--- a/docs/html/sdk/api_diff/16/changes/pkg_junit.runner.html
+++ b/docs/html/sdk/api_diff/16/changes/pkg_junit.runner.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/17/changes/alldiffs_index_additions.html
index e40f4c0..49cd521 100644
--- a/docs/html/sdk/api_diff/17/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/17/changes/alldiffs_index_additions.html
@@ -1759,7 +1759,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.net.http.html#X509TrustManagerExtensions" class="hiddenlink" target="rightframe"><b>X509TrustManagerExtensions</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/17/changes/alldiffs_index_all.html
index 7b7dddc..e5580f1 100644
--- a/docs/html/sdk/api_diff/17/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/17/changes/alldiffs_index_all.html
@@ -2455,7 +2455,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.net.http.html#X509TrustManagerExtensions" class="hiddenlink" target="rightframe"><b>X509TrustManagerExtensions</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/17/changes/alldiffs_index_changes.html
index 6cd23cc..265df77 100644
--- a/docs/html/sdk/api_diff/17/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/17/changes/alldiffs_index_changes.html
@@ -1128,7 +1128,7 @@
 </nobr><br>
 <!-- Class WindowManager.LayoutParams -->
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/17/changes/alldiffs_index_removals.html
index 53e6dd9..18155b1 100644
--- a/docs/html/sdk/api_diff/17/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/17/changes/alldiffs_index_removals.html
@@ -225,7 +225,7 @@
 <!-- Field TEXT_ALIGNMENT_RESOLVED_DEFAULT -->
 <nobr><A HREF="android.view.View.html#android.view.View.TEXT_ALIGNMENT_RESOLVED_DEFAULT" class="hiddenlink" target="rightframe"><strike>TEXT_ALIGNMENT_RESOLVED_DEFAULT</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.Manifest.permission_group.html b/docs/html/sdk/api_diff/17/changes/android.Manifest.permission_group.html
index d81a5f0..28ba5ee 100644
--- a/docs/html/sdk/api_diff/17/changes/android.Manifest.permission_group.html
+++ b/docs/html/sdk/api_diff/17/changes/android.Manifest.permission_group.html
@@ -234,7 +234,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.R.attr.html b/docs/html/sdk/api_diff/17/changes/android.R.attr.html
index b118e7c..1adee79 100644
--- a/docs/html/sdk/api_diff/17/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/17/changes/android.R.attr.html
@@ -304,7 +304,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.R.style.html b/docs/html/sdk/api_diff/17/changes/android.R.style.html
index 04a6933..0e16bf5a 100644
--- a/docs/html/sdk/api_diff/17/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/17/changes/android.R.style.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityService.html b/docs/html/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityService.html
index 47e8868..f497e5b 100644
--- a/docs/html/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityService.html
+++ b/docs/html/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityServiceInfo.html b/docs/html/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityServiceInfo.html
index b96916f..33723d0 100644
--- a/docs/html/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityServiceInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityServiceInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.Activity.html b/docs/html/sdk/api_diff/17/changes/android.app.Activity.html
index 081d49d..065a100 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.Activity.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.AlertDialog.Builder.html b/docs/html/sdk/api_diff/17/changes/android.app.AlertDialog.Builder.html
index cba0cd3..fa66bc9 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.AlertDialog.Builder.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.AlertDialog.Builder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.Fragment.html b/docs/html/sdk/api_diff/17/changes/android.app.Fragment.html
index 3824575..be3464e 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.Fragment.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.Fragment.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.FragmentManager.html b/docs/html/sdk/api_diff/17/changes/android.app.FragmentManager.html
index 30beb99..d1b62a0 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.FragmentManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.FragmentManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.Notification.Builder.html b/docs/html/sdk/api_diff/17/changes/android.app.Notification.Builder.html
index fbd8880..8996e20 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.Notification.Builder.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.Notification.Builder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/17/changes/android.app.PendingIntent.html
index eb72e3a..64d18d4 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.PendingIntent.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.PendingIntent.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/17/changes/android.app.WallpaperManager.html
index a5045d2..779c776 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.WallpaperManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.WallpaperManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.admin.DeviceAdminInfo.html b/docs/html/sdk/api_diff/17/changes/android.app.admin.DeviceAdminInfo.html
index b5b261c..960cac9 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.admin.DeviceAdminInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.admin.DeviceAdminInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.app.admin.DevicePolicyManager.html b/docs/html/sdk/api_diff/17/changes/android.app.admin.DevicePolicyManager.html
index a9a0d11..0bbf62a 100644
--- a/docs/html/sdk/api_diff/17/changes/android.app.admin.DevicePolicyManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.app.admin.DevicePolicyManager.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetHost.html b/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetHost.html
index 8aaa7b9f..b97558a 100644
--- a/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetHost.html
+++ b/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetHost.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetManager.html b/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetManager.html
index d36f9a5..3a5465b 100644
--- a/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetManager.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetProviderInfo.html b/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetProviderInfo.html
index ed0dbb9..780c310a 100644
--- a/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetProviderInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.appwidget.AppWidgetProviderInfo.html
@@ -149,7 +149,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.bluetooth.BluetoothA2dp.html b/docs/html/sdk/api_diff/17/changes/android.bluetooth.BluetoothA2dp.html
index c1fb66c..bb0f49d 100644
--- a/docs/html/sdk/api_diff/17/changes/android.bluetooth.BluetoothA2dp.html
+++ b/docs/html/sdk/api_diff/17/changes/android.bluetooth.BluetoothA2dp.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.ContentProviderClient.html b/docs/html/sdk/api_diff/17/changes/android.content.ContentProviderClient.html
index 65f758c..423682fc 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.ContentProviderClient.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.ContentProviderClient.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.Context.html b/docs/html/sdk/api_diff/17/changes/android.content.Context.html
index 2169575..d3a30a8 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.Context.html
@@ -205,7 +205,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.ContextWrapper.html b/docs/html/sdk/api_diff/17/changes/android.content.ContextWrapper.html
index e96cfe9..6819d62 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.ContextWrapper.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.ContextWrapper.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.Intent.html b/docs/html/sdk/api_diff/17/changes/android.content.Intent.html
index 1c77051..eebdeae 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.Intent.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.IntentSender.html b/docs/html/sdk/api_diff/17/changes/android.content.IntentSender.html
index 1c0ac90..9839376 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.IntentSender.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.IntentSender.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/17/changes/android.content.pm.ActivityInfo.html
index 1c835df..3da3f20 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.pm.ActivityInfo.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/17/changes/android.content.pm.ApplicationInfo.html
index e770229..250b6f3 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.pm.ApplicationInfo.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/17/changes/android.content.pm.PackageManager.html
index 0bd66ed..e80a57b 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.pm.PackageManager.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.pm.PermissionGroupInfo.html b/docs/html/sdk/api_diff/17/changes/android.content.pm.PermissionGroupInfo.html
index 6784c30..3867df7 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.pm.PermissionGroupInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.pm.PermissionGroupInfo.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.pm.PermissionInfo.html b/docs/html/sdk/api_diff/17/changes/android.content.pm.PermissionInfo.html
index 16314f8..a2866baf 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.pm.PermissionInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.pm.PermissionInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.pm.ProviderInfo.html b/docs/html/sdk/api_diff/17/changes/android.content.pm.ProviderInfo.html
index de54866..0a85033 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.pm.ProviderInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.pm.ProviderInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.pm.ResolveInfo.html b/docs/html/sdk/api_diff/17/changes/android.content.pm.ResolveInfo.html
index ea75367..ae6ac77 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.pm.ResolveInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.pm.ResolveInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.pm.ServiceInfo.html b/docs/html/sdk/api_diff/17/changes/android.content.pm.ServiceInfo.html
index b3e0dcf..8e52ca3 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.pm.ServiceInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.pm.ServiceInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/17/changes/android.content.res.Configuration.html
index 007bed9..21cb8fa 100644
--- a/docs/html/sdk/api_diff/17/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/17/changes/android.content.res.Configuration.html
@@ -186,7 +186,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.database.DatabaseUtils.InsertHelper.html b/docs/html/sdk/api_diff/17/changes/android.database.DatabaseUtils.InsertHelper.html
index fc6bf4a..0c1444c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.database.DatabaseUtils.InsertHelper.html
+++ b/docs/html/sdk/api_diff/17/changes/android.database.DatabaseUtils.InsertHelper.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.graphics.Bitmap.html b/docs/html/sdk/api_diff/17/changes/android.graphics.Bitmap.html
index 1c91b36..807c28d 100644
--- a/docs/html/sdk/api_diff/17/changes/android.graphics.Bitmap.html
+++ b/docs/html/sdk/api_diff/17/changes/android.graphics.Bitmap.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.graphics.Paint.html b/docs/html/sdk/api_diff/17/changes/android.graphics.Paint.html
index 14f466f..c28311b 100644
--- a/docs/html/sdk/api_diff/17/changes/android.graphics.Paint.html
+++ b/docs/html/sdk/api_diff/17/changes/android.graphics.Paint.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.CameraInfo.html b/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.CameraInfo.html
index 61888e4..348aa8c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.CameraInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.CameraInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.Parameters.html
index e96f27f..e0d9685 100644
--- a/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.Parameters.html
+++ b/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.Parameters.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.html
index 8f0ea73..9586af0 100644
--- a/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/17/changes/android.hardware.Camera.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.hardware.Sensor.html b/docs/html/sdk/api_diff/17/changes/android.hardware.Sensor.html
index 4a2b4a0..0477c57 100644
--- a/docs/html/sdk/api_diff/17/changes/android.hardware.Sensor.html
+++ b/docs/html/sdk/api_diff/17/changes/android.hardware.Sensor.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl.html b/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl.html
index 3707cb8..3e8dd9d 100644
--- a/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl.html
+++ b/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.html b/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.html
index 71b3d90..96b588f 100644
--- a/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.html
+++ b/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.InputMethodService.html b/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.InputMethodService.html
index 913c3db..c15ae3c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.InputMethodService.html
+++ b/docs/html/sdk/api_diff/17/changes/android.inputmethodservice.InputMethodService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.location.Location.html b/docs/html/sdk/api_diff/17/changes/android.location.Location.html
index bc7329e..c79359a 100644
--- a/docs/html/sdk/api_diff/17/changes/android.location.Location.html
+++ b/docs/html/sdk/api_diff/17/changes/android.location.Location.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.location.LocationProvider.html b/docs/html/sdk/api_diff/17/changes/android.location.LocationProvider.html
index f30f1d3..d11ae6a 100644
--- a/docs/html/sdk/api_diff/17/changes/android.location.LocationProvider.html
+++ b/docs/html/sdk/api_diff/17/changes/android.location.LocationProvider.html
@@ -192,7 +192,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/17/changes/android.media.AudioManager.html
index 6dd662e..5f179fa 100644
--- a/docs/html/sdk/api_diff/17/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.media.AudioManager.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.media.MediaMetadataRetriever.html b/docs/html/sdk/api_diff/17/changes/android.media.MediaMetadataRetriever.html
index ab2f148..3f85e5f 100644
--- a/docs/html/sdk/api_diff/17/changes/android.media.MediaMetadataRetriever.html
+++ b/docs/html/sdk/api_diff/17/changes/android.media.MediaMetadataRetriever.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.media.MediaPlayer.html b/docs/html/sdk/api_diff/17/changes/android.media.MediaPlayer.html
index 240b3ba..06dbd51 100644
--- a/docs/html/sdk/api_diff/17/changes/android.media.MediaPlayer.html
+++ b/docs/html/sdk/api_diff/17/changes/android.media.MediaPlayer.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/17/changes/android.media.MediaRecorder.html
index f0a9874..4805798 100644
--- a/docs/html/sdk/api_diff/17/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/17/changes/android.media.MediaRecorder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.Callback.html b/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.Callback.html
index 7bd7353..1c0c126 100644
--- a/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.Callback.html
+++ b/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.Callback.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.RouteInfo.html b/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.RouteInfo.html
index a7f39fe..7b03f78 100644
--- a/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.RouteInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.RouteInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.html b/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.html
index 258ad3c..bdad04c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.html
+++ b/docs/html/sdk/api_diff/17/changes/android.media.MediaRouter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.net.ConnectivityManager.html b/docs/html/sdk/api_diff/17/changes/android.net.ConnectivityManager.html
index a9acb12..e7540ab 100644
--- a/docs/html/sdk/api_diff/17/changes/android.net.ConnectivityManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.net.ConnectivityManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.net.LocalSocket.html b/docs/html/sdk/api_diff/17/changes/android.net.LocalSocket.html
index de70962..765b32f 100644
--- a/docs/html/sdk/api_diff/17/changes/android.net.LocalSocket.html
+++ b/docs/html/sdk/api_diff/17/changes/android.net.LocalSocket.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.net.SSLCertificateSocketFactory.html b/docs/html/sdk/api_diff/17/changes/android.net.SSLCertificateSocketFactory.html
index 861c632..37cd162 100644
--- a/docs/html/sdk/api_diff/17/changes/android.net.SSLCertificateSocketFactory.html
+++ b/docs/html/sdk/api_diff/17/changes/android.net.SSLCertificateSocketFactory.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.net.wifi.ScanResult.html b/docs/html/sdk/api_diff/17/changes/android.net.wifi.ScanResult.html
index aee26cf..492d62b 100644
--- a/docs/html/sdk/api_diff/17/changes/android.net.wifi.ScanResult.html
+++ b/docs/html/sdk/api_diff/17/changes/android.net.wifi.ScanResult.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.opengl.GLES20.html b/docs/html/sdk/api_diff/17/changes/android.opengl.GLES20.html
index af909ed..836aa9b 100644
--- a/docs/html/sdk/api_diff/17/changes/android.opengl.GLES20.html
+++ b/docs/html/sdk/api_diff/17/changes/android.opengl.GLES20.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.os.BatteryManager.html b/docs/html/sdk/api_diff/17/changes/android.os.BatteryManager.html
index 3beccbd..a2f9e63 100644
--- a/docs/html/sdk/api_diff/17/changes/android.os.BatteryManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.os.BatteryManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.os.Binder.html b/docs/html/sdk/api_diff/17/changes/android.os.Binder.html
index 5140918..227bb8e 100644
--- a/docs/html/sdk/api_diff/17/changes/android.os.Binder.html
+++ b/docs/html/sdk/api_diff/17/changes/android.os.Binder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/17/changes/android.os.Build.VERSION_CODES.html
index 0cb5cf5..47578e1 100644
--- a/docs/html/sdk/api_diff/17/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/17/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.os.PowerManager.WakeLock.html b/docs/html/sdk/api_diff/17/changes/android.os.PowerManager.WakeLock.html
index 6361c8d..da33be5 100644
--- a/docs/html/sdk/api_diff/17/changes/android.os.PowerManager.WakeLock.html
+++ b/docs/html/sdk/api_diff/17/changes/android.os.PowerManager.WakeLock.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.os.PowerManager.html b/docs/html/sdk/api_diff/17/changes/android.os.PowerManager.html
index 0874295..1e83e01 100644
--- a/docs/html/sdk/api_diff/17/changes/android.os.PowerManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.os.PowerManager.html
@@ -135,7 +135,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.os.Process.html b/docs/html/sdk/api_diff/17/changes/android.os.Process.html
index 97240da..bdc3665 100644
--- a/docs/html/sdk/api_diff/17/changes/android.os.Process.html
+++ b/docs/html/sdk/api_diff/17/changes/android.os.Process.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.os.RemoteCallbackList.html b/docs/html/sdk/api_diff/17/changes/android.os.RemoteCallbackList.html
index 77b8b7e..428e995 100644
--- a/docs/html/sdk/api_diff/17/changes/android.os.RemoteCallbackList.html
+++ b/docs/html/sdk/api_diff/17/changes/android.os.RemoteCallbackList.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.os.SystemClock.html b/docs/html/sdk/api_diff/17/changes/android.os.SystemClock.html
index e7f6fe8..efdedd6 100644
--- a/docs/html/sdk/api_diff/17/changes/android.os.SystemClock.html
+++ b/docs/html/sdk/api_diff/17/changes/android.os.SystemClock.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.provider.CalendarContract.CalendarColumns.html b/docs/html/sdk/api_diff/17/changes/android.provider.CalendarContract.CalendarColumns.html
index d067f78..9ba1895 100644
--- a/docs/html/sdk/api_diff/17/changes/android.provider.CalendarContract.CalendarColumns.html
+++ b/docs/html/sdk/api_diff/17/changes/android.provider.CalendarContract.CalendarColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.provider.CalendarContract.EventsColumns.html b/docs/html/sdk/api_diff/17/changes/android.provider.CalendarContract.EventsColumns.html
index 36e4029..0788dba 100644
--- a/docs/html/sdk/api_diff/17/changes/android.provider.CalendarContract.EventsColumns.html
+++ b/docs/html/sdk/api_diff/17/changes/android.provider.CalendarContract.EventsColumns.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.provider.CallLog.Calls.html b/docs/html/sdk/api_diff/17/changes/android.provider.CallLog.Calls.html
index 5ae5fc0..1bb580d 100644
--- a/docs/html/sdk/api_diff/17/changes/android.provider.CallLog.Calls.html
+++ b/docs/html/sdk/api_diff/17/changes/android.provider.CallLog.Calls.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.provider.MediaStore.html b/docs/html/sdk/api_diff/17/changes/android.provider.MediaStore.html
index 09b422e..0d7e749 100644
--- a/docs/html/sdk/api_diff/17/changes/android.provider.MediaStore.html
+++ b/docs/html/sdk/api_diff/17/changes/android.provider.MediaStore.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/17/changes/android.provider.Settings.Secure.html
index ba5b553..2ef49d7 100644
--- a/docs/html/sdk/api_diff/17/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/17/changes/android.provider.Settings.Secure.html
@@ -263,7 +263,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/17/changes/android.provider.Settings.System.html
index aa7c33e..7751562 100644
--- a/docs/html/sdk/api_diff/17/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/17/changes/android.provider.Settings.System.html
@@ -390,7 +390,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.renderscript.Script.html b/docs/html/sdk/api_diff/17/changes/android.renderscript.Script.html
index 3cacb90..732b082 100644
--- a/docs/html/sdk/api_diff/17/changes/android.renderscript.Script.html
+++ b/docs/html/sdk/api_diff/17/changes/android.renderscript.Script.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.telephony.PhoneStateListener.html b/docs/html/sdk/api_diff/17/changes/android.telephony.PhoneStateListener.html
index d244732..657d9da 100644
--- a/docs/html/sdk/api_diff/17/changes/android.telephony.PhoneStateListener.html
+++ b/docs/html/sdk/api_diff/17/changes/android.telephony.PhoneStateListener.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/17/changes/android.telephony.TelephonyManager.html
index 0248453..6719e18 100644
--- a/docs/html/sdk/api_diff/17/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.telephony.TelephonyManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.telephony.cdma.CdmaCellLocation.html b/docs/html/sdk/api_diff/17/changes/android.telephony.cdma.CdmaCellLocation.html
index f3f288e..ace7e42 100644
--- a/docs/html/sdk/api_diff/17/changes/android.telephony.cdma.CdmaCellLocation.html
+++ b/docs/html/sdk/api_diff/17/changes/android.telephony.cdma.CdmaCellLocation.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.test.mock.MockContext.html b/docs/html/sdk/api_diff/17/changes/android.test.mock.MockContext.html
index d0f605f..f86d48c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.test.mock.MockContext.html
+++ b/docs/html/sdk/api_diff/17/changes/android.test.mock.MockContext.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/17/changes/android.test.mock.MockPackageManager.html
index 4b37968..e81ab01 100644
--- a/docs/html/sdk/api_diff/17/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/17/changes/android.test.mock.MockPackageManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.text.TextUtils.html b/docs/html/sdk/api_diff/17/changes/android.text.TextUtils.html
index a9199da1..667a944 100644
--- a/docs/html/sdk/api_diff/17/changes/android.text.TextUtils.html
+++ b/docs/html/sdk/api_diff/17/changes/android.text.TextUtils.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.text.format.DateFormat.html b/docs/html/sdk/api_diff/17/changes/android.text.format.DateFormat.html
index caf69a7..fad3596 100644
--- a/docs/html/sdk/api_diff/17/changes/android.text.format.DateFormat.html
+++ b/docs/html/sdk/api_diff/17/changes/android.text.format.DateFormat.html
@@ -196,7 +196,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.text.format.DateUtils.html b/docs/html/sdk/api_diff/17/changes/android.text.format.DateUtils.html
index 2c327b34..2431abc 100644
--- a/docs/html/sdk/api_diff/17/changes/android.text.format.DateUtils.html
+++ b/docs/html/sdk/api_diff/17/changes/android.text.format.DateUtils.html
@@ -283,7 +283,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.util.DisplayMetrics.html b/docs/html/sdk/api_diff/17/changes/android.util.DisplayMetrics.html
index 7580d75..972f850 100644
--- a/docs/html/sdk/api_diff/17/changes/android.util.DisplayMetrics.html
+++ b/docs/html/sdk/api_diff/17/changes/android.util.DisplayMetrics.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.util.FloatMath.html b/docs/html/sdk/api_diff/17/changes/android.util.FloatMath.html
index 618c730..02406ce 100644
--- a/docs/html/sdk/api_diff/17/changes/android.util.FloatMath.html
+++ b/docs/html/sdk/api_diff/17/changes/android.util.FloatMath.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.util.LruCache.html b/docs/html/sdk/api_diff/17/changes/android.util.LruCache.html
index 2c40941..8260c81 100644
--- a/docs/html/sdk/api_diff/17/changes/android.util.LruCache.html
+++ b/docs/html/sdk/api_diff/17/changes/android.util.LruCache.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.ContextThemeWrapper.html b/docs/html/sdk/api_diff/17/changes/android.view.ContextThemeWrapper.html
index 832b36e..ee15d07 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.ContextThemeWrapper.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.ContextThemeWrapper.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.Display.html b/docs/html/sdk/api_diff/17/changes/android.view.Display.html
index 674e1c5..ee02b29 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.Display.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.Display.html
@@ -177,7 +177,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.Gravity.html b/docs/html/sdk/api_diff/17/changes/android.view.Gravity.html
index c3965cf..ad3f94b 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.Gravity.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.Gravity.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.Surface.html b/docs/html/sdk/api_diff/17/changes/android.view.Surface.html
index 878c2c8..80356ed 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.Surface.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.Surface.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.SurfaceView.html b/docs/html/sdk/api_diff/17/changes/android.view.SurfaceView.html
index ec45c76..537b0a5 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.SurfaceView.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.SurfaceView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.View.html b/docs/html/sdk/api_diff/17/changes/android.view.View.html
index 7fcd852..ee9d1c2 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.View.html
@@ -348,7 +348,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.ViewGroup.LayoutParams.html b/docs/html/sdk/api_diff/17/changes/android.view.ViewGroup.LayoutParams.html
index 6459b06..e69fd2f 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.ViewGroup.LayoutParams.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.ViewGroup.LayoutParams.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.ViewGroup.MarginLayoutParams.html b/docs/html/sdk/api_diff/17/changes/android.view.ViewGroup.MarginLayoutParams.html
index a4f01afb..648f713 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.ViewGroup.MarginLayoutParams.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.ViewGroup.MarginLayoutParams.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/17/changes/android.view.WindowManager.LayoutParams.html
index 9071e7d..f47dd2c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.WindowManager.LayoutParams.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityEvent.html b/docs/html/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityEvent.html
index 452fbfe..61bd0c6 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityEvent.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityEvent.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityNodeInfo.html b/docs/html/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityNodeInfo.html
index 95bab46..8720c1c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityNodeInfo.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityNodeInfo.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSession.html b/docs/html/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSession.html
index a2d912a..8df4ead 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSession.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSession.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSubtype.html b/docs/html/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSubtype.html
index 947c69c..51a5cfd 100644
--- a/docs/html/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSubtype.html
+++ b/docs/html/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSubtype.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.webkit.WebChromeClient.html b/docs/html/sdk/api_diff/17/changes/android.webkit.WebChromeClient.html
index 658bb85..f18d434 100644
--- a/docs/html/sdk/api_diff/17/changes/android.webkit.WebChromeClient.html
+++ b/docs/html/sdk/api_diff/17/changes/android.webkit.WebChromeClient.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.webkit.WebHistoryItem.html b/docs/html/sdk/api_diff/17/changes/android.webkit.WebHistoryItem.html
index 91866f5..1135de9 100644
--- a/docs/html/sdk/api_diff/17/changes/android.webkit.WebHistoryItem.html
+++ b/docs/html/sdk/api_diff/17/changes/android.webkit.WebHistoryItem.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/17/changes/android.webkit.WebSettings.html
index b8157ea..b2d805e 100644
--- a/docs/html/sdk/api_diff/17/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/17/changes/android.webkit.WebSettings.html
@@ -231,7 +231,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/17/changes/android.webkit.WebView.html
index a4234d2..18a3964 100644
--- a/docs/html/sdk/api_diff/17/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/17/changes/android.webkit.WebView.html
@@ -226,7 +226,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.webkit.WebViewDatabase.html b/docs/html/sdk/api_diff/17/changes/android.webkit.WebViewDatabase.html
index 4b51daa..7e85e96 100644
--- a/docs/html/sdk/api_diff/17/changes/android.webkit.WebViewDatabase.html
+++ b/docs/html/sdk/api_diff/17/changes/android.webkit.WebViewDatabase.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.AutoCompleteTextView.html b/docs/html/sdk/api_diff/17/changes/android.widget.AutoCompleteTextView.html
index 4ff84f4..4c72d026 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.AutoCompleteTextView.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.AutoCompleteTextView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.CheckedTextView.html b/docs/html/sdk/api_diff/17/changes/android.widget.CheckedTextView.html
index 3624beb..0d68bd7 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.CheckedTextView.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.CheckedTextView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.DigitalClock.html b/docs/html/sdk/api_diff/17/changes/android.widget.DigitalClock.html
index 727870c..5aa4df7 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.DigitalClock.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.DigitalClock.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.RelativeLayout.LayoutParams.html b/docs/html/sdk/api_diff/17/changes/android.widget.RelativeLayout.LayoutParams.html
index 61940b7..477dc4c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.RelativeLayout.LayoutParams.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.RelativeLayout.LayoutParams.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.RelativeLayout.html b/docs/html/sdk/api_diff/17/changes/android.widget.RelativeLayout.html
index c056ddb..dc6f151 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.RelativeLayout.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.RelativeLayout.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/17/changes/android.widget.RemoteViews.html
index 4de9a8c..ac42258 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.RemoteViews.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.SlidingDrawer.html b/docs/html/sdk/api_diff/17/changes/android.widget.SlidingDrawer.html
index 0896020..ae64b48 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.SlidingDrawer.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.SlidingDrawer.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.TextView.html b/docs/html/sdk/api_diff/17/changes/android.widget.TextView.html
index 30aa980..bb1ae2c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.TextView.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.TextView.html
@@ -211,7 +211,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.TwoLineListItem.html b/docs/html/sdk/api_diff/17/changes/android.widget.TwoLineListItem.html
index fb23c1c..9af29f4 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.TwoLineListItem.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.TwoLineListItem.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.VideoView.html b/docs/html/sdk/api_diff/17/changes/android.widget.VideoView.html
index 4ec5579..4c5b8b3f 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.VideoView.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.VideoView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/android.widget.ViewAnimator.html b/docs/html/sdk/api_diff/17/changes/android.widget.ViewAnimator.html
index e0df51b..0b05e5c 100644
--- a/docs/html/sdk/api_diff/17/changes/android.widget.ViewAnimator.html
+++ b/docs/html/sdk/api_diff/17/changes/android.widget.ViewAnimator.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/changes-summary.html b/docs/html/sdk/api_diff/17/changes/changes-summary.html
index 98d9924..909cc19 100644
--- a/docs/html/sdk/api_diff/17/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/17/changes/changes-summary.html
@@ -381,7 +381,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/classes_index_additions.html b/docs/html/sdk/api_diff/17/changes/classes_index_additions.html
index 453e766a..d5f7d52 100644
--- a/docs/html/sdk/api_diff/17/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/17/changes/classes_index_additions.html
@@ -268,7 +268,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.net.http.html#X509TrustManagerExtensions" class="hiddenlink" target="rightframe"><b>X509TrustManagerExtensions</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/classes_index_all.html b/docs/html/sdk/api_diff/17/changes/classes_index_all.html
index 49d116c..c9d521b 100644
--- a/docs/html/sdk/api_diff/17/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/17/changes/classes_index_all.html
@@ -661,7 +661,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.net.http.html#X509TrustManagerExtensions" class="hiddenlink" target="rightframe"><b>X509TrustManagerExtensions</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/classes_index_changes.html b/docs/html/sdk/api_diff/17/changes/classes_index_changes.html
index 9d44a7e..3ac7a94 100644
--- a/docs/html/sdk/api_diff/17/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/17/changes/classes_index_changes.html
@@ -462,7 +462,7 @@
 <A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
 <A HREF="android.webkit.WebViewDatabase.html" class="hiddenlink" target="rightframe">WebViewDatabase</A><br>
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/classes_index_removals.html b/docs/html/sdk/api_diff/17/changes/classes_index_removals.html
index 7e5bdcd..60ada1c 100644
--- a/docs/html/sdk/api_diff/17/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/17/changes/classes_index_removals.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.webkit.html#CacheManager" class="hiddenlink" target="rightframe"><strike>CacheManager</strike></A><br>
 <A HREF="pkg_android.webkit.html#CacheManager.CacheResult" class="hiddenlink" target="rightframe"><strike>CacheManager.CacheResult</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/17/changes/constructors_index_additions.html
index 6395619..1c22240 100644
--- a/docs/html/sdk/api_diff/17/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/17/changes/constructors_index_additions.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.content.pm.ResolveInfo.html#android.content.pm.ResolveInfo.ctor_added(android.content.pm.ResolveInfo)" class="hiddenlink" target="rightframe"><b>ResolveInfo</b>
 (<code>ResolveInfo</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/constructors_index_all.html b/docs/html/sdk/api_diff/17/changes/constructors_index_all.html
index f4471ee..6ba3e21 100644
--- a/docs/html/sdk/api_diff/17/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/17/changes/constructors_index_all.html
@@ -71,7 +71,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.ctor_changed(android.content.Context, android.util.AttributeSet, int, boolean)" class="hiddenlink" target="rightframe">WebView
 (<code>Context, AttributeSet, int, boolean</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/17/changes/constructors_index_changes.html
index ecac5b1..925116f 100644
--- a/docs/html/sdk/api_diff/17/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/17/changes/constructors_index_changes.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.webkit.WebView.html#android.webkit.WebView.ctor_changed(android.content.Context, android.util.AttributeSet, int, boolean)" class="hiddenlink" target="rightframe">WebView
 (<code>Context, AttributeSet, int, boolean</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/17/changes/constructors_index_removals.html
index f1a9952..84bcc63 100644
--- a/docs/html/sdk/api_diff/17/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/17/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/fields_index_additions.html b/docs/html/sdk/api_diff/17/changes/fields_index_additions.html
index 15224bc..1107d9f 100644
--- a/docs/html/sdk/api_diff/17/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/17/changes/fields_index_additions.html
@@ -831,7 +831,7 @@
 </nobr><br>
 <nobr><A HREF="android.Manifest.permission_group.html#android.Manifest.permission_group.WRITE_USER_DICTIONARY" class="hiddenlink" target="rightframe">WRITE_USER_DICTIONARY</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/fields_index_all.html b/docs/html/sdk/api_diff/17/changes/fields_index_all.html
index 7114247..b655dee 100644
--- a/docs/html/sdk/api_diff/17/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/17/changes/fields_index_all.html
@@ -1065,7 +1065,7 @@
 </nobr><br>
 <nobr><A HREF="android.Manifest.permission_group.html#android.Manifest.permission_group.WRITE_USER_DICTIONARY" class="hiddenlink" target="rightframe">WRITE_USER_DICTIONARY</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/fields_index_changes.html b/docs/html/sdk/api_diff/17/changes/fields_index_changes.html
index d2e1a68..731f9b7 100644
--- a/docs/html/sdk/api_diff/17/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/17/changes/fields_index_changes.html
@@ -423,7 +423,7 @@
 </nobr><br>
 <nobr><A HREF="android.provider.Settings.System.html#android.provider.Settings.System.WINDOW_ANIMATION_SCALE" class="hiddenlink" target="rightframe">WINDOW_ANIMATION_SCALE</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/fields_index_removals.html b/docs/html/sdk/api_diff/17/changes/fields_index_removals.html
index ce3253f..f8acb8e 100644
--- a/docs/html/sdk/api_diff/17/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/17/changes/fields_index_removals.html
@@ -63,7 +63,7 @@
 </nobr><br>
 <nobr><A HREF="android.view.View.html#android.view.View.TEXT_ALIGNMENT_RESOLVED_DEFAULT" class="hiddenlink" target="rightframe"><strike>TEXT_ALIGNMENT_RESOLVED_DEFAULT</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/jdiff_help.html b/docs/html/sdk/api_diff/17/changes/jdiff_help.html
index 8a5fa27..74a8f9e 100644
--- a/docs/html/sdk/api_diff/17/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/17/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/17/changes/jdiff_statistics.html
index 00c3c81..f161d6b 100644
--- a/docs/html/sdk/api_diff/17/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/17/changes/jdiff_statistics.html
@@ -875,7 +875,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/17/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/17/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/17/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/methods_index_additions.html b/docs/html/sdk/api_diff/17/changes/methods_index_additions.html
index 4b61d63..894e702 100644
--- a/docs/html/sdk/api_diff/17/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/17/changes/methods_index_additions.html
@@ -710,7 +710,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.os.PowerManager.html#android.os.PowerManager.wakeUp_added(long)" class="hiddenlink" target="rightframe"><b>wakeUp</b>
 (<code>long</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/methods_index_all.html b/docs/html/sdk/api_diff/17/changes/methods_index_all.html
index 4b1d8a8..029f302 100644
--- a/docs/html/sdk/api_diff/17/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/17/changes/methods_index_all.html
@@ -902,7 +902,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.os.PowerManager.html#android.os.PowerManager.wakeUp_added(long)" class="hiddenlink" target="rightframe"><b>wakeUp</b>
 (<code>long</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/methods_index_changes.html b/docs/html/sdk/api_diff/17/changes/methods_index_changes.html
index 073c422..7d12f0d 100644
--- a/docs/html/sdk/api_diff/17/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/17/changes/methods_index_changes.html
@@ -236,7 +236,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.Surface.html#android.view.Surface.unlockCanvas_changed(android.graphics.Canvas)" class="hiddenlink" target="rightframe">unlockCanvas
 (<code>Canvas</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/methods_index_removals.html b/docs/html/sdk/api_diff/17/changes/methods_index_removals.html
index f421947..c06c446 100644
--- a/docs/html/sdk/api_diff/17/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/17/changes/methods_index_removals.html
@@ -139,7 +139,7 @@
 (<code>int</code>)</A></nobr><br>
 <nobr><A HREF="android.webkit.WebSettings.html#android.webkit.WebSettings.setUseWebViewBackgroundForOverscrollBackground_removed(boolean)" class="hiddenlink" target="rightframe"><strike>setUseWebViewBackgroundForOverscrollBackground</strike>
 (<code>boolean</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/packages_index_additions.html b/docs/html/sdk/api_diff/17/changes/packages_index_additions.html
index 992d1561..e9b2888 100644
--- a/docs/html/sdk/api_diff/17/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/17/changes/packages_index_additions.html
@@ -52,7 +52,7 @@
 <A NAME="A"></A>
 <A HREF="changes-summary.html#android.hardware.display" class="hiddenlink" target="rightframe"><b>android.hardware.display</b></A><br>
 <A HREF="changes-summary.html#android.service.dreams" class="hiddenlink" target="rightframe"><b>android.service.dreams</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/packages_index_all.html b/docs/html/sdk/api_diff/17/changes/packages_index_all.html
index 1162372..a95f2d9 100644
--- a/docs/html/sdk/api_diff/17/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/17/changes/packages_index_all.html
@@ -87,7 +87,7 @@
 <A HREF="pkg_android.view.inputmethod.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
 <A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/packages_index_changes.html b/docs/html/sdk/api_diff/17/changes/packages_index_changes.html
index 95f3eaa..847f6a0 100644
--- a/docs/html/sdk/api_diff/17/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/17/changes/packages_index_changes.html
@@ -85,7 +85,7 @@
 <A HREF="pkg_android.view.inputmethod.html" class="hiddenlink" target="rightframe">android.view.inputmethod</A><br>
 <A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/packages_index_removals.html b/docs/html/sdk/api_diff/17/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/17/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/17/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.accessibilityservice.html b/docs/html/sdk/api_diff/17/changes/pkg_android.accessibilityservice.html
index a6444ec..24e2bc0 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.accessibilityservice.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.accessibilityservice.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.app.admin.html b/docs/html/sdk/api_diff/17/changes/pkg_android.app.admin.html
index c376db3..f925800 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.app.admin.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.app.admin.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.app.html b/docs/html/sdk/api_diff/17/changes/pkg_android.app.html
index 9254b2c..aecb448 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.app.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.appwidget.html b/docs/html/sdk/api_diff/17/changes/pkg_android.appwidget.html
index 89464ec..a0ebb2d 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.appwidget.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.appwidget.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/17/changes/pkg_android.bluetooth.html
index 62c8ca8..e417ad6 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.bluetooth.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.bluetooth.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.content.html b/docs/html/sdk/api_diff/17/changes/pkg_android.content.html
index 552695a..30af075 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.content.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/17/changes/pkg_android.content.pm.html
index f905418..2d74e8dc 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.content.pm.html
@@ -154,7 +154,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/17/changes/pkg_android.content.res.html
index 34fce2d..a3f4f07 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.content.res.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.database.html b/docs/html/sdk/api_diff/17/changes/pkg_android.database.html
index ea1b1cd..6a3cf58 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.database.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/17/changes/pkg_android.graphics.html
index e8cb4bd..71c54ab 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.graphics.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/17/changes/pkg_android.hardware.html
index 3474e45..f0f37e1 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.hardware.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.html b/docs/html/sdk/api_diff/17/changes/pkg_android.html
index 0d244c4..d321da4 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.inputmethodservice.html b/docs/html/sdk/api_diff/17/changes/pkg_android.inputmethodservice.html
index c4ece16..d7f1e29 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.inputmethodservice.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.inputmethodservice.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.location.html b/docs/html/sdk/api_diff/17/changes/pkg_android.location.html
index aa2b406..4de3a05 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.location.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.location.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.media.html b/docs/html/sdk/api_diff/17/changes/pkg_android.media.html
index e6f9142..2620c39 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.media.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.net.html b/docs/html/sdk/api_diff/17/changes/pkg_android.net.html
index 7d5074a..cedd018 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.net.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.net.http.html b/docs/html/sdk/api_diff/17/changes/pkg_android.net.http.html
index 4c64be1..bb8c834 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.net.http.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.net.http.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.net.wifi.html b/docs/html/sdk/api_diff/17/changes/pkg_android.net.wifi.html
index c87fc81..cfc7c0c 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.net.wifi.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.net.wifi.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.nfc.tech.html b/docs/html/sdk/api_diff/17/changes/pkg_android.nfc.tech.html
index fbb6cf7..4649ebe 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.nfc.tech.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.nfc.tech.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/17/changes/pkg_android.opengl.html
index 2591d26..dbafaf6 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.opengl.html
@@ -155,7 +155,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.os.html b/docs/html/sdk/api_diff/17/changes/pkg_android.os.html
index deab1aa..aaf98cb 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.os.html
@@ -176,7 +176,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/17/changes/pkg_android.provider.html
index 5f3855e..5fd007b 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.provider.html
@@ -155,7 +155,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.renderscript.html b/docs/html/sdk/api_diff/17/changes/pkg_android.renderscript.html
index 81ec16d..a893dec 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.renderscript.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.renderscript.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.telephony.cdma.html b/docs/html/sdk/api_diff/17/changes/pkg_android.telephony.cdma.html
index 6d3a785..c672aba 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.telephony.cdma.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.telephony.cdma.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/17/changes/pkg_android.telephony.html
index 01a1338..ced1bf7 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.telephony.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/17/changes/pkg_android.test.mock.html
index 7ca6b36..d0c4f81 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.test.mock.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.text.format.html b/docs/html/sdk/api_diff/17/changes/pkg_android.text.format.html
index ad85eaf..9e8a5ad 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.text.format.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.text.format.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.text.html b/docs/html/sdk/api_diff/17/changes/pkg_android.text.html
index e56697b..711a8c4 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.text.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.text.style.html b/docs/html/sdk/api_diff/17/changes/pkg_android.text.style.html
index 71a9243..f65e226 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.text.style.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.text.style.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.util.html b/docs/html/sdk/api_diff/17/changes/pkg_android.util.html
index 07cc2b4..1f7dc17 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.util.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.view.accessibility.html b/docs/html/sdk/api_diff/17/changes/pkg_android.view.accessibility.html
index 94b7be6..2dfb65c 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.view.accessibility.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.view.accessibility.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.view.html b/docs/html/sdk/api_diff/17/changes/pkg_android.view.html
index 1656c33..8e9d92e 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.view.html
@@ -176,7 +176,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.view.inputmethod.html b/docs/html/sdk/api_diff/17/changes/pkg_android.view.inputmethod.html
index 9b00617..fba2a74 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.view.inputmethod.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.view.inputmethod.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/17/changes/pkg_android.webkit.html
index 551d55e..70c633c 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.webkit.html
@@ -170,7 +170,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/17/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/17/changes/pkg_android.widget.html
index 0942a3f..52d3e66 100644
--- a/docs/html/sdk/api_diff/17/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/17/changes/pkg_android.widget.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/3/changes/alldiffs_index_additions.html
index bf2c09f..ae74f81 100644
--- a/docs/html/sdk/api_diff/3/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/3/changes/alldiffs_index_additions.html
@@ -3206,7 +3206,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.database.sqlite.SQLiteDatabase.html#android.database.sqlite.SQLiteDatabase.yieldIfContendedSafely_added()" class="hiddenlink" target="rightframe"><b>yieldIfContendedSafely</b>
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/3/changes/alldiffs_index_all.html
index 055d4bf..19fb2e8 100644
--- a/docs/html/sdk/api_diff/3/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/3/changes/alldiffs_index_all.html
@@ -4316,7 +4316,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/3/changes/alldiffs_index_changes.html
index df82cd4..84541d1 100644
--- a/docs/html/sdk/api_diff/3/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/3/changes/alldiffs_index_changes.html
@@ -1693,7 +1693,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/3/changes/alldiffs_index_removals.html
index 0f55f31..8c85470 100644
--- a/docs/html/sdk/api_diff/3/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/3/changes/alldiffs_index_removals.html
@@ -111,7 +111,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.setButton_removed(java.lang.CharSequence, android.os.Message)" class="hiddenlink" target="rightframe">type&nbsp;<strike>
 (<code>CharSequence, Message</code>)</strike>&nbsp;in&nbsp;android.app.AlertDialog
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/3/changes/android.Manifest.permission.html
index fd78ed8..562562f 100644
--- a/docs/html/sdk/api_diff/3/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/3/changes/android.Manifest.permission.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.R.attr.html b/docs/html/sdk/api_diff/3/changes/android.R.attr.html
index d35804e..3b65375 100644
--- a/docs/html/sdk/api_diff/3/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/3/changes/android.R.attr.html
@@ -724,7 +724,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.R.drawable.html b/docs/html/sdk/api_diff/3/changes/android.R.drawable.html
index ec91c69..6b60cdc 100644
--- a/docs/html/sdk/api_diff/3/changes/android.R.drawable.html
+++ b/docs/html/sdk/api_diff/3/changes/android.R.drawable.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.R.id.html b/docs/html/sdk/api_diff/3/changes/android.R.id.html
index b4eed46..4c38801 100644
--- a/docs/html/sdk/api_diff/3/changes/android.R.id.html
+++ b/docs/html/sdk/api_diff/3/changes/android.R.id.html
@@ -206,7 +206,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.R.string.html b/docs/html/sdk/api_diff/3/changes/android.R.string.html
index 8c700c0..bc1dd41 100644
--- a/docs/html/sdk/api_diff/3/changes/android.R.string.html
+++ b/docs/html/sdk/api_diff/3/changes/android.R.string.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.R.style.html b/docs/html/sdk/api_diff/3/changes/android.R.style.html
index fa925bb..83b694c 100644
--- a/docs/html/sdk/api_diff/3/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/3/changes/android.R.style.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.app.Activity.html b/docs/html/sdk/api_diff/3/changes/android.app.Activity.html
index 59c2711..cbe6d8d 100644
--- a/docs/html/sdk/api_diff/3/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/3/changes/android.app.Activity.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.app.ActivityManager.html b/docs/html/sdk/api_diff/3/changes/android.app.ActivityManager.html
index 422a675..283157f 100644
--- a/docs/html/sdk/api_diff/3/changes/android.app.ActivityManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.app.ActivityManager.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.app.AlarmManager.html b/docs/html/sdk/api_diff/3/changes/android.app.AlarmManager.html
index 1be5089..ba3fe64 100644
--- a/docs/html/sdk/api_diff/3/changes/android.app.AlarmManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.app.AlarmManager.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.app.AlertDialog.html b/docs/html/sdk/api_diff/3/changes/android.app.AlertDialog.html
index 37f5cd4..bb2fda5 100644
--- a/docs/html/sdk/api_diff/3/changes/android.app.AlertDialog.html
+++ b/docs/html/sdk/api_diff/3/changes/android.app.AlertDialog.html
@@ -220,7 +220,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.app.Instrumentation.html b/docs/html/sdk/api_diff/3/changes/android.app.Instrumentation.html
index 0d56b9c..1c7adf5 100644
--- a/docs/html/sdk/api_diff/3/changes/android.app.Instrumentation.html
+++ b/docs/html/sdk/api_diff/3/changes/android.app.Instrumentation.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.app.LauncherActivity.html b/docs/html/sdk/api_diff/3/changes/android.app.LauncherActivity.html
index bcfcabb..91176d3 100644
--- a/docs/html/sdk/api_diff/3/changes/android.app.LauncherActivity.html
+++ b/docs/html/sdk/api_diff/3/changes/android.app.LauncherActivity.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/3/changes/android.app.PendingIntent.html
index 58421a3..6804f43 100644
--- a/docs/html/sdk/api_diff/3/changes/android.app.PendingIntent.html
+++ b/docs/html/sdk/api_diff/3/changes/android.app.PendingIntent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html b/docs/html/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
index 8056fdb..6dfe39f 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.ContentProvider.html b/docs/html/sdk/api_diff/3/changes/android.content.ContentProvider.html
index 438aeb2..4d18701 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.ContentProvider.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.ContentProvider.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.ContentResolver.html b/docs/html/sdk/api_diff/3/changes/android.content.ContentResolver.html
index 97bb8f7..997a519 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.ContentResolver.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.ContentResolver.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.Context.html b/docs/html/sdk/api_diff/3/changes/android.content.Context.html
index d41db1b..b9ed258 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.Context.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.DialogInterface.html b/docs/html/sdk/api_diff/3/changes/android.content.DialogInterface.html
index 3cce190..5e9ec5c 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.DialogInterface.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.DialogInterface.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.Intent.html b/docs/html/sdk/api_diff/3/changes/android.content.Intent.html
index 5053901..41a2fb3 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.Intent.html
@@ -236,7 +236,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
index c8b3f78..2756893 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html b/docs/html/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
index d9fb46b..482f24c 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
index 12395cc..38e525c 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html b/docs/html/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
index 4b08d37..63d2389 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
@@ -159,7 +159,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/3/changes/android.content.res.Configuration.html
index 2902399..48e8357 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.res.Configuration.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.res.Resources.html b/docs/html/sdk/api_diff/3/changes/android.content.res.Resources.html
index c3c0573..fbefa16 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.res.Resources.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.res.Resources.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.content.res.TypedArray.html b/docs/html/sdk/api_diff/3/changes/android.content.res.TypedArray.html
index bb67b6d..5442e85 100644
--- a/docs/html/sdk/api_diff/3/changes/android.content.res.TypedArray.html
+++ b/docs/html/sdk/api_diff/3/changes/android.content.res.TypedArray.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.database.Cursor.html b/docs/html/sdk/api_diff/3/changes/android.database.Cursor.html
index f072598..4cce233 100644
--- a/docs/html/sdk/api_diff/3/changes/android.database.Cursor.html
+++ b/docs/html/sdk/api_diff/3/changes/android.database.Cursor.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.database.CursorWrapper.html b/docs/html/sdk/api_diff/3/changes/android.database.CursorWrapper.html
index ab1c183..9553414 100644
--- a/docs/html/sdk/api_diff/3/changes/android.database.CursorWrapper.html
+++ b/docs/html/sdk/api_diff/3/changes/android.database.CursorWrapper.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.database.DatabaseUtils.html b/docs/html/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
index fa57630..5174f13 100644
--- a/docs/html/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
+++ b/docs/html/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html b/docs/html/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
index 491a707..24f6016 100644
--- a/docs/html/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
+++ b/docs/html/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.Bitmap.html b/docs/html/sdk/api_diff/3/changes/android.graphics.Bitmap.html
index a2df5de..580ce31 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.Bitmap.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.Bitmap.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.Canvas.html b/docs/html/sdk/api_diff/3/changes/android.graphics.Canvas.html
index 01842b7..3f3109e 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.Canvas.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.Canvas.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.Rect.html b/docs/html/sdk/api_diff/3/changes/android.graphics.Rect.html
index 0db409c..6b51c62 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.Rect.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.Rect.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.RectF.html b/docs/html/sdk/api_diff/3/changes/android.graphics.RectF.html
index 05c1da6..5d0ec61 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.RectF.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.RectF.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
index 6b05cbfa..a03a7d9 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
index f4b8d7b..460b349 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
index d525dd7..3d71536 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
index 520dcd46..6625ac5 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
index 5f03e03..27725fd 100644
--- a/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
+++ b/docs/html/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
@@ -113,7 +113,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/3/changes/android.hardware.Camera.html
index 84fea2a..aa2e090 100644
--- a/docs/html/sdk/api_diff/3/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/3/changes/android.hardware.Camera.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.hardware.SensorListener.html b/docs/html/sdk/api_diff/3/changes/android.hardware.SensorListener.html
index 8a4f15a..d37d62ef 100644
--- a/docs/html/sdk/api_diff/3/changes/android.hardware.SensorListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.hardware.SensorListener.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.hardware.SensorManager.html b/docs/html/sdk/api_diff/3/changes/android.hardware.SensorManager.html
index d276bd7..95acf13 100644
--- a/docs/html/sdk/api_diff/3/changes/android.hardware.SensorManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.hardware.SensorManager.html
@@ -458,7 +458,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.location.Location.html b/docs/html/sdk/api_diff/3/changes/android.location.Location.html
index 05f5191..850fcae 100644
--- a/docs/html/sdk/api_diff/3/changes/android.location.Location.html
+++ b/docs/html/sdk/api_diff/3/changes/android.location.Location.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.location.LocationManager.html b/docs/html/sdk/api_diff/3/changes/android.location.LocationManager.html
index d98b5f3..57356d9 100644
--- a/docs/html/sdk/api_diff/3/changes/android.location.LocationManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.location.LocationManager.html
@@ -228,7 +228,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/3/changes/android.media.AudioManager.html
index 00c04bf..94c1ce1 100644
--- a/docs/html/sdk/api_diff/3/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.media.AudioManager.html
@@ -212,7 +212,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.media.MediaPlayer.html b/docs/html/sdk/api_diff/3/changes/android.media.MediaPlayer.html
index f3e24db..dbcf159 100644
--- a/docs/html/sdk/api_diff/3/changes/android.media.MediaPlayer.html
+++ b/docs/html/sdk/api_diff/3/changes/android.media.MediaPlayer.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html b/docs/html/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
index d6340c1..310cb4b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
+++ b/docs/html/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/3/changes/android.media.MediaRecorder.html
index ff46481..901f04b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/3/changes/android.media.MediaRecorder.html
@@ -225,7 +225,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.media.RingtoneManager.html b/docs/html/sdk/api_diff/3/changes/android.media.RingtoneManager.html
index a4f729a..6b41868 100644
--- a/docs/html/sdk/api_diff/3/changes/android.media.RingtoneManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.media.RingtoneManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.media.SoundPool.html b/docs/html/sdk/api_diff/3/changes/android.media.SoundPool.html
index 52f3301..488eb9e 100644
--- a/docs/html/sdk/api_diff/3/changes/android.media.SoundPool.html
+++ b/docs/html/sdk/api_diff/3/changes/android.media.SoundPool.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.net.ConnectivityManager.html b/docs/html/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
index b78d6a0..93f58cbc 100644
--- a/docs/html/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.net.NetworkInfo.html b/docs/html/sdk/api_diff/3/changes/android.net.NetworkInfo.html
index 1f3768e..c01eb8a 100644
--- a/docs/html/sdk/api_diff/3/changes/android.net.NetworkInfo.html
+++ b/docs/html/sdk/api_diff/3/changes/android.net.NetworkInfo.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html b/docs/html/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
index 4fd3f6e..1320e01 100644
--- a/docs/html/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.Binder.html b/docs/html/sdk/api_diff/3/changes/android.os.Binder.html
index 9fec6a4..4a709aa 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.Binder.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.Binder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.Build.html b/docs/html/sdk/api_diff/3/changes/android.os.Build.html
index cf738eb..e4cfb74 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.Build.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.Build.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.Debug.html b/docs/html/sdk/api_diff/3/changes/android.os.Debug.html
index c2aead7..bad7674 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.Debug.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.Debug.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.Environment.html b/docs/html/sdk/api_diff/3/changes/android.os.Environment.html
index 1151021..7213689 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.Environment.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.Environment.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.Handler.html b/docs/html/sdk/api_diff/3/changes/android.os.Handler.html
index dcc1da8..53b0a6e 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.Handler.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.Handler.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.IBinder.html b/docs/html/sdk/api_diff/3/changes/android.os.IBinder.html
index 1328f26..b2f85b6 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.IBinder.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.IBinder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.Looper.html b/docs/html/sdk/api_diff/3/changes/android.os.Looper.html
index 9910373..70fa745 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.Looper.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.Looper.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.Parcel.html b/docs/html/sdk/api_diff/3/changes/android.os.Parcel.html
index 70eb25d..3dda83d 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.Parcel.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.Parcel.html
@@ -131,7 +131,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html b/docs/html/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
index 605c019..416bb58 100644
--- a/docs/html/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
+++ b/docs/html/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.preference.DialogPreference.html b/docs/html/sdk/api_diff/3/changes/android.preference.DialogPreference.html
index 7acc308..c53842a 100644
--- a/docs/html/sdk/api_diff/3/changes/android.preference.DialogPreference.html
+++ b/docs/html/sdk/api_diff/3/changes/android.preference.DialogPreference.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.Browser.html b/docs/html/sdk/api_diff/3/changes/android.provider.Browser.html
index 110d28a..ccf63ce8 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.Browser.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.Browser.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html b/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
index 0f2a63b..9050037 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html b/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
index c2694d4..90a543e 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html b/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
index 758917d..72e3e56 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
index 1b14ca5..eb6bc62 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
index cecc4f6..50257df 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
index 7eb4f8f..ac4b7aa 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
index d4ebdaf..f8163d6 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
index 76a3df3..c502302 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.html b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.html
index 8c61a9a..a62409b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.MediaStore.html
@@ -192,7 +192,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/3/changes/android.provider.Settings.System.html
index 0672182..fe797d7 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.Settings.System.html
@@ -487,7 +487,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/3/changes/android.provider.Settings.html
index 00b0b1f..f475c84 100644
--- a/docs/html/sdk/api_diff/3/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/3/changes/android.provider.Settings.html
@@ -185,7 +185,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html b/docs/html/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
index 5804c12..4e7729b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
+++ b/docs/html/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
index 2948e22..5ece4b2 100644
--- a/docs/html/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html b/docs/html/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
index ce994dc..d5b4c3e 100644
--- a/docs/html/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
+++ b/docs/html/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html b/docs/html/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
index 7574c36..63f5cb0 100644
--- a/docs/html/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
+++ b/docs/html/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html b/docs/html/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
index b8970e5..986bd8b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
+++ b/docs/html/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.test.ProviderTestCase.html b/docs/html/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
index 19c7eb5..570b5e6 100644
--- a/docs/html/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
+++ b/docs/html/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.test.TouchUtils.html b/docs/html/sdk/api_diff/3/changes/android.test.TouchUtils.html
index 4606b94..af0222b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.test.TouchUtils.html
+++ b/docs/html/sdk/api_diff/3/changes/android.test.TouchUtils.html
@@ -359,7 +359,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
index ff4e607..95055ba 100644
--- a/docs/html/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html b/docs/html/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html
index e98d280..bc32fc5 100644
--- a/docs/html/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html
+++ b/docs/html/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.Annotation.html b/docs/html/sdk/api_diff/3/changes/android.text.Annotation.html
index cc1c872..fd59f7a 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.Annotation.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.Annotation.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.AutoText.html b/docs/html/sdk/api_diff/3/changes/android.text.AutoText.html
index fe1dac8..be59e37 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.AutoText.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.AutoText.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.SpanWatcher.html b/docs/html/sdk/api_diff/3/changes/android.text.SpanWatcher.html
index 83524fd3..639f1c9 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.SpanWatcher.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.SpanWatcher.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.Spanned.html b/docs/html/sdk/api_diff/3/changes/android.text.Spanned.html
index 0997f18..4169150 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.Spanned.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.Spanned.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.TextUtils.html b/docs/html/sdk/api_diff/3/changes/android.text.TextUtils.html
index daf9724..505151f 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.TextUtils.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.TextUtils.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.TextWatcher.html b/docs/html/sdk/api_diff/3/changes/android.text.TextWatcher.html
index 4507a9f..6fe0c10 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.TextWatcher.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.TextWatcher.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html b/docs/html/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
index 9842e35..08ceb8e 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
index 5771069..68a5768 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
index 55d951b..b1c7776 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
index fdc0694..22a06d5 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
index 665ddfb..bb7eee0 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
index e616589..bb42b0b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.KeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.KeyListener.html
index e130b45..f5114a0 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.KeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.KeyListener.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
index 718952d..684c68c 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.MovementMethod.html b/docs/html/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
index a35816b..9cc00e7 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
index 5dbcb76..ece5c16 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
index 248d333..eb22663 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html b/docs/html/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
index 7f01b23..a68689b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
index 132e8ac..846d5a0 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html b/docs/html/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
index 0b69f96..0d16dec 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.method.Touch.html b/docs/html/sdk/api_diff/3/changes/android.text.method.Touch.html
index 8ee56c8..90b4db6 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.method.Touch.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.method.Touch.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
index bce6cac..753eb9b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html b/docs/html/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
index c05042e..bbafaf2 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
index f6f111a..d26e267 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.BulletSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
index 6c1afa4..fd3c8de 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
index d6665d8..a381c11 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
index d0c72f8..e0226d4 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
@@ -152,7 +152,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
index 2008d44..fcd3129 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.ImageSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
index 08ba87a..cccb7d8 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html b/docs/html/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
index 77b798d..25031ea 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
index c71892f..3b32d89 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
index 90dd564..71dfabb 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
index bac6148..8ad550d 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
index e9ea964..cb82c64 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
index 6fafb9a..a2952de 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
index 123f7d1..a793bc8 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.StyleSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
index 2c2d71f..e6db4dd 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
index feca474..411c459 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
index b112ec7..9404b9f 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
index fd3b0ea..ad1e947 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
index 2a3c149..9051e72 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.URLSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.URLSpan.html
index a100c67..6529d41 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.URLSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.URLSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html b/docs/html/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
index 95123ce..97e1514 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html b/docs/html/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
index 81251dc0..d005af2 100644
--- a/docs/html/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
+++ b/docs/html/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.util.SparseIntArray.html b/docs/html/sdk/api_diff/3/changes/android.util.SparseIntArray.html
index 6a04ea8..ac8d9cc 100644
--- a/docs/html/sdk/api_diff/3/changes/android.util.SparseIntArray.html
+++ b/docs/html/sdk/api_diff/3/changes/android.util.SparseIntArray.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.util.TimeUtils.html b/docs/html/sdk/api_diff/3/changes/android.util.TimeUtils.html
index 4635a73..7d02b7c 100644
--- a/docs/html/sdk/api_diff/3/changes/android.util.TimeUtils.html
+++ b/docs/html/sdk/api_diff/3/changes/android.util.TimeUtils.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html b/docs/html/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
index 0248e7a..b01d50b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.GestureDetector.html b/docs/html/sdk/api_diff/3/changes/android.view.GestureDetector.html
index c06eb57..ecce925 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.GestureDetector.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.GestureDetector.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.Gravity.html b/docs/html/sdk/api_diff/3/changes/android.view.Gravity.html
index 2d430f6..09462e6 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.Gravity.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.Gravity.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html b/docs/html/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
index c6f5a77..ec58eb75 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/3/changes/android.view.KeyEvent.html
index ae09692..927b948 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.KeyEvent.html
@@ -260,7 +260,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.Menu.html b/docs/html/sdk/api_diff/3/changes/android.view.Menu.html
index aa93fb8..f47de3b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.Menu.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.Menu.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/3/changes/android.view.MotionEvent.html
index 41c690e..bbb8169 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.MotionEvent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.OrientationListener.html b/docs/html/sdk/api_diff/3/changes/android.view.OrientationListener.html
index 4b7421f..90d3170 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.OrientationListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.OrientationListener.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.View.html b/docs/html/sdk/api_diff/3/changes/android.view.View.html
index 86f9ca6..b0bd98b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.View.html
@@ -242,7 +242,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
index e1083ba..eb2fbb1 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
@@ -267,7 +267,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.ViewDebug.html b/docs/html/sdk/api_diff/3/changes/android.view.ViewDebug.html
index 90b2d20..aae063b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.ViewDebug.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.ViewDebug.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/3/changes/android.view.ViewGroup.html
index a8457da..36764a5 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.ViewGroup.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.ViewGroup.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.ViewParent.html b/docs/html/sdk/api_diff/3/changes/android.view.ViewParent.html
index 5f9fc027..33681d1 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.ViewParent.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.ViewParent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html b/docs/html/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
index 6cd9724..722b3f3 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.Window.html b/docs/html/sdk/api_diff/3/changes/android.view.Window.html
index bf5347e..d9e1635 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.Window.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.Window.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
index c59fef8..47fc3e6 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
@@ -277,7 +277,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.animation.Animation.html b/docs/html/sdk/api_diff/3/changes/android.view.animation.Animation.html
index d0e860b..e4136f2 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.animation.Animation.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.animation.Animation.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.view.animation.Transformation.html b/docs/html/sdk/api_diff/3/changes/android.view.animation.Transformation.html
index 62120f6..1527048 100644
--- a/docs/html/sdk/api_diff/3/changes/android.view.animation.Transformation.html
+++ b/docs/html/sdk/api_diff/3/changes/android.view.animation.Transformation.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.webkit.URLUtil.html b/docs/html/sdk/api_diff/3/changes/android.webkit.URLUtil.html
index bb49443..4676bce 100644
--- a/docs/html/sdk/api_diff/3/changes/android.webkit.URLUtil.html
+++ b/docs/html/sdk/api_diff/3/changes/android.webkit.URLUtil.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html b/docs/html/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
index ea2b610..16d7617 100644
--- a/docs/html/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
+++ b/docs/html/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html b/docs/html/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
index ca0addd..620b93d 100644
--- a/docs/html/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
+++ b/docs/html/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html b/docs/html/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
index e223080..45f69eb 100644
--- a/docs/html/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
+++ b/docs/html/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/3/changes/android.webkit.WebSettings.html
index 7c7161d..e9a08e6 100644
--- a/docs/html/sdk/api_diff/3/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/3/changes/android.webkit.WebSettings.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/3/changes/android.webkit.WebView.html
index acc289c..57d1b11 100644
--- a/docs/html/sdk/api_diff/3/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/3/changes/android.webkit.WebView.html
@@ -178,7 +178,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.AbsListView.html b/docs/html/sdk/api_diff/3/changes/android.widget.AbsListView.html
index f3dc8e7..8c24e02 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.AbsListView.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.AbsListView.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html b/docs/html/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
index 830ea55..f0a99fc 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html b/docs/html/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
index b43d34b..8af8c2a 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html b/docs/html/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
index e7b65ad..da6573b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html b/docs/html/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
index de12564..7e0a692 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
@@ -199,7 +199,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.Chronometer.html b/docs/html/sdk/api_diff/3/changes/android.widget.Chronometer.html
index 428ece8..949dcb27 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.Chronometer.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.Chronometer.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.CursorAdapter.html b/docs/html/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
index d0f5491..28a0fb3 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
@@ -146,7 +146,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.GridView.html b/docs/html/sdk/api_diff/3/changes/android.widget.GridView.html
index 3304a1a..693eff4 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.GridView.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.GridView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.ListView.html b/docs/html/sdk/api_diff/3/changes/android.widget.ListView.html
index dbef56f..69cdb9f 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.ListView.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.ListView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html b/docs/html/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
index 7ef698d..544c4fc 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.PopupWindow.html b/docs/html/sdk/api_diff/3/changes/android.widget.PopupWindow.html
index 409ccc5..cddc67b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.PopupWindow.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.PopupWindow.html
@@ -228,7 +228,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.ProgressBar.html b/docs/html/sdk/api_diff/3/changes/android.widget.ProgressBar.html
index 9d1e13a..1246e46 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.ProgressBar.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.ProgressBar.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html b/docs/html/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
index ce206f5..09c4909 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/3/changes/android.widget.RemoteViews.html
index 0a27192..3f443a6 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.RemoteViews.html
@@ -206,7 +206,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html b/docs/html/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
index 2cf9c82..ef0e179 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.Scroller.html b/docs/html/sdk/api_diff/3/changes/android.widget.Scroller.html
index c72001d..66d2d0b 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.Scroller.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.Scroller.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html b/docs/html/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
index 7ceecd6..2cec40a 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/android.widget.TextView.html b/docs/html/sdk/api_diff/3/changes/android.widget.TextView.html
index 08f7454..11ebaeb 100644
--- a/docs/html/sdk/api_diff/3/changes/android.widget.TextView.html
+++ b/docs/html/sdk/api_diff/3/changes/android.widget.TextView.html
@@ -318,7 +318,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/changes-summary.html b/docs/html/sdk/api_diff/3/changes/changes-summary.html
index 4c0012a..754669b 100644
--- a/docs/html/sdk/api_diff/3/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/3/changes/changes-summary.html
@@ -416,7 +416,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/classes_index_additions.html b/docs/html/sdk/api_diff/3/changes/classes_index_additions.html
index f15b280..8cb8d9a 100644
--- a/docs/html/sdk/api_diff/3/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/3/changes/classes_index_additions.html
@@ -454,7 +454,7 @@
 <A HREF="pkg_android.view.html#ViewDebug.CapturedViewProperty" class="hiddenlink" target="rightframe"><b>ViewDebug.CapturedViewProperty</b></A><br>
 <A HREF="pkg_android.view.html#ViewTreeObserver.OnScrollChangedListener" class="hiddenlink" target="rightframe"><b><i>ViewTreeObserver.OnScrollChangedListener</i></b></A><br>
 <A HREF="pkg_android.opengl.html#Visibility" class="hiddenlink" target="rightframe"><b>Visibility</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/classes_index_all.html b/docs/html/sdk/api_diff/3/changes/classes_index_all.html
index 408e749..ea3f242 100644
--- a/docs/html/sdk/api_diff/3/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/3/changes/classes_index_all.html
@@ -943,7 +943,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/classes_index_changes.html b/docs/html/sdk/api_diff/3/changes/classes_index_changes.html
index df07718..6fa0199 100644
--- a/docs/html/sdk/api_diff/3/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/3/changes/classes_index_changes.html
@@ -826,7 +826,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/classes_index_removals.html b/docs/html/sdk/api_diff/3/changes/classes_index_removals.html
index 5b38988..a855673 100644
--- a/docs/html/sdk/api_diff/3/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/3/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:.5em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/3/changes/constructors_index_additions.html
index e934822..4b3f854 100644
--- a/docs/html/sdk/api_diff/3/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/3/changes/constructors_index_additions.html
@@ -394,7 +394,7 @@
 (<code>Parcel</code>)</A></nobr>&nbsp;constructor<br>
 <nobr><A HREF="android.text.style.URLSpan.html#android.text.style.URLSpan.ctor_added(android.os.Parcel)" class="hiddenlink" target="rightframe"><b>URLSpan</b>
 (<code>Parcel</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/constructors_index_all.html b/docs/html/sdk/api_diff/3/changes/constructors_index_all.html
index 9372548..eb943fe 100644
--- a/docs/html/sdk/api_diff/3/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/3/changes/constructors_index_all.html
@@ -472,7 +472,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.ViewConfiguration.html#android.view.ViewConfiguration.ctor_changed()" class="hiddenlink" target="rightframe">ViewConfiguration
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/3/changes/constructors_index_changes.html
index 34bc391..95e03bc 100644
--- a/docs/html/sdk/api_diff/3/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/3/changes/constructors_index_changes.html
@@ -64,7 +64,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.ViewConfiguration.html#android.view.ViewConfiguration.ctor_changed()" class="hiddenlink" target="rightframe">ViewConfiguration
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/3/changes/constructors_index_removals.html
index 5306e8d..4ad9058 100644
--- a/docs/html/sdk/api_diff/3/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/3/changes/constructors_index_removals.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.net.NetworkInfo.html#android.net.NetworkInfo.ctor_removed(int)" class="hiddenlink" target="rightframe"><strike>NetworkInfo</strike>
 (<code>int</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/dalvik.system.DexFile.html b/docs/html/sdk/api_diff/3/changes/dalvik.system.DexFile.html
index b8517aa..37e4f63 100644
--- a/docs/html/sdk/api_diff/3/changes/dalvik.system.DexFile.html
+++ b/docs/html/sdk/api_diff/3/changes/dalvik.system.DexFile.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/dalvik.system.VMDebug.html b/docs/html/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
index 3f53e44..312b2b0 100644
--- a/docs/html/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
+++ b/docs/html/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/dalvik.system.Zygote.html b/docs/html/sdk/api_diff/3/changes/dalvik.system.Zygote.html
index 4282162..9869cc5 100644
--- a/docs/html/sdk/api_diff/3/changes/dalvik.system.Zygote.html
+++ b/docs/html/sdk/api_diff/3/changes/dalvik.system.Zygote.html
@@ -180,7 +180,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/fields_index_additions.html b/docs/html/sdk/api_diff/3/changes/fields_index_additions.html
index 5c24079..bb880c3 100644
--- a/docs/html/sdk/api_diff/3/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/3/changes/fields_index_additions.html
@@ -1114,7 +1114,7 @@
 </nobr><br>
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_SECURE_SETTINGS" class="hiddenlink" target="rightframe">WRITE_SECURE_SETTINGS</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/fields_index_all.html b/docs/html/sdk/api_diff/3/changes/fields_index_all.html
index 49c429f..a1ca32f 100644
--- a/docs/html/sdk/api_diff/3/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/3/changes/fields_index_all.html
@@ -1255,7 +1255,7 @@
 </nobr><br>
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_SECURE_SETTINGS" class="hiddenlink" target="rightframe">WRITE_SECURE_SETTINGS</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/fields_index_changes.html b/docs/html/sdk/api_diff/3/changes/fields_index_changes.html
index 5059b34..8f6f6a8 100644
--- a/docs/html/sdk/api_diff/3/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/3/changes/fields_index_changes.html
@@ -456,7 +456,7 @@
 </nobr><br>
 <nobr><A HREF="android.provider.Settings.System.html#android.provider.Settings.System.WIFI_WATCHDOG_PING_TIMEOUT_MS" class="hiddenlink" target="rightframe">WIFI_WATCHDOG_PING_TIMEOUT_MS</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/fields_index_removals.html b/docs/html/sdk/api_diff/3/changes/fields_index_removals.html
index fc49c41..3928565 100644
--- a/docs/html/sdk/api_diff/3/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/3/changes/fields_index_removals.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.content.Intent.html#android.content.Intent.CATEGORY_GADGET" class="hiddenlink" target="rightframe"><strike>CATEGORY_GADGET</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html b/docs/html/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
index 0e04731..80bdc54 100644
--- a/docs/html/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
+++ b/docs/html/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/java.lang.Class.html b/docs/html/sdk/api_diff/3/changes/java.lang.Class.html
index 212899a..33938b7 100644
--- a/docs/html/sdk/api_diff/3/changes/java.lang.Class.html
+++ b/docs/html/sdk/api_diff/3/changes/java.lang.Class.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html b/docs/html/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
index c27ba0c..343cca3 100644
--- a/docs/html/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
+++ b/docs/html/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html b/docs/html/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
index ca185e0..03a5e92 100644
--- a/docs/html/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
+++ b/docs/html/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/java.util.logging.Level.html b/docs/html/sdk/api_diff/3/changes/java.util.logging.Level.html
index e85b8a6..f43ef10 100644
--- a/docs/html/sdk/api_diff/3/changes/java.util.logging.Level.html
+++ b/docs/html/sdk/api_diff/3/changes/java.util.logging.Level.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/java.util.logging.LogManager.html b/docs/html/sdk/api_diff/3/changes/java.util.logging.LogManager.html
index 9682ddc..ecad5d5 100644
--- a/docs/html/sdk/api_diff/3/changes/java.util.logging.LogManager.html
+++ b/docs/html/sdk/api_diff/3/changes/java.util.logging.LogManager.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/jdiff_help.html b/docs/html/sdk/api_diff/3/changes/jdiff_help.html
index 08f8704..8ae54dc 100644
--- a/docs/html/sdk/api_diff/3/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/3/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/3/changes/jdiff_statistics.html
index e39c5b9..8b1c227 100644
--- a/docs/html/sdk/api_diff/3/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/3/changes/jdiff_statistics.html
@@ -1229,7 +1229,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/3/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/3/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/3/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/methods_index_additions.html b/docs/html/sdk/api_diff/3/changes/methods_index_additions.html
index d9a7102..c1b01b7 100644
--- a/docs/html/sdk/api_diff/3/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/3/changes/methods_index_additions.html
@@ -1401,7 +1401,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.database.sqlite.SQLiteDatabase.html#android.database.sqlite.SQLiteDatabase.yieldIfContendedSafely_added()" class="hiddenlink" target="rightframe"><b>yieldIfContendedSafely</b>
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/methods_index_all.html b/docs/html/sdk/api_diff/3/changes/methods_index_all.html
index 3ebc06c..f2b6d11 100644
--- a/docs/html/sdk/api_diff/3/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/3/changes/methods_index_all.html
@@ -1596,7 +1596,7 @@
 ()</A></nobr><br>
 <nobr><A HREF="android.database.sqlite.SQLiteDatabase.html#android.database.sqlite.SQLiteDatabase.yieldIfContendedSafely_added()" class="hiddenlink" target="rightframe"><b>yieldIfContendedSafely</b>
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/methods_index_changes.html b/docs/html/sdk/api_diff/3/changes/methods_index_changes.html
index 947c7df..670a1a7 100644
--- a/docs/html/sdk/api_diff/3/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/3/changes/methods_index_changes.html
@@ -431,7 +431,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.database.sqlite.SQLiteDatabase.html#android.database.sqlite.SQLiteDatabase.yieldIfContended_changed()" class="hiddenlink" target="rightframe">yieldIfContended
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/methods_index_removals.html b/docs/html/sdk/api_diff/3/changes/methods_index_removals.html
index fff7c9b..10a8b511 100644
--- a/docs/html/sdk/api_diff/3/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/3/changes/methods_index_removals.html
@@ -78,7 +78,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.app.AlertDialog.html#android.app.AlertDialog.setButton_removed(java.lang.CharSequence, android.os.Message)" class="hiddenlink" target="rightframe">type&nbsp;<strike>
 (<code>CharSequence, Message</code>)</strike>&nbsp;in&nbsp;android.app.AlertDialog
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/packages_index_additions.html b/docs/html/sdk/api_diff/3/changes/packages_index_additions.html
index 619b923..ab39e8d 100644
--- a/docs/html/sdk/api_diff/3/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/3/changes/packages_index_additions.html
@@ -55,7 +55,7 @@
 <A HREF="changes-summary.html#android.text.format" class="hiddenlink" target="rightframe"><b>android.text.format</b></A><br>
 <A HREF="changes-summary.html#android.view.inputmethod" class="hiddenlink" target="rightframe"><b>android.view.inputmethod</b></A><br>
 <A HREF="changes-summary.html#java.beans" class="hiddenlink" target="rightframe"><b>java.beans</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/packages_index_all.html b/docs/html/sdk/api_diff/3/changes/packages_index_all.html
index a5b6aa5..e39aab1 100644
--- a/docs/html/sdk/api_diff/3/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/3/changes/packages_index_all.html
@@ -91,7 +91,7 @@
 <A HREF="pkg_java.lang.html" class="hiddenlink" target="rightframe">java.lang</A><br>
 <A HREF="pkg_java.util.jar.html" class="hiddenlink" target="rightframe">java.util.jar</A><br>
 <A HREF="pkg_java.util.logging.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/packages_index_changes.html b/docs/html/sdk/api_diff/3/changes/packages_index_changes.html
index 303991c..bc6b45c 100644
--- a/docs/html/sdk/api_diff/3/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/3/changes/packages_index_changes.html
@@ -85,7 +85,7 @@
 <A HREF="pkg_java.lang.html" class="hiddenlink" target="rightframe">java.lang</A><br>
 <A HREF="pkg_java.util.jar.html" class="hiddenlink" target="rightframe">java.util.jar</A><br>
 <A HREF="pkg_java.util.logging.html" class="hiddenlink" target="rightframe">java.util.logging</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/packages_index_removals.html b/docs/html/sdk/api_diff/3/changes/packages_index_removals.html
index cd89a22..f22b7e4 100644
--- a/docs/html/sdk/api_diff/3/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/3/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.app.html b/docs/html/sdk/api_diff/3/changes/pkg_android.app.html
index e71150e..50d372d 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.app.html
@@ -183,7 +183,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.content.html b/docs/html/sdk/api_diff/3/changes/pkg_android.content.html
index 82c7540..be2eb8b 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.content.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/3/changes/pkg_android.content.pm.html
index 228d5370..46d3c81 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.content.pm.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/3/changes/pkg_android.content.res.html
index ed61a68..9bb6d98 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.content.res.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.database.html b/docs/html/sdk/api_diff/3/changes/pkg_android.database.html
index 3779b1e..2ae206f 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.database.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.database.sqlite.html b/docs/html/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
index 759b62e..e7d313b 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html b/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
index 390658f..f2ac3ec 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html b/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
index a6f9d2b..0fe8132 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.html
index c7b3656..ed1244f 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.graphics.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/3/changes/pkg_android.hardware.html
index 2feb91c..814da27 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.hardware.html
@@ -155,7 +155,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.html b/docs/html/sdk/api_diff/3/changes/pkg_android.html
index 389d3ba..634e236 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.location.html b/docs/html/sdk/api_diff/3/changes/pkg_android.location.html
index d4cde3a..a7c8727 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.location.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.location.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.media.html b/docs/html/sdk/api_diff/3/changes/pkg_android.media.html
index 788a689..e7a5c4c 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.media.html
@@ -239,7 +239,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.net.html b/docs/html/sdk/api_diff/3/changes/pkg_android.net.html
index c9163bc..e9a7fd8 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.net.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.net.wifi.html b/docs/html/sdk/api_diff/3/changes/pkg_android.net.wifi.html
index 7b2f4d6..612bc2c 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.net.wifi.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.net.wifi.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/3/changes/pkg_android.opengl.html
index 0d5be82..d89e0c5 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.opengl.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.os.html b/docs/html/sdk/api_diff/3/changes/pkg_android.os.html
index 8058a44..e98d713 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.os.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.preference.html b/docs/html/sdk/api_diff/3/changes/pkg_android.preference.html
index a08098c..ea6f993 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.preference.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.preference.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/3/changes/pkg_android.provider.html
index ded1469..e205cb5 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.provider.html
@@ -218,7 +218,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html b/docs/html/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
index 952457a..7cd7023 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/3/changes/pkg_android.telephony.html
index 70abc5b..fdf8ead 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.telephony.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.test.html b/docs/html/sdk/api_diff/3/changes/pkg_android.test.html
index ad006a8..a43438c 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.test.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.test.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/3/changes/pkg_android.test.mock.html
index 151b2cb..2ca0024 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.test.mock.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html b/docs/html/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
index 6935761..3286a11 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.text.html b/docs/html/sdk/api_diff/3/changes/pkg_android.text.html
index a7fb2d6..d1bffd0 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.text.html
@@ -176,7 +176,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.text.method.html b/docs/html/sdk/api_diff/3/changes/pkg_android.text.method.html
index 8f9a1b2..81118a4 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.text.method.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.text.method.html
@@ -203,7 +203,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.text.style.html b/docs/html/sdk/api_diff/3/changes/pkg_android.text.style.html
index fa610ce8..a9c2ead 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.text.style.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.text.style.html
@@ -274,7 +274,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.util.html b/docs/html/sdk/api_diff/3/changes/pkg_android.util.html
index a72da6e..710dc07 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.util.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.view.animation.html b/docs/html/sdk/api_diff/3/changes/pkg_android.view.animation.html
index 55da448..10b853f 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.view.animation.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.view.animation.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.view.html b/docs/html/sdk/api_diff/3/changes/pkg_android.view.html
index b5acb57..4bc77bb 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.view.html
@@ -253,7 +253,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/3/changes/pkg_android.webkit.html
index c44cc89..65530e9 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.webkit.html
@@ -155,7 +155,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/3/changes/pkg_android.widget.html
index 5f5cfbf..f7e681c 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_android.widget.html
@@ -295,7 +295,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_dalvik.system.html b/docs/html/sdk/api_diff/3/changes/pkg_dalvik.system.html
index 075e90e..5879505 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_dalvik.system.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_dalvik.system.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_java.lang.html b/docs/html/sdk/api_diff/3/changes/pkg_java.lang.html
index acfdcb7..b802c33 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_java.lang.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_java.lang.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_java.util.jar.html b/docs/html/sdk/api_diff/3/changes/pkg_java.util.jar.html
index 15a17d0..984c261 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_java.util.jar.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_java.util.jar.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/3/changes/pkg_java.util.logging.html b/docs/html/sdk/api_diff/3/changes/pkg_java.util.logging.html
index 0a711a8..c70c775 100644
--- a/docs/html/sdk/api_diff/3/changes/pkg_java.util.logging.html
+++ b/docs/html/sdk/api_diff/3/changes/pkg_java.util.logging.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/4/changes/alldiffs_index_additions.html
index 1de6686..21c8732 100644
--- a/docs/html/sdk/api_diff/4/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/4/changes/alldiffs_index_additions.html
@@ -1537,7 +1537,7 @@
 <A HREF="pkg_android.widget.html#ZoomButtonsController" class="hiddenlink" target="rightframe"><b>ZoomButtonsController</b></A><br>
 <!-- Class ZoomButtonsController.OnZoomListener -->
 <A HREF="pkg_android.widget.html#ZoomButtonsController.OnZoomListener" class="hiddenlink" target="rightframe"><b><i>ZoomButtonsController.OnZoomListener</i></b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/4/changes/alldiffs_index_all.html
index e8828f6..b417df4 100644
--- a/docs/html/sdk/api_diff/4/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/4/changes/alldiffs_index_all.html
@@ -2209,7 +2209,7 @@
 <A HREF="pkg_android.widget.html#ZoomButtonsController" class="hiddenlink" target="rightframe"><b>ZoomButtonsController</b></A><br>
 <!-- Class ZoomButtonsController.OnZoomListener -->
 <A HREF="pkg_android.widget.html#ZoomButtonsController.OnZoomListener" class="hiddenlink" target="rightframe"><b><i>ZoomButtonsController.OnZoomListener</i></b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/4/changes/alldiffs_index_changes.html
index cce73e0..81508e3 100644
--- a/docs/html/sdk/api_diff/4/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/4/changes/alldiffs_index_changes.html
@@ -936,7 +936,7 @@
 <A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
 <!-- Class Window.Callback -->
 <A HREF="android.view.Window.Callback.html" class="hiddenlink" target="rightframe"><i>Window.Callback</i></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/4/changes/alldiffs_index_removals.html
index f303bfa..88e578b 100644
--- a/docs/html/sdk/api_diff/4/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/4/changes/alldiffs_index_removals.html
@@ -191,7 +191,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.SET_PROCESS_FOREGROUND" class="hiddenlink" target="rightframe"><strike>SET_PROCESS_FOREGROUND</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/4/changes/android.Manifest.permission.html
index dac036f..0ee98da 100644
--- a/docs/html/sdk/api_diff/4/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/4/changes/android.Manifest.permission.html
@@ -172,7 +172,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.Manifest.permission_group.html b/docs/html/sdk/api_diff/4/changes/android.Manifest.permission_group.html
index b9cef41..aa65fd6 100644
--- a/docs/html/sdk/api_diff/4/changes/android.Manifest.permission_group.html
+++ b/docs/html/sdk/api_diff/4/changes/android.Manifest.permission_group.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.R.anim.html b/docs/html/sdk/api_diff/4/changes/android.R.anim.html
index 02567d1..6a2d814 100644
--- a/docs/html/sdk/api_diff/4/changes/android.R.anim.html
+++ b/docs/html/sdk/api_diff/4/changes/android.R.anim.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.R.attr.html b/docs/html/sdk/api_diff/4/changes/android.R.attr.html
index ac65950..40ac141 100644
--- a/docs/html/sdk/api_diff/4/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/4/changes/android.R.attr.html
@@ -353,7 +353,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.R.drawable.html b/docs/html/sdk/api_diff/4/changes/android.R.drawable.html
index db5443e..8cf8b3e 100644
--- a/docs/html/sdk/api_diff/4/changes/android.R.drawable.html
+++ b/docs/html/sdk/api_diff/4/changes/android.R.drawable.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.R.style.html b/docs/html/sdk/api_diff/4/changes/android.R.style.html
index 8526cb8..d50b4f9 100644
--- a/docs/html/sdk/api_diff/4/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/4/changes/android.R.style.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.app.Activity.html b/docs/html/sdk/api_diff/4/changes/android.app.Activity.html
index ce11b59..6e9359f 100644
--- a/docs/html/sdk/api_diff/4/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/4/changes/android.app.Activity.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.app.Dialog.html b/docs/html/sdk/api_diff/4/changes/android.app.Dialog.html
index fbd3663..cc30e68 100644
--- a/docs/html/sdk/api_diff/4/changes/android.app.Dialog.html
+++ b/docs/html/sdk/api_diff/4/changes/android.app.Dialog.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.app.LauncherActivity.ListItem.html b/docs/html/sdk/api_diff/4/changes/android.app.LauncherActivity.ListItem.html
index 6379db8..80e5557 100644
--- a/docs/html/sdk/api_diff/4/changes/android.app.LauncherActivity.ListItem.html
+++ b/docs/html/sdk/api_diff/4/changes/android.app.LauncherActivity.ListItem.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.app.LauncherActivity.html b/docs/html/sdk/api_diff/4/changes/android.app.LauncherActivity.html
index 149e7b4..ed3235c 100644
--- a/docs/html/sdk/api_diff/4/changes/android.app.LauncherActivity.html
+++ b/docs/html/sdk/api_diff/4/changes/android.app.LauncherActivity.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/4/changes/android.app.PendingIntent.html
index 490c781..2667ced 100644
--- a/docs/html/sdk/api_diff/4/changes/android.app.PendingIntent.html
+++ b/docs/html/sdk/api_diff/4/changes/android.app.PendingIntent.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/4/changes/android.app.SearchManager.html
index f9c6ea7..82ea50d 100644
--- a/docs/html/sdk/api_diff/4/changes/android.app.SearchManager.html
+++ b/docs/html/sdk/api_diff/4/changes/android.app.SearchManager.html
@@ -206,7 +206,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.ComponentName.html b/docs/html/sdk/api_diff/4/changes/android.content.ComponentName.html
index 8299043..84748ef 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.ComponentName.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.ComponentName.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.ContentProvider.html b/docs/html/sdk/api_diff/4/changes/android.content.ContentProvider.html
index 88c4e72..6e24b81 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.ContentProvider.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.ContentProvider.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.Context.html b/docs/html/sdk/api_diff/4/changes/android.content.Context.html
index 2c348fd..724d804 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.Context.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.ContextWrapper.html b/docs/html/sdk/api_diff/4/changes/android.content.ContextWrapper.html
index 80f47b8..cec27fa 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.ContextWrapper.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.ContextWrapper.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.Intent.html b/docs/html/sdk/api_diff/4/changes/android.content.Intent.html
index e482147..f1fb697 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.Intent.html
@@ -221,7 +221,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html
index a6a0b2a..c97cb73 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html
index e3fef19..7e8c77d 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html b/docs/html/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html
index 0c26b5f..0928de9 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/4/changes/android.content.pm.PackageManager.html
index ca2d857..e3b77a7 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.pm.PackageManager.html
@@ -323,7 +323,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html b/docs/html/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html
index f0c8d61..98f0182 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/4/changes/android.content.res.Configuration.html
index 661a19b..a4a3a98 100644
--- a/docs/html/sdk/api_diff/4/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/4/changes/android.content.res.Configuration.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.Bitmap.html b/docs/html/sdk/api_diff/4/changes/android.graphics.Bitmap.html
index 2ebc43c..26d1a755 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.Bitmap.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.Bitmap.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html b/docs/html/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html
index eb21e27..dcb3a7f 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html b/docs/html/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html
index cf7ac0f..267a1dc 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.Canvas.html b/docs/html/sdk/api_diff/4/changes/android.graphics.Canvas.html
index c728b37..8455cd6 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.Canvas.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.Canvas.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.NinePatch.html b/docs/html/sdk/api_diff/4/changes/android.graphics.NinePatch.html
index 66d909f..ff9224d 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.NinePatch.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.NinePatch.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.Typeface.html b/docs/html/sdk/api_diff/4/changes/android.graphics.Typeface.html
index 5683347..031606c 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.Typeface.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.Typeface.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html b/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html
index 7817d70..9fe7bba 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html b/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html
index 0554466..1dcf950 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html
@@ -172,7 +172,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html b/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html
index 2fec70b..5b01c7a 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html b/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html
index d761628..3e9b460 100644
--- a/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html
+++ b/docs/html/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html
@@ -172,7 +172,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.hardware.SensorManager.html b/docs/html/sdk/api_diff/4/changes/android.hardware.SensorManager.html
index a24198a..42a556f 100644
--- a/docs/html/sdk/api_diff/4/changes/android.hardware.SensorManager.html
+++ b/docs/html/sdk/api_diff/4/changes/android.hardware.SensorManager.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html b/docs/html/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html
index 243ba18..2ef63d1 100644
--- a/docs/html/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html
+++ b/docs/html/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.location.Address.html b/docs/html/sdk/api_diff/4/changes/android.location.Address.html
index 1d4684e..445087f3 100644
--- a/docs/html/sdk/api_diff/4/changes/android.location.Address.html
+++ b/docs/html/sdk/api_diff/4/changes/android.location.Address.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/4/changes/android.media.AudioManager.html
index d8e89b9..849440b 100644
--- a/docs/html/sdk/api_diff/4/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/4/changes/android.media.AudioManager.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html b/docs/html/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html
index c115d80..cd9b2ce 100644
--- a/docs/html/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html
+++ b/docs/html/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/4/changes/android.media.MediaRecorder.html
index 973f0ec..9c9501e 100644
--- a/docs/html/sdk/api_diff/4/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/4/changes/android.media.MediaRecorder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.media.ToneGenerator.html b/docs/html/sdk/api_diff/4/changes/android.media.ToneGenerator.html
index b24d142..9e75c6f 100644
--- a/docs/html/sdk/api_diff/4/changes/android.media.ToneGenerator.html
+++ b/docs/html/sdk/api_diff/4/changes/android.media.ToneGenerator.html
@@ -591,7 +591,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html b/docs/html/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html
index 4fa554e..c56c9bf 100644
--- a/docs/html/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html
+++ b/docs/html/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.os.Build.VERSION.html b/docs/html/sdk/api_diff/4/changes/android.os.Build.VERSION.html
index 0b0da42..7099db0 100644
--- a/docs/html/sdk/api_diff/4/changes/android.os.Build.VERSION.html
+++ b/docs/html/sdk/api_diff/4/changes/android.os.Build.VERSION.html
@@ -132,7 +132,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.os.Build.html b/docs/html/sdk/api_diff/4/changes/android.os.Build.html
index 1d28669..4892400 100644
--- a/docs/html/sdk/api_diff/4/changes/android.os.Build.html
+++ b/docs/html/sdk/api_diff/4/changes/android.os.Build.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html b/docs/html/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html
index 4af931f..b5b73d5 100644
--- a/docs/html/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html
+++ b/docs/html/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html b/docs/html/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html
index 8ad259f..a2fb5d3 100644
--- a/docs/html/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html
+++ b/docs/html/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html b/docs/html/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html
index 2b71910..a8cd0b2 100644
--- a/docs/html/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html
+++ b/docs/html/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/4/changes/android.provider.Settings.Secure.html
index 605753f..2676fee 100644
--- a/docs/html/sdk/api_diff/4/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/4/changes/android.provider.Settings.Secure.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/4/changes/android.provider.Settings.System.html
index 3c4bdab..f5906e8 100644
--- a/docs/html/sdk/api_diff/4/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/4/changes/android.provider.Settings.System.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html
index 6c115df..e96ff5d 100644
--- a/docs/html/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html b/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html
index 0401a92..7a9ff8b 100644
--- a/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html
+++ b/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html
@@ -241,7 +241,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html b/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html
index 8eee7f6..5d94975 100644
--- a/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html
+++ b/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html b/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html
index 7863761..41dfe11 100644
--- a/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html
+++ b/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html b/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html
index b42baa3..e30ca86 100644
--- a/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html
+++ b/docs/html/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html
@@ -491,7 +491,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.test.AndroidTestCase.html b/docs/html/sdk/api_diff/4/changes/android.test.AndroidTestCase.html
index a54bbed..fb9f311 100644
--- a/docs/html/sdk/api_diff/4/changes/android.test.AndroidTestCase.html
+++ b/docs/html/sdk/api_diff/4/changes/android.test.AndroidTestCase.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.test.mock.MockContext.html b/docs/html/sdk/api_diff/4/changes/android.test.mock.MockContext.html
index 1991722..8f6afba 100644
--- a/docs/html/sdk/api_diff/4/changes/android.test.mock.MockContext.html
+++ b/docs/html/sdk/api_diff/4/changes/android.test.mock.MockContext.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html
index 35d9333..a431a3a 100644
--- a/docs/html/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.text.style.ImageSpan.html b/docs/html/sdk/api_diff/4/changes/android.text.style.ImageSpan.html
index c09b145..927d9f8 100644
--- a/docs/html/sdk/api_diff/4/changes/android.text.style.ImageSpan.html
+++ b/docs/html/sdk/api_diff/4/changes/android.text.style.ImageSpan.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.util.Config.html b/docs/html/sdk/api_diff/4/changes/android.util.Config.html
index fabc6fc..75f7358 100644
--- a/docs/html/sdk/api_diff/4/changes/android.util.Config.html
+++ b/docs/html/sdk/api_diff/4/changes/android.util.Config.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.util.DisplayMetrics.html b/docs/html/sdk/api_diff/4/changes/android.util.DisplayMetrics.html
index 2548a72..ac49477 100644
--- a/docs/html/sdk/api_diff/4/changes/android.util.DisplayMetrics.html
+++ b/docs/html/sdk/api_diff/4/changes/android.util.DisplayMetrics.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.util.TypedValue.html b/docs/html/sdk/api_diff/4/changes/android.util.TypedValue.html
index 9898fcb..71071f9 100644
--- a/docs/html/sdk/api_diff/4/changes/android.util.TypedValue.html
+++ b/docs/html/sdk/api_diff/4/changes/android.util.TypedValue.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.view.Surface.html b/docs/html/sdk/api_diff/4/changes/android.view.Surface.html
index 09dbb273a..5dff188 100644
--- a/docs/html/sdk/api_diff/4/changes/android.view.Surface.html
+++ b/docs/html/sdk/api_diff/4/changes/android.view.Surface.html
@@ -125,7 +125,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.view.VelocityTracker.html b/docs/html/sdk/api_diff/4/changes/android.view.VelocityTracker.html
index 18da4941..569809d 100644
--- a/docs/html/sdk/api_diff/4/changes/android.view.VelocityTracker.html
+++ b/docs/html/sdk/api_diff/4/changes/android.view.VelocityTracker.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.view.View.html b/docs/html/sdk/api_diff/4/changes/android.view.View.html
index 803bc7a..aff688f 100644
--- a/docs/html/sdk/api_diff/4/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/4/changes/android.view.View.html
@@ -194,7 +194,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/4/changes/android.view.ViewConfiguration.html
index c38a9f5..f32face 100644
--- a/docs/html/sdk/api_diff/4/changes/android.view.ViewConfiguration.html
+++ b/docs/html/sdk/api_diff/4/changes/android.view.ViewConfiguration.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.view.Window.Callback.html b/docs/html/sdk/api_diff/4/changes/android.view.Window.Callback.html
index a76ab48..5c44168 100644
--- a/docs/html/sdk/api_diff/4/changes/android.view.Window.Callback.html
+++ b/docs/html/sdk/api_diff/4/changes/android.view.Window.Callback.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html b/docs/html/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html
index 6a123ac..a9f3776 100644
--- a/docs/html/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html
+++ b/docs/html/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.widget.CheckedTextView.html b/docs/html/sdk/api_diff/4/changes/android.widget.CheckedTextView.html
index 9629a79..0f22adb 100644
--- a/docs/html/sdk/api_diff/4/changes/android.widget.CheckedTextView.html
+++ b/docs/html/sdk/api_diff/4/changes/android.widget.CheckedTextView.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.widget.ListView.html b/docs/html/sdk/api_diff/4/changes/android.widget.ListView.html
index 1f2d3d6..36f20bb 100644
--- a/docs/html/sdk/api_diff/4/changes/android.widget.ListView.html
+++ b/docs/html/sdk/api_diff/4/changes/android.widget.ListView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.widget.PopupWindow.html b/docs/html/sdk/api_diff/4/changes/android.widget.PopupWindow.html
index 8b52b3f..923a7af 100644
--- a/docs/html/sdk/api_diff/4/changes/android.widget.PopupWindow.html
+++ b/docs/html/sdk/api_diff/4/changes/android.widget.PopupWindow.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html b/docs/html/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html
index 65286bd..08634f7 100644
--- a/docs/html/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html
+++ b/docs/html/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/android.widget.TabWidget.html b/docs/html/sdk/api_diff/4/changes/android.widget.TabWidget.html
index f080dc5..8a34165 100644
--- a/docs/html/sdk/api_diff/4/changes/android.widget.TabWidget.html
+++ b/docs/html/sdk/api_diff/4/changes/android.widget.TabWidget.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/changes-summary.html b/docs/html/sdk/api_diff/4/changes/changes-summary.html
index bbed016..734862f 100644
--- a/docs/html/sdk/api_diff/4/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/4/changes/changes-summary.html
@@ -332,7 +332,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/classes_index_additions.html b/docs/html/sdk/api_diff/4/changes/classes_index_additions.html
index 71e2423..7db8de3 100644
--- a/docs/html/sdk/api_diff/4/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/4/changes/classes_index_additions.html
@@ -199,7 +199,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.widget.html#ZoomButtonsController" class="hiddenlink" target="rightframe"><b>ZoomButtonsController</b></A><br>
 <A HREF="pkg_android.widget.html#ZoomButtonsController.OnZoomListener" class="hiddenlink" target="rightframe"><b><i>ZoomButtonsController.OnZoomListener</i></b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/classes_index_all.html b/docs/html/sdk/api_diff/4/changes/classes_index_all.html
index 5415cf4..b38ed7d 100644
--- a/docs/html/sdk/api_diff/4/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/4/changes/classes_index_all.html
@@ -526,7 +526,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.widget.html#ZoomButtonsController" class="hiddenlink" target="rightframe"><b>ZoomButtonsController</b></A><br>
 <A HREF="pkg_android.widget.html#ZoomButtonsController.OnZoomListener" class="hiddenlink" target="rightframe"><b><i>ZoomButtonsController.OnZoomListener</i></b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/classes_index_changes.html b/docs/html/sdk/api_diff/4/changes/classes_index_changes.html
index f74c857..758eeba 100644
--- a/docs/html/sdk/api_diff/4/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/4/changes/classes_index_changes.html
@@ -390,7 +390,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
 <A HREF="android.view.Window.Callback.html" class="hiddenlink" target="rightframe"><i>Window.Callback</i></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/classes_index_removals.html b/docs/html/sdk/api_diff/4/changes/classes_index_removals.html
index 9b37279..c61f12e 100644
--- a/docs/html/sdk/api_diff/4/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/4/changes/classes_index_removals.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.content.pm.html#IPackageInstallObserver" class="hiddenlink" target="rightframe"><strike>IPackageInstallObserver</strike></A><br>
 <A HREF="pkg_android.content.pm.html#IPackageInstallObserver.Stub" class="hiddenlink" target="rightframe"><strike>IPackageInstallObserver.Stub</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/4/changes/constructors_index_additions.html
index 85db680..6dc4870 100644
--- a/docs/html/sdk/api_diff/4/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/4/changes/constructors_index_additions.html
@@ -80,7 +80,7 @@
 (<code>Resources, Bitmap, byte[], Rect, String</code>)</A></nobr>&nbsp;constructor<br>
 &nbsp;&nbsp;<nobr><A HREF="android.graphics.drawable.NinePatchDrawable.html#android.graphics.drawable.NinePatchDrawable.ctor_added(android.content.res.Resources, android.graphics.NinePatch)" class="hiddenlink" target="rightframe"><b>NinePatchDrawable</b>
 (<code>Resources, NinePatch</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/constructors_index_all.html b/docs/html/sdk/api_diff/4/changes/constructors_index_all.html
index cd80e6d..23f6601 100644
--- a/docs/html/sdk/api_diff/4/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/4/changes/constructors_index_all.html
@@ -106,7 +106,7 @@
 ()</A></nobr>&nbsp;constructor<br>
 <nobr><A HREF="android.telephony.gsm.SmsMessage.SubmitPdu.html#android.telephony.gsm.SmsMessage.SubmitPdu.ctor_changed()" class="hiddenlink" target="rightframe">SmsMessage.SubmitPdu
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/4/changes/constructors_index_changes.html
index a9d21d1e..c80a225 100644
--- a/docs/html/sdk/api_diff/4/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/4/changes/constructors_index_changes.html
@@ -94,7 +94,7 @@
 ()</A></nobr>&nbsp;constructor<br>
 <nobr><A HREF="android.telephony.gsm.SmsMessage.SubmitPdu.html#android.telephony.gsm.SmsMessage.SubmitPdu.ctor_changed()" class="hiddenlink" target="rightframe">SmsMessage.SubmitPdu
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/4/changes/constructors_index_removals.html
index c884917..a64ce22 100644
--- a/docs/html/sdk/api_diff/4/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/4/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:.5em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/fields_index_additions.html b/docs/html/sdk/api_diff/4/changes/fields_index_additions.html
index d1bb48f..6e5b17e 100644
--- a/docs/html/sdk/api_diff/4/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/4/changes/fields_index_additions.html
@@ -932,7 +932,7 @@
 </nobr><br>
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_HISTORY_BOOKMARKS" class="hiddenlink" target="rightframe">WRITE_HISTORY_BOOKMARKS</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/fields_index_all.html b/docs/html/sdk/api_diff/4/changes/fields_index_all.html
index 05afee5..dbb6873 100644
--- a/docs/html/sdk/api_diff/4/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/4/changes/fields_index_all.html
@@ -1047,7 +1047,7 @@
 </nobr><br>
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_HISTORY_BOOKMARKS" class="hiddenlink" target="rightframe">WRITE_HISTORY_BOOKMARKS</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/fields_index_changes.html b/docs/html/sdk/api_diff/4/changes/fields_index_changes.html
index 5d60034..c04310a 100644
--- a/docs/html/sdk/api_diff/4/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/4/changes/fields_index_changes.html
@@ -174,7 +174,7 @@
 </nobr><br>
 <nobr><A HREF="android.view.Surface.html#android.view.Surface.SURACE_FROZEN" class="hiddenlink" target="rightframe">SURACE_FROZEN</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/fields_index_removals.html b/docs/html/sdk/api_diff/4/changes/fields_index_removals.html
index 1ec4ff5..edf4454 100644
--- a/docs/html/sdk/api_diff/4/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/4/changes/fields_index_removals.html
@@ -145,7 +145,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.SET_PROCESS_FOREGROUND" class="hiddenlink" target="rightframe"><strike>SET_PROCESS_FOREGROUND</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html b/docs/html/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html
index 41c1be3..dab55d4 100644
--- a/docs/html/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html
+++ b/docs/html/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html b/docs/html/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html
index 1c6ae14..9498486 100644
--- a/docs/html/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html
+++ b/docs/html/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/jdiff_help.html b/docs/html/sdk/api_diff/4/changes/jdiff_help.html
index f4b9968..68fbbc4 100644
--- a/docs/html/sdk/api_diff/4/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/4/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/4/changes/jdiff_statistics.html
index c21b875..866cb99 100644
--- a/docs/html/sdk/api_diff/4/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/4/changes/jdiff_statistics.html
@@ -649,7 +649,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/4/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/4/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/4/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/methods_index_additions.html b/docs/html/sdk/api_diff/4/changes/methods_index_additions.html
index 86270d4..7a71e23 100644
--- a/docs/html/sdk/api_diff/4/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/4/changes/methods_index_additions.html
@@ -427,7 +427,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.widget.PopupWindow.html#android.widget.PopupWindow.update_added(int, int)" class="hiddenlink" target="rightframe"><b>update</b>
 (<code>int, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/methods_index_all.html b/docs/html/sdk/api_diff/4/changes/methods_index_all.html
index fd4f229..a0f677a 100644
--- a/docs/html/sdk/api_diff/4/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/4/changes/methods_index_all.html
@@ -532,7 +532,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.widget.PopupWindow.html#android.widget.PopupWindow.update_added(int, int)" class="hiddenlink" target="rightframe"><b>update</b>
 (<code>int, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/methods_index_changes.html b/docs/html/sdk/api_diff/4/changes/methods_index_changes.html
index 88e203f..f5390e0 100644
--- a/docs/html/sdk/api_diff/4/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/4/changes/methods_index_changes.html
@@ -212,7 +212,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.content.Intent.html#android.content.Intent.toURI_changed()" class="hiddenlink" target="rightframe">toURI
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/methods_index_removals.html b/docs/html/sdk/api_diff/4/changes/methods_index_removals.html
index 392307d..c01696f 100644
--- a/docs/html/sdk/api_diff/4/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/4/changes/methods_index_removals.html
@@ -61,7 +61,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.test.mock.MockPackageManager.html#android.test.mock.MockPackageManager.installPackage_removed(android.net.Uri, android.content.pm.IPackageInstallObserver, int)" class="hiddenlink" target="rightframe">type&nbsp;<strike>
 (<code>Uri, IPackageInstallObserver, int</code>)</strike>&nbsp;in&nbsp;android.test.mock.MockPackageManager
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/packages_index_additions.html b/docs/html/sdk/api_diff/4/changes/packages_index_additions.html
index a77bd9f..856243b 100644
--- a/docs/html/sdk/api_diff/4/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/4/changes/packages_index_additions.html
@@ -53,7 +53,7 @@
 <A HREF="changes-summary.html#android.gesture" class="hiddenlink" target="rightframe"><b>android.gesture</b></A><br>
 <A HREF="changes-summary.html#android.speech.tts" class="hiddenlink" target="rightframe"><b>android.speech.tts</b></A><br>
 <A HREF="changes-summary.html#android.view.accessibility" class="hiddenlink" target="rightframe"><b>android.view.accessibility</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/packages_index_all.html b/docs/html/sdk/api_diff/4/changes/packages_index_all.html
index d27d95c..86c5005 100644
--- a/docs/html/sdk/api_diff/4/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/4/changes/packages_index_all.html
@@ -79,7 +79,7 @@
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
 <A HREF="pkg_java.util.concurrent.html" class="hiddenlink" target="rightframe">java.util.concurrent</A><br>
 <A HREF="pkg_java.util.concurrent.locks.html" class="hiddenlink" target="rightframe">java.util.concurrent.locks</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/packages_index_changes.html b/docs/html/sdk/api_diff/4/changes/packages_index_changes.html
index 4299ed1..9c8d0dd 100644
--- a/docs/html/sdk/api_diff/4/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/4/changes/packages_index_changes.html
@@ -75,7 +75,7 @@
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
 <A HREF="pkg_java.util.concurrent.html" class="hiddenlink" target="rightframe">java.util.concurrent</A><br>
 <A HREF="pkg_java.util.concurrent.locks.html" class="hiddenlink" target="rightframe">java.util.concurrent.locks</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/packages_index_removals.html b/docs/html/sdk/api_diff/4/changes/packages_index_removals.html
index cd89a22..f22b7e4 100644
--- a/docs/html/sdk/api_diff/4/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/4/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.app.html b/docs/html/sdk/api_diff/4/changes/pkg_android.app.html
index 2595bbe..0c1559a 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.app.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.content.html b/docs/html/sdk/api_diff/4/changes/pkg_android.content.html
index 457912e..32dafa2 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.content.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/4/changes/pkg_android.content.pm.html
index 0ad5f80..c584b92 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.content.pm.html
@@ -170,7 +170,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/4/changes/pkg_android.content.res.html
index b11f799..a65b2b2 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.content.res.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.graphics.drawable.html b/docs/html/sdk/api_diff/4/changes/pkg_android.graphics.drawable.html
index 94659fd..db4199b 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.graphics.drawable.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.graphics.drawable.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/4/changes/pkg_android.graphics.html
index fe64e72..38196a9 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.graphics.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/4/changes/pkg_android.hardware.html
index 2c9ef0b..997e81d 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.hardware.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.html b/docs/html/sdk/api_diff/4/changes/pkg_android.html
index 3e358ca..eb67621 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.inputmethodservice.html b/docs/html/sdk/api_diff/4/changes/pkg_android.inputmethodservice.html
index a422be2..eced149 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.inputmethodservice.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.inputmethodservice.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.location.html b/docs/html/sdk/api_diff/4/changes/pkg_android.location.html
index 023ef62..17a402c 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.location.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.location.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.media.html b/docs/html/sdk/api_diff/4/changes/pkg_android.media.html
index f3a60bb..85e528d 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.media.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.net.wifi.html b/docs/html/sdk/api_diff/4/changes/pkg_android.net.wifi.html
index 74b182c..2b29b41 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.net.wifi.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.net.wifi.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/4/changes/pkg_android.opengl.html
index 3689e7c..ffc8e94 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.opengl.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.os.html b/docs/html/sdk/api_diff/4/changes/pkg_android.os.html
index ef994f9..9f43ae79 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.os.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/4/changes/pkg_android.provider.html
index 295126e..fa3cce7 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.provider.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.telephony.gsm.html b/docs/html/sdk/api_diff/4/changes/pkg_android.telephony.gsm.html
index 3d6fcde..c99792e 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.telephony.gsm.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.telephony.gsm.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/4/changes/pkg_android.telephony.html
index e2175ba..f5bb816 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.telephony.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.test.html b/docs/html/sdk/api_diff/4/changes/pkg_android.test.html
index 28c1fc9..0153e2b 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.test.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.test.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/4/changes/pkg_android.test.mock.html
index e971fed..f385141 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.test.mock.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.text.style.html b/docs/html/sdk/api_diff/4/changes/pkg_android.text.style.html
index 64b7353..3550835 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.text.style.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.text.style.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.util.html b/docs/html/sdk/api_diff/4/changes/pkg_android.util.html
index 5a35a6f..4f6e1bf 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.util.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.view.animation.html b/docs/html/sdk/api_diff/4/changes/pkg_android.view.animation.html
index 0cfa915..dd421aa 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.view.animation.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.view.animation.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.view.html b/docs/html/sdk/api_diff/4/changes/pkg_android.view.html
index 4914da2..41b674c 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.view.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/4/changes/pkg_android.widget.html
index a0b6f8e..9196a79 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_android.widget.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_java.util.concurrent.html b/docs/html/sdk/api_diff/4/changes/pkg_java.util.concurrent.html
index 8e64161..4de4166 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_java.util.concurrent.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_java.util.concurrent.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/4/changes/pkg_java.util.concurrent.locks.html b/docs/html/sdk/api_diff/4/changes/pkg_java.util.concurrent.locks.html
index f66e05a..e084641 100644
--- a/docs/html/sdk/api_diff/4/changes/pkg_java.util.concurrent.locks.html
+++ b/docs/html/sdk/api_diff/4/changes/pkg_java.util.concurrent.locks.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/5/changes/alldiffs_index_additions.html
index 33d78fe..3e499af 100644
--- a/docs/html/sdk/api_diff/5/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/5/changes/alldiffs_index_additions.html
@@ -2266,7 +2266,7 @@
 <!-- Method yieldIfContendedSafely -->
 <nobr><A HREF="android.database.sqlite.SQLiteDatabase.html#android.database.sqlite.SQLiteDatabase.yieldIfContendedSafely_added(long)" class="hiddenlink" target="rightframe"><b>yieldIfContendedSafely</b>
 (<code>long</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/5/changes/alldiffs_index_all.html
index 4ef879a..b340a28 100644
--- a/docs/html/sdk/api_diff/5/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/5/changes/alldiffs_index_all.html
@@ -3766,7 +3766,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/5/changes/alldiffs_index_changes.html
index 3e42fc8..e48224a 100644
--- a/docs/html/sdk/api_diff/5/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/5/changes/alldiffs_index_changes.html
@@ -2129,7 +2129,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/5/changes/alldiffs_index_removals.html
index df544c6..567f1ee 100644
--- a/docs/html/sdk/api_diff/5/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/5/changes/alldiffs_index_removals.html
@@ -54,7 +54,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER" class="hiddenlink" target="rightframe"><strike>FLAG_USE_CHILD_DRAWING_ORDER</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/5/changes/android.Manifest.permission.html
index be337a6..01c15fb 100644
--- a/docs/html/sdk/api_diff/5/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/5/changes/android.Manifest.permission.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.R.attr.html b/docs/html/sdk/api_diff/5/changes/android.R.attr.html
index 0b8ddaa..a8ca384 100644
--- a/docs/html/sdk/api_diff/5/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/5/changes/android.R.attr.html
@@ -325,7 +325,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.R.drawable.html b/docs/html/sdk/api_diff/5/changes/android.R.drawable.html
index 84daf72..c52a10f 100644
--- a/docs/html/sdk/api_diff/5/changes/android.R.drawable.html
+++ b/docs/html/sdk/api_diff/5/changes/android.R.drawable.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.R.style.html b/docs/html/sdk/api_diff/5/changes/android.R.style.html
index 5ee4afe..3dd25e2 100644
--- a/docs/html/sdk/api_diff/5/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/5/changes/android.R.style.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.Activity.html b/docs/html/sdk/api_diff/5/changes/android.app.Activity.html
index 409de84..f87f68c 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.Activity.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html b/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html
index 943fd04..b475917 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html b/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html
index 6c7d00c..9252cb8 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.html b/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.html
index 513d31e..33878b3 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.ActivityManager.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.Dialog.html b/docs/html/sdk/api_diff/5/changes/android.app.Dialog.html
index 20b776d..563792f 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.Dialog.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.Dialog.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.IntentService.html b/docs/html/sdk/api_diff/5/changes/android.app.IntentService.html
index 44f59cd..209b99f 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.IntentService.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.IntentService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.LauncherActivity.html b/docs/html/sdk/api_diff/5/changes/android.app.LauncherActivity.html
index 1eafeab..52ee9ee 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.LauncherActivity.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.LauncherActivity.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.Notification.html b/docs/html/sdk/api_diff/5/changes/android.app.Notification.html
index 621f4a3..8eb8d17 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.Notification.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.Notification.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.NotificationManager.html b/docs/html/sdk/api_diff/5/changes/android.app.NotificationManager.html
index b0fc478..c388001 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.NotificationManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.NotificationManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/5/changes/android.app.SearchManager.html
index e6e95cb..956a422 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.SearchManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.SearchManager.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.app.Service.html b/docs/html/sdk/api_diff/5/changes/android.app.Service.html
index dfde229..245f1c2 100644
--- a/docs/html/sdk/api_diff/5/changes/android.app.Service.html
+++ b/docs/html/sdk/api_diff/5/changes/android.app.Service.html
@@ -207,7 +207,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html b/docs/html/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html
index 9b0f58a..2d6c647 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.ContentProvider.html b/docs/html/sdk/api_diff/5/changes/android.content.ContentProvider.html
index ba3eef2..6a19d4f 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.ContentProvider.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.ContentProvider.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.ContentResolver.html b/docs/html/sdk/api_diff/5/changes/android.content.ContentResolver.html
index 2ccc017..18bcf94 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.ContentResolver.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.ContentResolver.html
@@ -289,7 +289,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.Context.html b/docs/html/sdk/api_diff/5/changes/android.content.Context.html
index f66714f..34bec24 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.Context.html
@@ -208,7 +208,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.ContextWrapper.html b/docs/html/sdk/api_diff/5/changes/android.content.ContextWrapper.html
index a2f55d8..0d8e6cf 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.ContextWrapper.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.ContextWrapper.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.Intent.html b/docs/html/sdk/api_diff/5/changes/android.content.Intent.html
index bd30f3b..fb221bb 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.Intent.html
@@ -185,7 +185,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html
index fd28af1..991c020 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html b/docs/html/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html
index a9b257d..83705e6 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/5/changes/android.content.pm.PackageManager.html
index 4c7b240..d2655ee 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.pm.PackageManager.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html b/docs/html/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html
index 3aa8243..dfab7c3 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html b/docs/html/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html
index 9a3bea8..05ab7a5 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html b/docs/html/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html
index 013d8c1..dc31cb8 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/5/changes/android.content.res.Configuration.html
index b08e917..d1bb50e 100644
--- a/docs/html/sdk/api_diff/5/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/5/changes/android.content.res.Configuration.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html b/docs/html/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html
index 39c0ce3..f17d552 100644
--- a/docs/html/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html
+++ b/docs/html/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.database.CursorWindow.html b/docs/html/sdk/api_diff/5/changes/android.database.CursorWindow.html
index e8a9f29..a0a1f5e 100644
--- a/docs/html/sdk/api_diff/5/changes/android.database.CursorWindow.html
+++ b/docs/html/sdk/api_diff/5/changes/android.database.CursorWindow.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.database.DatabaseUtils.html b/docs/html/sdk/api_diff/5/changes/android.database.DatabaseUtils.html
index 6e939c3..6cd3060 100644
--- a/docs/html/sdk/api_diff/5/changes/android.database.DatabaseUtils.html
+++ b/docs/html/sdk/api_diff/5/changes/android.database.DatabaseUtils.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html b/docs/html/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html
index b81f2f8..2200781 100644
--- a/docs/html/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html
+++ b/docs/html/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.graphics.PixelFormat.html b/docs/html/sdk/api_diff/5/changes/android.graphics.PixelFormat.html
index de9e2b9..7665f5bd 100644
--- a/docs/html/sdk/api_diff/5/changes/android.graphics.PixelFormat.html
+++ b/docs/html/sdk/api_diff/5/changes/android.graphics.PixelFormat.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html b/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html
index 42677c5..ea31a69 100644
--- a/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html
+++ b/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html b/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html
index bb8647a..58a83a2 100644
--- a/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html
+++ b/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html b/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html
index 42c2ff1..5bcd2eb 100644
--- a/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html
+++ b/docs/html/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html
index a95b424..35ab033 100644
--- a/docs/html/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html
+++ b/docs/html/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html
@@ -669,7 +669,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/5/changes/android.hardware.Camera.html
index aab1021..28ae598 100644
--- a/docs/html/sdk/api_diff/5/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/5/changes/android.hardware.Camera.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html b/docs/html/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html
index c7a58f2..5670b0bc0 100644
--- a/docs/html/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html
+++ b/docs/html/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html b/docs/html/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html
index 58bed5d..2766f3c 100644
--- a/docs/html/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html
+++ b/docs/html/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.location.LocationManager.html b/docs/html/sdk/api_diff/5/changes/android.location.LocationManager.html
index cc6a91d..bea388c 100644
--- a/docs/html/sdk/api_diff/5/changes/android.location.LocationManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.location.LocationManager.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.media.AudioFormat.html b/docs/html/sdk/api_diff/5/changes/android.media.AudioFormat.html
index f122de0..1d413d6 100644
--- a/docs/html/sdk/api_diff/5/changes/android.media.AudioFormat.html
+++ b/docs/html/sdk/api_diff/5/changes/android.media.AudioFormat.html
@@ -383,7 +383,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/5/changes/android.media.AudioManager.html
index 912b1d1..b6c6229 100644
--- a/docs/html/sdk/api_diff/5/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.media.AudioManager.html
@@ -224,7 +224,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.media.MediaPlayer.html b/docs/html/sdk/api_diff/5/changes/android.media.MediaPlayer.html
index e8e2f82..ffccb75 100644
--- a/docs/html/sdk/api_diff/5/changes/android.media.MediaPlayer.html
+++ b/docs/html/sdk/api_diff/5/changes/android.media.MediaPlayer.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.media.ToneGenerator.html b/docs/html/sdk/api_diff/5/changes/android.media.ToneGenerator.html
index 289e820..9fdb28f 100644
--- a/docs/html/sdk/api_diff/5/changes/android.media.ToneGenerator.html
+++ b/docs/html/sdk/api_diff/5/changes/android.media.ToneGenerator.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html b/docs/html/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html
index 42f56e2..51789f3 100644
--- a/docs/html/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html
+++ b/docs/html/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.os.BatteryManager.html b/docs/html/sdk/api_diff/5/changes/android.os.BatteryManager.html
index 9bf76d3..0499e8b 100644
--- a/docs/html/sdk/api_diff/5/changes/android.os.BatteryManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.os.BatteryManager.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html
index 58ae354..ac8435e 100644
--- a/docs/html/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html b/docs/html/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html
index 8f49b3a..82fec87 100644
--- a/docs/html/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html
@@ -159,7 +159,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.os.HandlerThread.html b/docs/html/sdk/api_diff/5/changes/android.os.HandlerThread.html
index c45faf3..5cedb18 100644
--- a/docs/html/sdk/api_diff/5/changes/android.os.HandlerThread.html
+++ b/docs/html/sdk/api_diff/5/changes/android.os.HandlerThread.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html
index 7619936..0ca0133 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html
@@ -340,7 +340,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html
index abd9fe0..01b3c9e 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html
@@ -192,7 +192,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html
index b3e68bb..393f6f6 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html
index ba94393..8674ac9 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html
index f9ecf01..467e914 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html
@@ -207,7 +207,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html
index 9a2003a..35fb2ca 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html
index a7a8c99..daa2564 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html
@@ -138,7 +138,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html
index 72ce6a1..11fc700 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html
@@ -363,7 +363,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html
index 607190c..a083cd4 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html
@@ -219,7 +219,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html
index 5db9c26..60eb73a 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html
@@ -183,7 +183,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html
index b0b54d2..f1bb81a 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html
@@ -183,7 +183,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html
index c55bc68..a6009d0 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html
index 31befa0..96a6740 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html
index 2ce0491..e883fd1 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html
index afe96f2..d091cdd 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.html
index 87231ab..189cad4 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.People.html
@@ -281,7 +281,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html
index 037acd6..d8f8c32 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html
@@ -192,7 +192,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html
index a604145..1c43e7c 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html
@@ -184,7 +184,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html
index e42a51e..34f31c9 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html
@@ -219,7 +219,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html
index 0aeaa9cb..c34ca63 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html
index f13d55d..4bcb43f 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html
@@ -156,7 +156,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html
index ec5ec5b..7942558 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html
index 65020e9..77c0724 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html
@@ -166,7 +166,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html
index d03da38..a80bfa2 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.html b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.html
index 6ed2ae8..2f1bdee 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Contacts.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html b/docs/html/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html
index 67f1d18..9d53bbe 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/5/changes/android.provider.Settings.System.html
index ac417e6..607cceb 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Settings.System.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/5/changes/android.provider.Settings.html
index 0e2f350..767bd8c 100644
--- a/docs/html/sdk/api_diff/5/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/5/changes/android.provider.Settings.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html b/docs/html/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html
index a7b0204..beb2c71 100644
--- a/docs/html/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html
+++ b/docs/html/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html
@@ -178,7 +178,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html b/docs/html/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html
index b4b41f2..ae98f56 100644
--- a/docs/html/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html
+++ b/docs/html/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html b/docs/html/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html
index 57d7cf7..d85a2b2 100644
--- a/docs/html/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html
+++ b/docs/html/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html
index 80c80bf..988ae33 100644
--- a/docs/html/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html b/docs/html/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html
index 3cfa8af..f2d4342 100644
--- a/docs/html/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html
+++ b/docs/html/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html b/docs/html/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html
index 0a67d9c..494a3df 100644
--- a/docs/html/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html
+++ b/docs/html/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.test.mock.MockContext.html b/docs/html/sdk/api_diff/5/changes/android.test.mock.MockContext.html
index b397470..7d4cb52 100644
--- a/docs/html/sdk/api_diff/5/changes/android.test.mock.MockContext.html
+++ b/docs/html/sdk/api_diff/5/changes/android.test.mock.MockContext.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html
index f81699c..dae7d15 100644
--- a/docs/html/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.text.InputType.html b/docs/html/sdk/api_diff/5/changes/android.text.InputType.html
index ba05eb3..0e229b6 100644
--- a/docs/html/sdk/api_diff/5/changes/android.text.InputType.html
+++ b/docs/html/sdk/api_diff/5/changes/android.text.InputType.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.text.TextPaint.html b/docs/html/sdk/api_diff/5/changes/android.text.TextPaint.html
index c6569d6..ee211b1 100644
--- a/docs/html/sdk/api_diff/5/changes/android.text.TextPaint.html
+++ b/docs/html/sdk/api_diff/5/changes/android.text.TextPaint.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.text.format.DateUtils.html b/docs/html/sdk/api_diff/5/changes/android.text.format.DateUtils.html
index fdebbe0..b7a0438 100644
--- a/docs/html/sdk/api_diff/5/changes/android.text.format.DateUtils.html
+++ b/docs/html/sdk/api_diff/5/changes/android.text.format.DateUtils.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.text.format.Formatter.html b/docs/html/sdk/api_diff/5/changes/android.text.format.Formatter.html
index 96fbe10..cfbbf7b 100644
--- a/docs/html/sdk/api_diff/5/changes/android.text.format.Formatter.html
+++ b/docs/html/sdk/api_diff/5/changes/android.text.format.Formatter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html b/docs/html/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html
index 4b44bd1..8f9948e 100644
--- a/docs/html/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html
+++ b/docs/html/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html b/docs/html/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html
index 9d85354..074e28a 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html b/docs/html/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html
index 7412049..26d39c6 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/5/changes/android.view.KeyEvent.html
index c8820ca..9836bbc 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.KeyEvent.html
@@ -222,7 +222,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/5/changes/android.view.MotionEvent.html
index f338077..da318bf 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.MotionEvent.html
@@ -277,7 +277,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.Surface.html b/docs/html/sdk/api_diff/5/changes/android.view.Surface.html
index 5f36258..1aa90bd 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.Surface.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.Surface.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.SurfaceHolder.html b/docs/html/sdk/api_diff/5/changes/android.view.SurfaceHolder.html
index 2487e9b..31607bc 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.SurfaceHolder.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.SurfaceHolder.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.SurfaceView.html b/docs/html/sdk/api_diff/5/changes/android.view.SurfaceView.html
index 1736f2f..4e1e549 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.SurfaceView.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.SurfaceView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.View.html b/docs/html/sdk/api_diff/5/changes/android.view.View.html
index 1f7e9af..c8d21e4 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.View.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/5/changes/android.view.ViewConfiguration.html
index cc2b05e..9ace32d 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.ViewConfiguration.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.ViewConfiguration.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/5/changes/android.view.ViewGroup.html
index 83d3a29..bc5a78b 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.ViewGroup.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.ViewGroup.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.Window.Callback.html b/docs/html/sdk/api_diff/5/changes/android.view.Window.Callback.html
index 3358968..54381ae 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.Window.Callback.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.Window.Callback.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html
index f43f3dd..2c847a3 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.view.animation.Animation.html b/docs/html/sdk/api_diff/5/changes/android.view.animation.Animation.html
index d784700..7bdbcf7 100644
--- a/docs/html/sdk/api_diff/5/changes/android.view.animation.Animation.html
+++ b/docs/html/sdk/api_diff/5/changes/android.view.animation.Animation.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html b/docs/html/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html
index 3cdd68b..caa1b21 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.Plugin.html b/docs/html/sdk/api_diff/5/changes/android.webkit.Plugin.html
index 52638aca..9b4ca37 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.Plugin.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.Plugin.html
@@ -220,7 +220,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.PluginData.html b/docs/html/sdk/api_diff/5/changes/android.webkit.PluginData.html
index 1e5a241..5387f43 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.PluginData.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.PluginData.html
@@ -160,7 +160,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.PluginList.html b/docs/html/sdk/api_diff/5/changes/android.webkit.PluginList.html
index 564a341..7bcae9a 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.PluginList.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.PluginList.html
@@ -170,7 +170,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html b/docs/html/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html
index 0fa0787..5d1778b 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html b/docs/html/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html
index e562019..1b6a994 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html
@@ -152,7 +152,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html b/docs/html/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html
index e9ca0e0..563c426 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/5/changes/android.webkit.WebSettings.html
index 3b10d1a..ed45bf0 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.WebSettings.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/5/changes/android.webkit.WebView.html
index 7c287cb..e5788e9 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.WebView.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.webkit.WebViewClient.html b/docs/html/sdk/api_diff/5/changes/android.webkit.WebViewClient.html
index 49e517a..c8dd458 100644
--- a/docs/html/sdk/api_diff/5/changes/android.webkit.WebViewClient.html
+++ b/docs/html/sdk/api_diff/5/changes/android.webkit.WebViewClient.html
@@ -206,7 +206,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html b/docs/html/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html
index 5b2294b..02491ee 100644
--- a/docs/html/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html
+++ b/docs/html/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html b/docs/html/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html
index f19a279..f769824 100644
--- a/docs/html/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html
+++ b/docs/html/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html b/docs/html/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html
index ee9e73f..7ecdbc0c 100644
--- a/docs/html/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html
+++ b/docs/html/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/android.widget.VideoView.html b/docs/html/sdk/api_diff/5/changes/android.widget.VideoView.html
index edbbd6c..873170f 100644
--- a/docs/html/sdk/api_diff/5/changes/android.widget.VideoView.html
+++ b/docs/html/sdk/api_diff/5/changes/android.widget.VideoView.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/changes-summary.html b/docs/html/sdk/api_diff/5/changes/changes-summary.html
index 1f10f25..05f0d60 100644
--- a/docs/html/sdk/api_diff/5/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/5/changes/changes-summary.html
@@ -353,7 +353,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/classes_index_additions.html b/docs/html/sdk/api_diff/5/changes/classes_index_additions.html
index f8c9c04..9ad3049 100644
--- a/docs/html/sdk/api_diff/5/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/5/changes/classes_index_additions.html
@@ -340,7 +340,7 @@
 <A HREF="pkg_android.app.html#WallpaperManager" class="hiddenlink" target="rightframe"><b>WallpaperManager</b></A><br>
 <A HREF="pkg_android.webkit.html#WebStorage" class="hiddenlink" target="rightframe"><b>WebStorage</b></A><br>
 <A HREF="pkg_android.webkit.html#WebStorage.QuotaUpdater" class="hiddenlink" target="rightframe"><b><i>WebStorage.QuotaUpdater</i></b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/classes_index_all.html b/docs/html/sdk/api_diff/5/changes/classes_index_all.html
index 973dade..27baa0c 100644
--- a/docs/html/sdk/api_diff/5/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/5/changes/classes_index_all.html
@@ -858,7 +858,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/classes_index_changes.html b/docs/html/sdk/api_diff/5/changes/classes_index_changes.html
index 4ff9b60..a9307eb 100644
--- a/docs/html/sdk/api_diff/5/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/5/changes/classes_index_changes.html
@@ -635,7 +635,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/classes_index_removals.html b/docs/html/sdk/api_diff/5/changes/classes_index_removals.html
index 5b38988..a855673 100644
--- a/docs/html/sdk/api_diff/5/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/5/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:.5em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/5/changes/constructors_index_additions.html
index cbd4302..c075e7b 100644
--- a/docs/html/sdk/api_diff/5/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/5/changes/constructors_index_additions.html
@@ -64,7 +64,7 @@
 (<code>Resources, String</code>)</A></nobr>&nbsp;constructor<br>
 &nbsp;&nbsp;<nobr><A HREF="android.graphics.drawable.BitmapDrawable.html#android.graphics.drawable.BitmapDrawable.ctor_added(android.content.res.Resources, java.io.InputStream)" class="hiddenlink" target="rightframe"><b>BitmapDrawable</b>
 (<code>Resources, InputStream</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/constructors_index_all.html b/docs/html/sdk/api_diff/5/changes/constructors_index_all.html
index ced2ea8..030d35f 100644
--- a/docs/html/sdk/api_diff/5/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/5/changes/constructors_index_all.html
@@ -131,7 +131,7 @@
 (<code>InputStream, long, Map&lt;String, String[]&gt;, int</code>)</A></nobr>&nbsp;constructor<br>
 <nobr><A HREF="android.webkit.PluginList.html#android.webkit.PluginList.ctor_changed()" class="hiddenlink" target="rightframe">PluginList
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/5/changes/constructors_index_changes.html
index c106a1d..cabcb6d 100644
--- a/docs/html/sdk/api_diff/5/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/5/changes/constructors_index_changes.html
@@ -111,7 +111,7 @@
 (<code>InputStream, long, Map&lt;String, String[]&gt;, int</code>)</A></nobr>&nbsp;constructor<br>
 <nobr><A HREF="android.webkit.PluginList.html#android.webkit.PluginList.ctor_changed()" class="hiddenlink" target="rightframe">PluginList
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/5/changes/constructors_index_removals.html
index c884917..a64ce22 100644
--- a/docs/html/sdk/api_diff/5/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/5/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:.5em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html
index 6726ead..1159d27 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html
index b3198f7..bf78f9d 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html
index 07a91ac..98ad6d9 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html
index 7201009..a0b205c 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.TouchDex.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.TouchDex.html
index 164b44c..b74d5c5 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.TouchDex.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.TouchDex.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.VMDebug.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.VMDebug.html
index 3a36806..13a2134 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.VMDebug.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.VMDebug.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html
index dd924a1..400061e 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.VMStack.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.VMStack.html
index 8311763..d2190ff 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.VMStack.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.VMStack.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/dalvik.system.Zygote.html b/docs/html/sdk/api_diff/5/changes/dalvik.system.Zygote.html
index d683f4e..5233a3b 100644
--- a/docs/html/sdk/api_diff/5/changes/dalvik.system.Zygote.html
+++ b/docs/html/sdk/api_diff/5/changes/dalvik.system.Zygote.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/fields_index_additions.html b/docs/html/sdk/api_diff/5/changes/fields_index_additions.html
index 35a55d9..e185df1 100644
--- a/docs/html/sdk/api_diff/5/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/5/changes/fields_index_additions.html
@@ -896,7 +896,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.graphics.PixelFormat.html#android.graphics.PixelFormat.YCbCr_422_I" class="hiddenlink" target="rightframe">YCbCr_422_I</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/fields_index_all.html b/docs/html/sdk/api_diff/5/changes/fields_index_all.html
index f18c2a1..8890e5f 100644
--- a/docs/html/sdk/api_diff/5/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/5/changes/fields_index_all.html
@@ -1590,7 +1590,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.graphics.PixelFormat.html#android.graphics.PixelFormat.YCbCr_422_I" class="hiddenlink" target="rightframe">YCbCr_422_I</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/fields_index_changes.html b/docs/html/sdk/api_diff/5/changes/fields_index_changes.html
index ae324f7..d1b970f 100644
--- a/docs/html/sdk/api_diff/5/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/5/changes/fields_index_changes.html
@@ -985,7 +985,7 @@
 <nobr>&nbsp;in&nbsp;
 <A HREF="android.provider.Contacts.SettingsColumns.html#android.provider.Contacts.SettingsColumns.VALUE" class="hiddenlink" target="rightframe">android.provider.Contacts.SettingsColumns</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/fields_index_removals.html b/docs/html/sdk/api_diff/5/changes/fields_index_removals.html
index 9bbd9e6..62a98e2 100644
--- a/docs/html/sdk/api_diff/5/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/5/changes/fields_index_removals.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.ViewGroup.html#android.view.ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER" class="hiddenlink" target="rightframe"><strike>FLAG_USE_CHILD_DRAWING_ORDER</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html b/docs/html/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html
index d383b70..46902c7 100644
--- a/docs/html/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html
+++ b/docs/html/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/jdiff_help.html b/docs/html/sdk/api_diff/5/changes/jdiff_help.html
index 74e2508..0bd65a5 100644
--- a/docs/html/sdk/api_diff/5/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/5/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/5/changes/jdiff_statistics.html
index 0fb1ba9..c3e91275 100644
--- a/docs/html/sdk/api_diff/5/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/5/changes/jdiff_statistics.html
@@ -940,7 +940,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/5/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/5/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/5/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/methods_index_additions.html b/docs/html/sdk/api_diff/5/changes/methods_index_additions.html
index 152d63d..e333579 100644
--- a/docs/html/sdk/api_diff/5/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/5/changes/methods_index_additions.html
@@ -943,7 +943,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.database.sqlite.SQLiteDatabase.html#android.database.sqlite.SQLiteDatabase.yieldIfContendedSafely_added(long)" class="hiddenlink" target="rightframe"><b>yieldIfContendedSafely</b>
 (<code>long</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/methods_index_all.html b/docs/html/sdk/api_diff/5/changes/methods_index_all.html
index 5da58bb..cd84372 100644
--- a/docs/html/sdk/api_diff/5/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/5/changes/methods_index_all.html
@@ -1183,7 +1183,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.database.sqlite.SQLiteDatabase.html#android.database.sqlite.SQLiteDatabase.yieldIfContendedSafely_added(long)" class="hiddenlink" target="rightframe"><b>yieldIfContendedSafely</b>
 (<code>long</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/methods_index_changes.html b/docs/html/sdk/api_diff/5/changes/methods_index_changes.html
index 81dc7d9..48b9f9b 100644
--- a/docs/html/sdk/api_diff/5/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/5/changes/methods_index_changes.html
@@ -433,7 +433,7 @@
 (<code>UrlInterceptHandler</code>)</A></nobr><br>
 <nobr><A HREF="android.webkit.UrlInterceptRegistry.html#android.webkit.UrlInterceptRegistry.urlInterceptDisabled_changed()" class="hiddenlink" target="rightframe">urlInterceptDisabled
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/methods_index_removals.html b/docs/html/sdk/api_diff/5/changes/methods_index_removals.html
index f3c2288..6d33874e 100644
--- a/docs/html/sdk/api_diff/5/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/5/changes/methods_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:.5em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/packages_index_additions.html b/docs/html/sdk/api_diff/5/changes/packages_index_additions.html
index 5c8de21..6bf0861 100644
--- a/docs/html/sdk/api_diff/5/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/5/changes/packages_index_additions.html
@@ -52,7 +52,7 @@
 <A HREF="changes-summary.html#android.accounts" class="hiddenlink" target="rightframe"><b>android.accounts</b></A><br>
 <A HREF="changes-summary.html#android.bluetooth" class="hiddenlink" target="rightframe"><b>android.bluetooth</b></A><br>
 <A HREF="changes-summary.html#android.telephony.cdma" class="hiddenlink" target="rightframe"><b>android.telephony.cdma</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/packages_index_all.html b/docs/html/sdk/api_diff/5/changes/packages_index_all.html
index b56bd23..ea994f2 100644
--- a/docs/html/sdk/api_diff/5/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/5/changes/packages_index_all.html
@@ -82,7 +82,7 @@
 <A HREF="pkg_dalvik.system.html" class="hiddenlink" target="rightframe">dalvik.system</A><br>
 <A HREF="pkg_java.util.concurrent.html" class="hiddenlink" target="rightframe">java.util.concurrent</A><br>
 <A HREF="pkg_java.util.concurrent.locks.html" class="hiddenlink" target="rightframe">java.util.concurrent.locks</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/packages_index_changes.html b/docs/html/sdk/api_diff/5/changes/packages_index_changes.html
index 5cc9d4c..75ee8cf 100644
--- a/docs/html/sdk/api_diff/5/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/5/changes/packages_index_changes.html
@@ -79,7 +79,7 @@
 <A HREF="pkg_dalvik.system.html" class="hiddenlink" target="rightframe">dalvik.system</A><br>
 <A HREF="pkg_java.util.concurrent.html" class="hiddenlink" target="rightframe">java.util.concurrent</A><br>
 <A HREF="pkg_java.util.concurrent.locks.html" class="hiddenlink" target="rightframe">java.util.concurrent.locks</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/packages_index_removals.html b/docs/html/sdk/api_diff/5/changes/packages_index_removals.html
index cd89a22..f22b7e4 100644
--- a/docs/html/sdk/api_diff/5/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/5/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.app.html b/docs/html/sdk/api_diff/5/changes/pkg_android.app.html
index 5016947..758e706 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.app.html
@@ -190,7 +190,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.content.html b/docs/html/sdk/api_diff/5/changes/pkg_android.content.html
index 068fa0b..2b7e98a 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.content.html
@@ -225,7 +225,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/5/changes/pkg_android.content.pm.html
index b5a96ab..06607bb 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.content.pm.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/5/changes/pkg_android.content.res.html
index b973647..4869210 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.content.res.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.database.html b/docs/html/sdk/api_diff/5/changes/pkg_android.database.html
index a1fa334..0ececbe 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.database.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.database.sqlite.html b/docs/html/sdk/api_diff/5/changes/pkg_android.database.sqlite.html
index d336a08..3009636 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.database.sqlite.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.database.sqlite.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html b/docs/html/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html
index e9430d2..ac9d38d 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/5/changes/pkg_android.graphics.html
index 15b3bcb..2ec8d26 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.graphics.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/5/changes/pkg_android.hardware.html
index c3241d7..e37abae 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.hardware.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.html b/docs/html/sdk/api_diff/5/changes/pkg_android.html
index 9328627..a63b59f 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html b/docs/html/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html
index 2bfd62f..9f9945f 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.location.html b/docs/html/sdk/api_diff/5/changes/pkg_android.location.html
index d6a4ed9..272cc5b 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.location.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.location.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.media.html b/docs/html/sdk/api_diff/5/changes/pkg_android.media.html
index ac83324..d32f7ea 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.media.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/5/changes/pkg_android.opengl.html
index a230ea2..e679773 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.opengl.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.os.html b/docs/html/sdk/api_diff/5/changes/pkg_android.os.html
index c1ad2c1..405a251 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.os.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/5/changes/pkg_android.provider.html
index 0249646..c81e88b 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.provider.html
@@ -680,7 +680,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/5/changes/pkg_android.telephony.html
index c5e1738..f9b6e98 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.telephony.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.test.html b/docs/html/sdk/api_diff/5/changes/pkg_android.test.html
index 7b81943..81cdc3b 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.test.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.test.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/5/changes/pkg_android.test.mock.html
index 451ed0b..7391166 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.test.mock.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.text.format.html b/docs/html/sdk/api_diff/5/changes/pkg_android.text.format.html
index ca42b02..f1ffa07 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.text.format.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.text.format.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.text.html b/docs/html/sdk/api_diff/5/changes/pkg_android.text.html
index 5125730..6144b50 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.text.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.text.style.html b/docs/html/sdk/api_diff/5/changes/pkg_android.text.style.html
index bedca4c..3f2188d 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.text.style.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.text.style.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.util.html b/docs/html/sdk/api_diff/5/changes/pkg_android.util.html
index 0a64985..e46fc15 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.util.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.view.animation.html b/docs/html/sdk/api_diff/5/changes/pkg_android.view.animation.html
index 91302af..1b6f948 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.view.animation.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.view.animation.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.view.html b/docs/html/sdk/api_diff/5/changes/pkg_android.view.html
index a7c186a..b82970d 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.view.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/5/changes/pkg_android.webkit.html
index 685e48e..8c1a99c 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.webkit.html
@@ -211,7 +211,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/5/changes/pkg_android.widget.html
index 2f11503..c6f0fe5 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_android.widget.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_dalvik.system.html b/docs/html/sdk/api_diff/5/changes/pkg_dalvik.system.html
index bf030e2..51c2009 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_dalvik.system.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_dalvik.system.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_java.util.concurrent.html b/docs/html/sdk/api_diff/5/changes/pkg_java.util.concurrent.html
index c20421d..4179ebb 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_java.util.concurrent.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_java.util.concurrent.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html b/docs/html/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html
index c061eb6..b42052a 100644
--- a/docs/html/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html
+++ b/docs/html/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/6/changes/alldiffs_index_additions.html
index 3db469c..cbe0da4 100644
--- a/docs/html/sdk/api_diff/6/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/6/changes/alldiffs_index_additions.html
@@ -78,7 +78,7 @@
 <!-- Field quickContactBadgeStyleWindowSmall -->
 <nobr><A HREF="android.R.attr.html#android.R.attr.quickContactBadgeStyleWindowSmall" class="hiddenlink" target="rightframe">quickContactBadgeStyleWindowSmall</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/6/changes/alldiffs_index_all.html
index ebcbdf5..a263e84 100644
--- a/docs/html/sdk/api_diff/6/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/6/changes/alldiffs_index_all.html
@@ -201,7 +201,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/6/changes/alldiffs_index_changes.html
index 20eab19..02192b6 100644
--- a/docs/html/sdk/api_diff/6/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/6/changes/alldiffs_index_changes.html
@@ -142,7 +142,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/6/changes/alldiffs_index_removals.html
index 68d2c20..48c9fcd 100644
--- a/docs/html/sdk/api_diff/6/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/6/changes/alldiffs_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/android.R.attr.html b/docs/html/sdk/api_diff/6/changes/android.R.attr.html
index b516ada..8e45952 100644
--- a/docs/html/sdk/api_diff/6/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/6/changes/android.R.attr.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/android.accounts.AbstractAccountAuthenticator.html b/docs/html/sdk/api_diff/6/changes/android.accounts.AbstractAccountAuthenticator.html
index 97f6e93..a6f24ff 100644
--- a/docs/html/sdk/api_diff/6/changes/android.accounts.AbstractAccountAuthenticator.html
+++ b/docs/html/sdk/api_diff/6/changes/android.accounts.AbstractAccountAuthenticator.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/6/changes/android.os.Build.VERSION_CODES.html
index f3d9391..6198be6 100644
--- a/docs/html/sdk/api_diff/6/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/6/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/6/changes/android.view.WindowManager.LayoutParams.html
index 9cb6b27..a583ff37 100644
--- a/docs/html/sdk/api_diff/6/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/6/changes/android.view.WindowManager.LayoutParams.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/changes-summary.html b/docs/html/sdk/api_diff/6/changes/changes-summary.html
index a1c3985..d837eb4 100644
--- a/docs/html/sdk/api_diff/6/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/6/changes/changes-summary.html
@@ -142,7 +142,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/classes_index_additions.html b/docs/html/sdk/api_diff/6/changes/classes_index_additions.html
index ccd5b66..601e927 100644
--- a/docs/html/sdk/api_diff/6/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/6/changes/classes_index_additions.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/classes_index_all.html b/docs/html/sdk/api_diff/6/changes/classes_index_all.html
index 97997b7..ecae613 100644
--- a/docs/html/sdk/api_diff/6/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/6/changes/classes_index_all.html
@@ -79,7 +79,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/classes_index_changes.html b/docs/html/sdk/api_diff/6/changes/classes_index_changes.html
index 98b6c1f..620d5fe 100644
--- a/docs/html/sdk/api_diff/6/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/6/changes/classes_index_changes.html
@@ -79,7 +79,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/classes_index_removals.html b/docs/html/sdk/api_diff/6/changes/classes_index_removals.html
index 792fc4e..1a681c4 100644
--- a/docs/html/sdk/api_diff/6/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/6/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/6/changes/constructors_index_additions.html
index 3237ba3..a106dcb 100644
--- a/docs/html/sdk/api_diff/6/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/6/changes/constructors_index_additions.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/constructors_index_all.html b/docs/html/sdk/api_diff/6/changes/constructors_index_all.html
index 637582e..3e67e48 100644
--- a/docs/html/sdk/api_diff/6/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/6/changes/constructors_index_all.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/6/changes/constructors_index_changes.html
index 728fa2d..1f3c803 100644
--- a/docs/html/sdk/api_diff/6/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/6/changes/constructors_index_changes.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/6/changes/constructors_index_removals.html
index 1b95544..a260baa 100644
--- a/docs/html/sdk/api_diff/6/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/6/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/fields_index_additions.html b/docs/html/sdk/api_diff/6/changes/fields_index_additions.html
index cc8d873..3e5b2cd 100644
--- a/docs/html/sdk/api_diff/6/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/6/changes/fields_index_additions.html
@@ -71,7 +71,7 @@
 </nobr><br>
 <nobr><A HREF="android.R.attr.html#android.R.attr.quickContactBadgeStyleWindowSmall" class="hiddenlink" target="rightframe">quickContactBadgeStyleWindowSmall</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/fields_index_all.html b/docs/html/sdk/api_diff/6/changes/fields_index_all.html
index 2b59a4b..1732374 100644
--- a/docs/html/sdk/api_diff/6/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/6/changes/fields_index_all.html
@@ -81,7 +81,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.WindowManager.LayoutParams.html#android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL" class="hiddenlink" target="rightframe">TYPE_STATUS_BAR_PANEL</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/fields_index_changes.html b/docs/html/sdk/api_diff/6/changes/fields_index_changes.html
index e05a989..48a9387 100644
--- a/docs/html/sdk/api_diff/6/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/6/changes/fields_index_changes.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.view.WindowManager.LayoutParams.html#android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL" class="hiddenlink" target="rightframe">TYPE_STATUS_BAR_PANEL</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/fields_index_removals.html b/docs/html/sdk/api_diff/6/changes/fields_index_removals.html
index 9f62d88..9ad97a7 100644
--- a/docs/html/sdk/api_diff/6/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/6/changes/fields_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/jdiff_help.html b/docs/html/sdk/api_diff/6/changes/jdiff_help.html
index 999508c..4be6975 100644
--- a/docs/html/sdk/api_diff/6/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/6/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/6/changes/jdiff_statistics.html
index b4b77cd..e78f33d 100644
--- a/docs/html/sdk/api_diff/6/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/6/changes/jdiff_statistics.html
@@ -216,7 +216,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/6/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/6/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/6/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/methods_index_additions.html b/docs/html/sdk/api_diff/6/changes/methods_index_additions.html
index 7a9392f..3ef0845 100644
--- a/docs/html/sdk/api_diff/6/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/6/changes/methods_index_additions.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/methods_index_all.html b/docs/html/sdk/api_diff/6/changes/methods_index_all.html
index a3a35e4..493e94c 100644
--- a/docs/html/sdk/api_diff/6/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/6/changes/methods_index_all.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.accounts.AbstractAccountAuthenticator.html#android.accounts.AbstractAccountAuthenticator.updateCredentials_changed(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle)" class="hiddenlink" target="rightframe">updateCredentials
 (<code>AccountAuthenticatorResponse, Account, String, Bundle</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/methods_index_changes.html b/docs/html/sdk/api_diff/6/changes/methods_index_changes.html
index ab25ba5..130e1d1 100644
--- a/docs/html/sdk/api_diff/6/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/6/changes/methods_index_changes.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.accounts.AbstractAccountAuthenticator.html#android.accounts.AbstractAccountAuthenticator.updateCredentials_changed(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle)" class="hiddenlink" target="rightframe">updateCredentials
 (<code>AccountAuthenticatorResponse, Account, String, Bundle</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/methods_index_removals.html b/docs/html/sdk/api_diff/6/changes/methods_index_removals.html
index 3906d28..76670a51 100644
--- a/docs/html/sdk/api_diff/6/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/6/changes/methods_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/packages_index_additions.html b/docs/html/sdk/api_diff/6/changes/packages_index_additions.html
index 1776064..cb6e9d5 100644
--- a/docs/html/sdk/api_diff/6/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/6/changes/packages_index_additions.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/packages_index_all.html b/docs/html/sdk/api_diff/6/changes/packages_index_all.html
index 32c6eeb8..14634ba 100644
--- a/docs/html/sdk/api_diff/6/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/6/changes/packages_index_all.html
@@ -54,7 +54,7 @@
 <A HREF="pkg_android.accounts.html" class="hiddenlink" target="rightframe">android.accounts</A><br>
 <A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
 <A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/packages_index_changes.html b/docs/html/sdk/api_diff/6/changes/packages_index_changes.html
index edd70f0..a973e7d 100644
--- a/docs/html/sdk/api_diff/6/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/6/changes/packages_index_changes.html
@@ -54,7 +54,7 @@
 <A HREF="pkg_android.accounts.html" class="hiddenlink" target="rightframe">android.accounts</A><br>
 <A HREF="pkg_android.os.html" class="hiddenlink" target="rightframe">android.os</A><br>
 <A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/packages_index_removals.html b/docs/html/sdk/api_diff/6/changes/packages_index_removals.html
index 9fd0f7e..eaaeb6c 100644
--- a/docs/html/sdk/api_diff/6/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/6/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/pkg_android.accounts.html b/docs/html/sdk/api_diff/6/changes/pkg_android.accounts.html
index 21224bf..72d7634 100644
--- a/docs/html/sdk/api_diff/6/changes/pkg_android.accounts.html
+++ b/docs/html/sdk/api_diff/6/changes/pkg_android.accounts.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/pkg_android.html b/docs/html/sdk/api_diff/6/changes/pkg_android.html
index 25ddfa0c..0116d4c 100644
--- a/docs/html/sdk/api_diff/6/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/6/changes/pkg_android.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/pkg_android.os.html b/docs/html/sdk/api_diff/6/changes/pkg_android.os.html
index 5b5570c..1465121 100644
--- a/docs/html/sdk/api_diff/6/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/6/changes/pkg_android.os.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/6/changes/pkg_android.view.html b/docs/html/sdk/api_diff/6/changes/pkg_android.view.html
index 2595fad..180eecc 100644
--- a/docs/html/sdk/api_diff/6/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/6/changes/pkg_android.view.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/7/changes/alldiffs_index_additions.html
index 5f2347a..e3fefc3 100644
--- a/docs/html/sdk/api_diff/7/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/7/changes/alldiffs_index_additions.html
@@ -560,7 +560,7 @@
 <A HREF="pkg_android.webkit.html#WebChromeClient.CustomViewCallback" class="hiddenlink" target="rightframe"><b><i>WebChromeClient.CustomViewCallback</i></b></A><br>
 <!-- Class WebSettings.ZoomDensity -->
 <A HREF="pkg_android.webkit.html#WebSettings.ZoomDensity" class="hiddenlink" target="rightframe"><b>WebSettings.ZoomDensity</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/7/changes/alldiffs_index_all.html
index f0df458..6e3119d 100644
--- a/docs/html/sdk/api_diff/7/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/7/changes/alldiffs_index_all.html
@@ -748,7 +748,7 @@
 <A HREF="android.webkit.WebStorage.html" class="hiddenlink" target="rightframe">WebStorage</A><br>
 <!-- Class WebView -->
 <A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/7/changes/alldiffs_index_changes.html
index 173d8e9..a536e7f 100644
--- a/docs/html/sdk/api_diff/7/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/7/changes/alldiffs_index_changes.html
@@ -364,7 +364,7 @@
 <A HREF="android.webkit.WebStorage.html" class="hiddenlink" target="rightframe">WebStorage</A><br>
 <!-- Class WebView -->
 <A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/7/changes/alldiffs_index_removals.html
index 68d2c20..48c9fcd 100644
--- a/docs/html/sdk/api_diff/7/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/7/changes/alldiffs_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/7/changes/android.Manifest.permission.html
index 48b3bb0..0160c9c 100644
--- a/docs/html/sdk/api_diff/7/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/7/changes/android.Manifest.permission.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.R.attr.html b/docs/html/sdk/api_diff/7/changes/android.R.attr.html
index 609b2fc..7a6ad21 100644
--- a/docs/html/sdk/api_diff/7/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/7/changes/android.R.attr.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/7/changes/android.app.WallpaperManager.html
index 45db50d..03114be 100644
--- a/docs/html/sdk/api_diff/7/changes/android.app.WallpaperManager.html
+++ b/docs/html/sdk/api_diff/7/changes/android.app.WallpaperManager.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.content.Intent.html b/docs/html/sdk/api_diff/7/changes/android.content.Intent.html
index 4eb6058..5e709fa 100644
--- a/docs/html/sdk/api_diff/7/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/7/changes/android.content.Intent.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
index 58b17ee..aafe35f 100644
--- a/docs/html/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
@@ -199,7 +199,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.graphics.Rect.html b/docs/html/sdk/api_diff/7/changes/android.graphics.Rect.html
index dad11c7..83a1c4a 100644
--- a/docs/html/sdk/api_diff/7/changes/android.graphics.Rect.html
+++ b/docs/html/sdk/api_diff/7/changes/android.graphics.Rect.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html b/docs/html/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
index b08003c..9f81cc7 100644
--- a/docs/html/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
+++ b/docs/html/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
index 26b054be..4a07b5f 100644
--- a/docs/html/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.os.PowerManager.html b/docs/html/sdk/api_diff/7/changes/android.os.PowerManager.html
index f766c93..cfb53f9 100644
--- a/docs/html/sdk/api_diff/7/changes/android.os.PowerManager.html
+++ b/docs/html/sdk/api_diff/7/changes/android.os.PowerManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html b/docs/html/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
index e59d1e8..b1b5302 100644
--- a/docs/html/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
+++ b/docs/html/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html b/docs/html/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
index aa87eb8..914e9c1 100644
--- a/docs/html/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
+++ b/docs/html/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
@@ -147,7 +147,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.view.View.html b/docs/html/sdk/api_diff/7/changes/android.view.View.html
index 1194d59..338ea88 100644
--- a/docs/html/sdk/api_diff/7/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/7/changes/android.view.View.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/7/changes/android.view.ViewGroup.html
index d7c030c..18c5c52 100644
--- a/docs/html/sdk/api_diff/7/changes/android.view.ViewGroup.html
+++ b/docs/html/sdk/api_diff/7/changes/android.view.ViewGroup.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html b/docs/html/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
index 869421e..32176fc 100644
--- a/docs/html/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html b/docs/html/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
index 2dacbba..bc81cb0 100644
--- a/docs/html/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html b/docs/html/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
index 5bc64b3..69bdddd 100644
--- a/docs/html/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/7/changes/android.webkit.WebSettings.html
index f763d8b..33d7a87 100644
--- a/docs/html/sdk/api_diff/7/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.WebSettings.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.WebStorage.html b/docs/html/sdk/api_diff/7/changes/android.webkit.WebStorage.html
index 0b20ec2..9ea4eb4 100644
--- a/docs/html/sdk/api_diff/7/changes/android.webkit.WebStorage.html
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.WebStorage.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/7/changes/android.webkit.WebView.html
index e927bc6..9d7f33826 100644
--- a/docs/html/sdk/api_diff/7/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/7/changes/android.webkit.WebView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/7/changes/android.widget.RemoteViews.html
index 2651c5e..6dd551b 100644
--- a/docs/html/sdk/api_diff/7/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/7/changes/android.widget.RemoteViews.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/android.widget.ViewFlipper.html b/docs/html/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
index fe92777..99af3f9 100644
--- a/docs/html/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
+++ b/docs/html/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/changes-summary.html b/docs/html/sdk/api_diff/7/changes/changes-summary.html
index 34d4d25..c66c124 100644
--- a/docs/html/sdk/api_diff/7/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/7/changes/changes-summary.html
@@ -206,7 +206,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/classes_index_additions.html b/docs/html/sdk/api_diff/7/changes/classes_index_additions.html
index db5459e..e35e9aa 100644
--- a/docs/html/sdk/api_diff/7/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/7/changes/classes_index_additions.html
@@ -70,7 +70,7 @@
 <A HREF="pkg_android.app.html#WallpaperInfo" class="hiddenlink" target="rightframe"><b>WallpaperInfo</b></A><br>
 <A HREF="pkg_android.webkit.html#WebChromeClient.CustomViewCallback" class="hiddenlink" target="rightframe"><b><i>WebChromeClient.CustomViewCallback</i></b></A><br>
 <A HREF="pkg_android.webkit.html#WebSettings.ZoomDensity" class="hiddenlink" target="rightframe"><b>WebSettings.ZoomDensity</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/classes_index_all.html b/docs/html/sdk/api_diff/7/changes/classes_index_all.html
index 49b9728..ee2c788 100644
--- a/docs/html/sdk/api_diff/7/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/7/changes/classes_index_all.html
@@ -227,7 +227,7 @@
 <A HREF="pkg_android.webkit.html#WebSettings.ZoomDensity" class="hiddenlink" target="rightframe"><b>WebSettings.ZoomDensity</b></A><br>
 <A HREF="android.webkit.WebStorage.html" class="hiddenlink" target="rightframe">WebStorage</A><br>
 <A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/classes_index_changes.html b/docs/html/sdk/api_diff/7/changes/classes_index_changes.html
index f40db15..649f5d2 100644
--- a/docs/html/sdk/api_diff/7/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/7/changes/classes_index_changes.html
@@ -198,7 +198,7 @@
 <A HREF="android.webkit.WebSettings.html" class="hiddenlink" target="rightframe">WebSettings</A><br>
 <A HREF="android.webkit.WebStorage.html" class="hiddenlink" target="rightframe">WebStorage</A><br>
 <A HREF="android.webkit.WebView.html" class="hiddenlink" target="rightframe">WebView</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/classes_index_removals.html b/docs/html/sdk/api_diff/7/changes/classes_index_removals.html
index e6da73f..af7f1d0 100644
--- a/docs/html/sdk/api_diff/7/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/7/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/7/changes/constructors_index_additions.html
index 1858441..bbfaeda 100644
--- a/docs/html/sdk/api_diff/7/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/7/changes/constructors_index_additions.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.telephony.NeighboringCellInfo.html#android.telephony.NeighboringCellInfo.ctor_added(int, java.lang.String, int)" class="hiddenlink" target="rightframe"><b>NeighboringCellInfo</b>
 (<code>int, String, int</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/constructors_index_all.html b/docs/html/sdk/api_diff/7/changes/constructors_index_all.html
index 4975970..80c0382 100644
--- a/docs/html/sdk/api_diff/7/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/7/changes/constructors_index_all.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.telephony.NeighboringCellInfo.html#android.telephony.NeighboringCellInfo.ctor_added(int, java.lang.String, int)" class="hiddenlink" target="rightframe"><b>NeighboringCellInfo</b>
 (<code>int, String, int</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/7/changes/constructors_index_changes.html
index a5ca2ef..3078d87 100644
--- a/docs/html/sdk/api_diff/7/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/7/changes/constructors_index_changes.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/7/changes/constructors_index_removals.html
index 74a09ba..3603b75 100644
--- a/docs/html/sdk/api_diff/7/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/7/changes/constructors_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/fields_index_additions.html b/docs/html/sdk/api_diff/7/changes/fields_index_additions.html
index 3148f4c..629a06a 100644
--- a/docs/html/sdk/api_diff/7/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/7/changes/fields_index_additions.html
@@ -145,7 +145,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION" class="hiddenlink" target="rightframe">VOICE_RECOGNITION</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/fields_index_all.html b/docs/html/sdk/api_diff/7/changes/fields_index_all.html
index c782afc..3583d69 100644
--- a/docs/html/sdk/api_diff/7/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/7/changes/fields_index_all.html
@@ -167,7 +167,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.media.MediaRecorder.AudioSource.html#android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION" class="hiddenlink" target="rightframe">VOICE_RECOGNITION</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/fields_index_changes.html b/docs/html/sdk/api_diff/7/changes/fields_index_changes.html
index 88f77de..beef943 100644
--- a/docs/html/sdk/api_diff/7/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/7/changes/fields_index_changes.html
@@ -71,7 +71,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.SET_PREFERRED_APPLICATIONS" class="hiddenlink" target="rightframe">SET_PREFERRED_APPLICATIONS</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/fields_index_removals.html b/docs/html/sdk/api_diff/7/changes/fields_index_removals.html
index 9f62d88..9ad97a7 100644
--- a/docs/html/sdk/api_diff/7/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/7/changes/fields_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/jdiff_help.html b/docs/html/sdk/api_diff/7/changes/jdiff_help.html
index 6cc80dc..28076bf 100644
--- a/docs/html/sdk/api_diff/7/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/7/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/7/changes/jdiff_statistics.html
index ba81aec..bcf7b5a 100644
--- a/docs/html/sdk/api_diff/7/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/7/changes/jdiff_statistics.html
@@ -329,7 +329,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/7/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/7/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/7/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/methods_index_additions.html b/docs/html/sdk/api_diff/7/changes/methods_index_additions.html
index 1623337..eb5ba41 100644
--- a/docs/html/sdk/api_diff/7/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/7/changes/methods_index_additions.html
@@ -287,7 +287,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.unflattenFromString_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>unflattenFromString</b>
 (<code>String</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/methods_index_all.html b/docs/html/sdk/api_diff/7/changes/methods_index_all.html
index 7258ab1..94abeca 100644
--- a/docs/html/sdk/api_diff/7/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/7/changes/methods_index_all.html
@@ -291,7 +291,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.graphics.Rect.html#android.graphics.Rect.unflattenFromString_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>unflattenFromString</b>
 (<code>String</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/methods_index_changes.html b/docs/html/sdk/api_diff/7/changes/methods_index_changes.html
index 35867b1..1cab2d7 100644
--- a/docs/html/sdk/api_diff/7/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/7/changes/methods_index_changes.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.removePackageFromPreferred_changed(java.lang.String)" class="hiddenlink" target="rightframe">removePackageFromPreferred
 (<code>String</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/methods_index_removals.html b/docs/html/sdk/api_diff/7/changes/methods_index_removals.html
index b5aea4f..b9d406e 100644
--- a/docs/html/sdk/api_diff/7/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/7/changes/methods_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/packages_index_additions.html b/docs/html/sdk/api_diff/7/changes/packages_index_additions.html
index d6ad068..4094c20 100644
--- a/docs/html/sdk/api_diff/7/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/7/changes/packages_index_additions.html
@@ -51,7 +51,7 @@
 <div id="indexTableEntries">
 <A NAME="A"></A>
 <A HREF="changes-summary.html#android.service.wallpaper" class="hiddenlink" target="rightframe"><b>android.service.wallpaper</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/packages_index_all.html b/docs/html/sdk/api_diff/7/changes/packages_index_all.html
index 5ab8b40..75bf059 100644
--- a/docs/html/sdk/api_diff/7/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/7/changes/packages_index_all.html
@@ -62,7 +62,7 @@
 <A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
 <A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/packages_index_changes.html b/docs/html/sdk/api_diff/7/changes/packages_index_changes.html
index 2331bb2..8c2e013 100644
--- a/docs/html/sdk/api_diff/7/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/7/changes/packages_index_changes.html
@@ -61,7 +61,7 @@
 <A HREF="pkg_android.view.html" class="hiddenlink" target="rightframe">android.view</A><br>
 <A HREF="pkg_android.webkit.html" class="hiddenlink" target="rightframe">android.webkit</A><br>
 <A HREF="pkg_android.widget.html" class="hiddenlink" target="rightframe">android.widget</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/packages_index_removals.html b/docs/html/sdk/api_diff/7/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/7/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/7/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.app.html b/docs/html/sdk/api_diff/7/changes/pkg_android.app.html
index f05a62f..c11f93e 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.app.html
@@ -120,7 +120,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.content.html b/docs/html/sdk/api_diff/7/changes/pkg_android.content.html
index 4920ce3..24d77e8 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.content.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/7/changes/pkg_android.content.pm.html
index c5c3b2e..f397a3f 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.content.pm.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/7/changes/pkg_android.graphics.html
index 732481f..6a353ef 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.graphics.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.html b/docs/html/sdk/api_diff/7/changes/pkg_android.html
index fa07ac1..9477cb9 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.media.html b/docs/html/sdk/api_diff/7/changes/pkg_android.media.html
index d5cd679..16c07b4 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.media.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.os.html b/docs/html/sdk/api_diff/7/changes/pkg_android.os.html
index bfaa1eb..9de8c28 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.os.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/7/changes/pkg_android.telephony.html
index adc1ceb..c665aad 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.telephony.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.view.html b/docs/html/sdk/api_diff/7/changes/pkg_android.view.html
index 40a8f57..59d79a5 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.view.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/7/changes/pkg_android.webkit.html
index 8c37e6f..456151c 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.webkit.html
@@ -169,7 +169,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/7/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/7/changes/pkg_android.widget.html
index e404840..185b6af 100644
--- a/docs/html/sdk/api_diff/7/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/7/changes/pkg_android.widget.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/8/changes/alldiffs_index_additions.html
index 303aeb3..9f130c6 100644
--- a/docs/html/sdk/api_diff/8/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/8/changes/alldiffs_index_additions.html
@@ -2063,7 +2063,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.graphics.html#YuvImage" class="hiddenlink" target="rightframe"><b>YuvImage</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/8/changes/alldiffs_index_all.html
index 278625a..d0fa267 100644
--- a/docs/html/sdk/api_diff/8/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/8/changes/alldiffs_index_all.html
@@ -2784,7 +2784,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/8/changes/alldiffs_index_changes.html
index 5bbba42..e965b96 100644
--- a/docs/html/sdk/api_diff/8/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/8/changes/alldiffs_index_changes.html
@@ -1125,7 +1125,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/8/changes/alldiffs_index_removals.html
index fbca7ca..60ff1bf 100644
--- a/docs/html/sdk/api_diff/8/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/8/changes/alldiffs_index_removals.html
@@ -200,7 +200,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="javax.xml.XMLConstants.html#javax.xml.XMLConstants.ctor_removed()" class="hiddenlink" target="rightframe"><strike>XMLConstants</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/8/changes/android.Manifest.permission.html
index 2b79d42..3979477 100644
--- a/docs/html/sdk/api_diff/8/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/8/changes/android.Manifest.permission.html
@@ -146,7 +146,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.R.anim.html b/docs/html/sdk/api_diff/8/changes/android.R.anim.html
index 0d1118e..3c995e4 100644
--- a/docs/html/sdk/api_diff/8/changes/android.R.anim.html
+++ b/docs/html/sdk/api_diff/8/changes/android.R.anim.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.R.attr.html b/docs/html/sdk/api_diff/8/changes/android.R.attr.html
index 0a1193c..fadcb80 100644
--- a/docs/html/sdk/api_diff/8/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/8/changes/android.R.attr.html
@@ -174,7 +174,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.R.id.html b/docs/html/sdk/api_diff/8/changes/android.R.id.html
index e2845c4..3998e66 100644
--- a/docs/html/sdk/api_diff/8/changes/android.R.id.html
+++ b/docs/html/sdk/api_diff/8/changes/android.R.id.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.accounts.AccountManager.html b/docs/html/sdk/api_diff/8/changes/android.accounts.AccountManager.html
index 1380d97..3c59fa7 100644
--- a/docs/html/sdk/api_diff/8/changes/android.accounts.AccountManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.accounts.AccountManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.app.Activity.html b/docs/html/sdk/api_diff/8/changes/android.app.Activity.html
index 9c6f336..e7fcee6 100644
--- a/docs/html/sdk/api_diff/8/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/8/changes/android.app.Activity.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.app.ActivityManager.ProcessErrorStateInfo.html b/docs/html/sdk/api_diff/8/changes/android.app.ActivityManager.ProcessErrorStateInfo.html
index 1a9d306..5af9583 100644
--- a/docs/html/sdk/api_diff/8/changes/android.app.ActivityManager.ProcessErrorStateInfo.html
+++ b/docs/html/sdk/api_diff/8/changes/android.app.ActivityManager.ProcessErrorStateInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.app.ActivityManager.html b/docs/html/sdk/api_diff/8/changes/android.app.ActivityManager.html
index 08897c9..c66a72f 100644
--- a/docs/html/sdk/api_diff/8/changes/android.app.ActivityManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.app.ActivityManager.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.app.AlarmManager.html b/docs/html/sdk/api_diff/8/changes/android.app.AlarmManager.html
index 7c1bad4..6b49887 100644
--- a/docs/html/sdk/api_diff/8/changes/android.app.AlarmManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.app.AlarmManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.app.Dialog.html b/docs/html/sdk/api_diff/8/changes/android.app.Dialog.html
index 3cbda33..3922d1a 100644
--- a/docs/html/sdk/api_diff/8/changes/android.app.Dialog.html
+++ b/docs/html/sdk/api_diff/8/changes/android.app.Dialog.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.app.SearchManager.html b/docs/html/sdk/api_diff/8/changes/android.app.SearchManager.html
index e7246ad..f3339b4 100644
--- a/docs/html/sdk/api_diff/8/changes/android.app.SearchManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.app.SearchManager.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.AbstractThreadedSyncAdapter.html b/docs/html/sdk/api_diff/8/changes/android.content.AbstractThreadedSyncAdapter.html
index bb11780..a9cdd9a 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.AbstractThreadedSyncAdapter.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.AbstractThreadedSyncAdapter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.ComponentName.html b/docs/html/sdk/api_diff/8/changes/android.content.ComponentName.html
index 636d0a1..6a2ca14 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.ComponentName.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.ComponentName.html
@@ -114,7 +114,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.ContentResolver.html b/docs/html/sdk/api_diff/8/changes/android.content.ContentResolver.html
index 5565ed9..308bee5 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.ContentResolver.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.ContentResolver.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.Context.html b/docs/html/sdk/api_diff/8/changes/android.content.Context.html
index 0af8e49..c309851 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.Context.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.ContextWrapper.html b/docs/html/sdk/api_diff/8/changes/android.content.ContextWrapper.html
index 2205266..824d693 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.ContextWrapper.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.ContextWrapper.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.Intent.html b/docs/html/sdk/api_diff/8/changes/android.content.Intent.html
index 4872ecc..d3e0254 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.Intent.html
@@ -180,7 +180,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.SyncResult.html b/docs/html/sdk/api_diff/8/changes/android.content.SyncResult.html
index b4b7884..4484877 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.SyncResult.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.SyncResult.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/8/changes/android.content.pm.ActivityInfo.html
index 6d406bf..6a2be41 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.pm.ActivityInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/8/changes/android.content.pm.ApplicationInfo.html
index 2a5d0fe..d8caa0e 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.pm.ApplicationInfo.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.pm.ComponentInfo.html b/docs/html/sdk/api_diff/8/changes/android.content.pm.ComponentInfo.html
index ef0b4b3..bbf6065 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.pm.ComponentInfo.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.pm.ComponentInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/8/changes/android.content.pm.PackageManager.html
index 369a199..58d9ec6 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.pm.PackageManager.html
@@ -240,7 +240,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/8/changes/android.content.res.Configuration.html
index 7d18172..06c58ad 100644
--- a/docs/html/sdk/api_diff/8/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/8/changes/android.content.res.Configuration.html
@@ -193,7 +193,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.database.DatabaseUtils.html b/docs/html/sdk/api_diff/8/changes/android.database.DatabaseUtils.html
index 71d06f3..5a540f6 100644
--- a/docs/html/sdk/api_diff/8/changes/android.database.DatabaseUtils.html
+++ b/docs/html/sdk/api_diff/8/changes/android.database.DatabaseUtils.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.database.sqlite.SQLiteDatabase.html b/docs/html/sdk/api_diff/8/changes/android.database.sqlite.SQLiteDatabase.html
index 069347a..c79b83c 100644
--- a/docs/html/sdk/api_diff/8/changes/android.database.sqlite.SQLiteDatabase.html
+++ b/docs/html/sdk/api_diff/8/changes/android.database.sqlite.SQLiteDatabase.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.database.sqlite.SQLiteProgram.html b/docs/html/sdk/api_diff/8/changes/android.database.sqlite.SQLiteProgram.html
index 622a951..25322bda 100644
--- a/docs/html/sdk/api_diff/8/changes/android.database.sqlite.SQLiteProgram.html
+++ b/docs/html/sdk/api_diff/8/changes/android.database.sqlite.SQLiteProgram.html
@@ -166,7 +166,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.gesture.Gesture.html b/docs/html/sdk/api_diff/8/changes/android.gesture.Gesture.html
index 66b7e23..8676327 100644
--- a/docs/html/sdk/api_diff/8/changes/android.gesture.Gesture.html
+++ b/docs/html/sdk/api_diff/8/changes/android.gesture.Gesture.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.gesture.GesturePoint.html b/docs/html/sdk/api_diff/8/changes/android.gesture.GesturePoint.html
index 86bb697..1d177ab 100644
--- a/docs/html/sdk/api_diff/8/changes/android.gesture.GesturePoint.html
+++ b/docs/html/sdk/api_diff/8/changes/android.gesture.GesturePoint.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.gesture.GestureStroke.html b/docs/html/sdk/api_diff/8/changes/android.gesture.GestureStroke.html
index 55bc9fe..371fe61 100644
--- a/docs/html/sdk/api_diff/8/changes/android.gesture.GestureStroke.html
+++ b/docs/html/sdk/api_diff/8/changes/android.gesture.GestureStroke.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.graphics.PixelFormat.html b/docs/html/sdk/api_diff/8/changes/android.graphics.PixelFormat.html
index 40ca2c7..bb9cdf1 100644
--- a/docs/html/sdk/api_diff/8/changes/android.graphics.PixelFormat.html
+++ b/docs/html/sdk/api_diff/8/changes/android.graphics.PixelFormat.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/8/changes/android.hardware.Camera.Parameters.html
index 13e2cc5..1c25f0c 100644
--- a/docs/html/sdk/api_diff/8/changes/android.hardware.Camera.Parameters.html
+++ b/docs/html/sdk/api_diff/8/changes/android.hardware.Camera.Parameters.html
@@ -235,7 +235,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/8/changes/android.hardware.Camera.html
index b4e0709..1ad9033 100644
--- a/docs/html/sdk/api_diff/8/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/8/changes/android.hardware.Camera.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.hardware.Sensor.html b/docs/html/sdk/api_diff/8/changes/android.hardware.Sensor.html
index 4c453408..f7d8426 100644
--- a/docs/html/sdk/api_diff/8/changes/android.hardware.Sensor.html
+++ b/docs/html/sdk/api_diff/8/changes/android.hardware.Sensor.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.location.LocationManager.html b/docs/html/sdk/api_diff/8/changes/android.location.LocationManager.html
index ccbc00c..a7b2521 100644
--- a/docs/html/sdk/api_diff/8/changes/android.location.LocationManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.location.LocationManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/8/changes/android.media.AudioManager.html
index b337b3d..3bb8c32 100644
--- a/docs/html/sdk/api_diff/8/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.media.AudioManager.html
@@ -249,7 +249,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.media.ExifInterface.html b/docs/html/sdk/api_diff/8/changes/android.media.ExifInterface.html
index 0f32571..25c6384 100644
--- a/docs/html/sdk/api_diff/8/changes/android.media.ExifInterface.html
+++ b/docs/html/sdk/api_diff/8/changes/android.media.ExifInterface.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/8/changes/android.media.MediaRecorder.html
index d0a6263..4807228 100644
--- a/docs/html/sdk/api_diff/8/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/8/changes/android.media.MediaRecorder.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.media.MediaScannerConnection.MediaScannerConnectionClient.html b/docs/html/sdk/api_diff/8/changes/android.media.MediaScannerConnection.MediaScannerConnectionClient.html
index 5ee8da4..c6479c0 100644
--- a/docs/html/sdk/api_diff/8/changes/android.media.MediaScannerConnection.MediaScannerConnectionClient.html
+++ b/docs/html/sdk/api_diff/8/changes/android.media.MediaScannerConnection.MediaScannerConnectionClient.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.media.MediaScannerConnection.html b/docs/html/sdk/api_diff/8/changes/android.media.MediaScannerConnection.html
index 5d5070c..10e96d1 100644
--- a/docs/html/sdk/api_diff/8/changes/android.media.MediaScannerConnection.html
+++ b/docs/html/sdk/api_diff/8/changes/android.media.MediaScannerConnection.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.media.SoundPool.html b/docs/html/sdk/api_diff/8/changes/android.media.SoundPool.html
index 39f81fd..19eb9cc 100644
--- a/docs/html/sdk/api_diff/8/changes/android.media.SoundPool.html
+++ b/docs/html/sdk/api_diff/8/changes/android.media.SoundPool.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.net.ConnectivityManager.html b/docs/html/sdk/api_diff/8/changes/android.net.ConnectivityManager.html
index 9030e2d..e5f8375 100644
--- a/docs/html/sdk/api_diff/8/changes/android.net.ConnectivityManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.net.ConnectivityManager.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.net.SSLCertificateSocketFactory.html b/docs/html/sdk/api_diff/8/changes/android.net.SSLCertificateSocketFactory.html
index 74c1bbb..15ede16 100644
--- a/docs/html/sdk/api_diff/8/changes/android.net.SSLCertificateSocketFactory.html
+++ b/docs/html/sdk/api_diff/8/changes/android.net.SSLCertificateSocketFactory.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.net.http.SslCertificate.html b/docs/html/sdk/api_diff/8/changes/android.net.http.SslCertificate.html
index 5a8fe4f..106c292 100644
--- a/docs/html/sdk/api_diff/8/changes/android.net.http.SslCertificate.html
+++ b/docs/html/sdk/api_diff/8/changes/android.net.http.SslCertificate.html
@@ -176,7 +176,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.opengl.GLSurfaceView.html b/docs/html/sdk/api_diff/8/changes/android.opengl.GLSurfaceView.html
index 8679a61..094e40f 100644
--- a/docs/html/sdk/api_diff/8/changes/android.opengl.GLSurfaceView.html
+++ b/docs/html/sdk/api_diff/8/changes/android.opengl.GLSurfaceView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.opengl.Matrix.html b/docs/html/sdk/api_diff/8/changes/android.opengl.Matrix.html
index 9288e5c..9b38adf 100644
--- a/docs/html/sdk/api_diff/8/changes/android.opengl.Matrix.html
+++ b/docs/html/sdk/api_diff/8/changes/android.opengl.Matrix.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/8/changes/android.os.Build.VERSION_CODES.html
index 4f86bca..23b6d38 100644
--- a/docs/html/sdk/api_diff/8/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/8/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.os.Build.html b/docs/html/sdk/api_diff/8/changes/android.os.Build.html
index d6a3fd3..6f85302 100644
--- a/docs/html/sdk/api_diff/8/changes/android.os.Build.html
+++ b/docs/html/sdk/api_diff/8/changes/android.os.Build.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.os.Bundle.html b/docs/html/sdk/api_diff/8/changes/android.os.Bundle.html
index 091f483..8e7d582 100644
--- a/docs/html/sdk/api_diff/8/changes/android.os.Bundle.html
+++ b/docs/html/sdk/api_diff/8/changes/android.os.Bundle.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.os.Debug.html b/docs/html/sdk/api_diff/8/changes/android.os.Debug.html
index e5a57b3..e3e83a1 100644
--- a/docs/html/sdk/api_diff/8/changes/android.os.Debug.html
+++ b/docs/html/sdk/api_diff/8/changes/android.os.Debug.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.os.Environment.html b/docs/html/sdk/api_diff/8/changes/android.os.Environment.html
index b803614..1879cc3 100644
--- a/docs/html/sdk/api_diff/8/changes/android.os.Environment.html
+++ b/docs/html/sdk/api_diff/8/changes/android.os.Environment.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.os.PowerManager.html b/docs/html/sdk/api_diff/8/changes/android.os.PowerManager.html
index 0fd9c9e..89c048d 100644
--- a/docs/html/sdk/api_diff/8/changes/android.os.PowerManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.os.PowerManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.Browser.html b/docs/html/sdk/api_diff/8/changes/android.provider.Browser.html
index b75b7a0..2a33f82 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.Browser.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.Browser.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.CallLog.Calls.html b/docs/html/sdk/api_diff/8/changes/android.provider.CallLog.Calls.html
index ab8dbae..3463a9a 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.CallLog.Calls.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.CallLog.Calls.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.Contacts.PresenceColumns.html b/docs/html/sdk/api_diff/8/changes/android.provider.Contacts.PresenceColumns.html
index 8a216d7..1b4b5ab 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.Contacts.PresenceColumns.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.Contacts.PresenceColumns.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.Groups.html b/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.Groups.html
index f8f0e2f..e5d294d 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.Groups.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.Groups.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.RawContacts.html b/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.RawContacts.html
index 011a590..ac2ebbe 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.RawContacts.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.RawContacts.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.StatusColumns.html b/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.StatusColumns.html
index 970ce5e..2c3116b 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.StatusColumns.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.ContactsContract.StatusColumns.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.AudioColumns.html b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.AudioColumns.html
index ed9fd8d..7532375 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.AudioColumns.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.AudioColumns.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.Playlists.Members.html b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.Playlists.Members.html
index 9c0ab20..5370022 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.Playlists.Members.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.Playlists.Members.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Images.Thumbnails.html b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Images.Thumbnails.html
index 999ae40..cf7f20d 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Images.Thumbnails.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Images.Thumbnails.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Video.Thumbnails.html b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Video.Thumbnails.html
index 2ffd079..8bf25d4 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Video.Thumbnails.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.Video.Thumbnails.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.html b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.html
index 2aab1e8..9ce6944 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.MediaStore.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/8/changes/android.provider.Settings.Secure.html
index 7b89ab1..00e28d3 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.Settings.Secure.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/8/changes/android.provider.Settings.System.html
index 81dd481..a4c10b2 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.Settings.System.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/8/changes/android.provider.Settings.html
index c78568c..21eadc9 100644
--- a/docs/html/sdk/api_diff/8/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/8/changes/android.provider.Settings.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.speech.RecognizerIntent.html b/docs/html/sdk/api_diff/8/changes/android.speech.RecognizerIntent.html
index e70defc..8dc9b19 100644
--- a/docs/html/sdk/api_diff/8/changes/android.speech.RecognizerIntent.html
+++ b/docs/html/sdk/api_diff/8/changes/android.speech.RecognizerIntent.html
@@ -186,7 +186,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.Engine.html b/docs/html/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.Engine.html
index 0219ce2..03947e6 100644
--- a/docs/html/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.Engine.html
+++ b/docs/html/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.Engine.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.html b/docs/html/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.html
index 8bcd351..1875069 100644
--- a/docs/html/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.html
+++ b/docs/html/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/8/changes/android.telephony.TelephonyManager.html
index f899475..cf697fb 100644
--- a/docs/html/sdk/api_diff/8/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.telephony.TelephonyManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.test.ActivityInstrumentationTestCase2.html b/docs/html/sdk/api_diff/8/changes/android.test.ActivityInstrumentationTestCase2.html
index 97023e6..f6ecd94 100644
--- a/docs/html/sdk/api_diff/8/changes/android.test.ActivityInstrumentationTestCase2.html
+++ b/docs/html/sdk/api_diff/8/changes/android.test.ActivityInstrumentationTestCase2.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.test.mock.MockContext.html b/docs/html/sdk/api_diff/8/changes/android.test.mock.MockContext.html
index d2241eb..88cb93a 100644
--- a/docs/html/sdk/api_diff/8/changes/android.test.mock.MockContext.html
+++ b/docs/html/sdk/api_diff/8/changes/android.test.mock.MockContext.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/8/changes/android.test.mock.MockPackageManager.html
index 9a90a3c..f2510d8 100644
--- a/docs/html/sdk/api_diff/8/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.test.mock.MockPackageManager.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.text.AndroidCharacter.html b/docs/html/sdk/api_diff/8/changes/android.text.AndroidCharacter.html
index 0e7788e..8899623 100644
--- a/docs/html/sdk/api_diff/8/changes/android.text.AndroidCharacter.html
+++ b/docs/html/sdk/api_diff/8/changes/android.text.AndroidCharacter.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.text.util.Rfc822Tokenizer.html b/docs/html/sdk/api_diff/8/changes/android.text.util.Rfc822Tokenizer.html
index 41cbee6..da7ee2f 100644
--- a/docs/html/sdk/api_diff/8/changes/android.text.util.Rfc822Tokenizer.html
+++ b/docs/html/sdk/api_diff/8/changes/android.text.util.Rfc822Tokenizer.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.util.EventLogTags.html b/docs/html/sdk/api_diff/8/changes/android.util.EventLogTags.html
index d0eef8a..de756b7 100644
--- a/docs/html/sdk/api_diff/8/changes/android.util.EventLogTags.html
+++ b/docs/html/sdk/api_diff/8/changes/android.util.EventLogTags.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.util.Log.html b/docs/html/sdk/api_diff/8/changes/android.util.Log.html
index f3266be..27272a4 100644
--- a/docs/html/sdk/api_diff/8/changes/android.util.Log.html
+++ b/docs/html/sdk/api_diff/8/changes/android.util.Log.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.Display.html b/docs/html/sdk/api_diff/8/changes/android.view.Display.html
index 8542008..8745821 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.Display.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.Display.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.GestureDetector.html b/docs/html/sdk/api_diff/8/changes/android.view.GestureDetector.html
index 7b7aacf..2424166 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.GestureDetector.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.GestureDetector.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.HapticFeedbackConstants.html b/docs/html/sdk/api_diff/8/changes/android.view.HapticFeedbackConstants.html
index dfb20ec..fac5334 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.HapticFeedbackConstants.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.HapticFeedbackConstants.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/8/changes/android.view.MotionEvent.html
index 568a205..7d17339 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.MotionEvent.html
@@ -217,7 +217,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.VelocityTracker.html b/docs/html/sdk/api_diff/8/changes/android.view.VelocityTracker.html
index 905da726..845be6f 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.VelocityTracker.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.VelocityTracker.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.View.html b/docs/html/sdk/api_diff/8/changes/android.view.View.html
index 9f4e648..13fba35 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.View.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/8/changes/android.view.ViewConfiguration.html
index fb06822..eec245b 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.ViewConfiguration.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.ViewConfiguration.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.ViewGroup.LayoutParams.html b/docs/html/sdk/api_diff/8/changes/android.view.ViewGroup.LayoutParams.html
index dd82f12..3793aa9 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.ViewGroup.LayoutParams.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.ViewGroup.LayoutParams.html
@@ -125,7 +125,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/8/changes/android.view.WindowManager.LayoutParams.html
index ada327e..4c9c6d6 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.WindowManager.LayoutParams.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.view.animation.Animation.html b/docs/html/sdk/api_diff/8/changes/android.view.animation.Animation.html
index e75c000..b99f3fa 100644
--- a/docs/html/sdk/api_diff/8/changes/android.view.animation.Animation.html
+++ b/docs/html/sdk/api_diff/8/changes/android.view.animation.Animation.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.webkit.CacheManager.html b/docs/html/sdk/api_diff/8/changes/android.webkit.CacheManager.html
index 3f85e2c..981cbe9 100644
--- a/docs/html/sdk/api_diff/8/changes/android.webkit.CacheManager.html
+++ b/docs/html/sdk/api_diff/8/changes/android.webkit.CacheManager.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.webkit.JsResult.html b/docs/html/sdk/api_diff/8/changes/android.webkit.JsResult.html
index a403bfb..45faadc 100644
--- a/docs/html/sdk/api_diff/8/changes/android.webkit.JsResult.html
+++ b/docs/html/sdk/api_diff/8/changes/android.webkit.JsResult.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.webkit.WebChromeClient.html b/docs/html/sdk/api_diff/8/changes/android.webkit.WebChromeClient.html
index 056f613..ddaf440 100644
--- a/docs/html/sdk/api_diff/8/changes/android.webkit.WebChromeClient.html
+++ b/docs/html/sdk/api_diff/8/changes/android.webkit.WebChromeClient.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/8/changes/android.webkit.WebSettings.html
index a4c8b8a..db9c9a2 100644
--- a/docs/html/sdk/api_diff/8/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/8/changes/android.webkit.WebSettings.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/8/changes/android.webkit.WebView.html
index 8b78a13..c7b9f2d 100644
--- a/docs/html/sdk/api_diff/8/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/8/changes/android.webkit.WebView.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.webkit.WebViewClient.html b/docs/html/sdk/api_diff/8/changes/android.webkit.WebViewClient.html
index 9ebfd5b..50e0dd2 100644
--- a/docs/html/sdk/api_diff/8/changes/android.webkit.WebViewClient.html
+++ b/docs/html/sdk/api_diff/8/changes/android.webkit.WebViewClient.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.widget.AbsListView.html b/docs/html/sdk/api_diff/8/changes/android.widget.AbsListView.html
index e3bb860..44dd852 100644
--- a/docs/html/sdk/api_diff/8/changes/android.widget.AbsListView.html
+++ b/docs/html/sdk/api_diff/8/changes/android.widget.AbsListView.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.widget.BaseExpandableListAdapter.html b/docs/html/sdk/api_diff/8/changes/android.widget.BaseExpandableListAdapter.html
index 184cfac..41b562d 100644
--- a/docs/html/sdk/api_diff/8/changes/android.widget.BaseExpandableListAdapter.html
+++ b/docs/html/sdk/api_diff/8/changes/android.widget.BaseExpandableListAdapter.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.widget.ImageView.html b/docs/html/sdk/api_diff/8/changes/android.widget.ImageView.html
index 0587c2d..2b2e4e4 100644
--- a/docs/html/sdk/api_diff/8/changes/android.widget.ImageView.html
+++ b/docs/html/sdk/api_diff/8/changes/android.widget.ImageView.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.widget.ListView.html b/docs/html/sdk/api_diff/8/changes/android.widget.ListView.html
index 1653521..fcbb480 100644
--- a/docs/html/sdk/api_diff/8/changes/android.widget.ListView.html
+++ b/docs/html/sdk/api_diff/8/changes/android.widget.ListView.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/8/changes/android.widget.RemoteViews.html
index c18470b..b5e22d1 100644
--- a/docs/html/sdk/api_diff/8/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/8/changes/android.widget.RemoteViews.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.widget.TabWidget.html b/docs/html/sdk/api_diff/8/changes/android.widget.TabWidget.html
index 5f23961..fa61a4e 100644
--- a/docs/html/sdk/api_diff/8/changes/android.widget.TabWidget.html
+++ b/docs/html/sdk/api_diff/8/changes/android.widget.TabWidget.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/android.widget.VideoView.html b/docs/html/sdk/api_diff/8/changes/android.widget.VideoView.html
index 2002f9b..ad7490f 100644
--- a/docs/html/sdk/api_diff/8/changes/android.widget.VideoView.html
+++ b/docs/html/sdk/api_diff/8/changes/android.widget.VideoView.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/changes-summary.html b/docs/html/sdk/api_diff/8/changes/changes-summary.html
index 5041182..d71a547 100644
--- a/docs/html/sdk/api_diff/8/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/8/changes/changes-summary.html
@@ -479,7 +479,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/classes_index_additions.html b/docs/html/sdk/api_diff/8/changes/classes_index_additions.html
index 4480299..3f0dfba 100644
--- a/docs/html/sdk/api_diff/8/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/8/changes/classes_index_additions.html
@@ -485,7 +485,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_android.graphics.html#YuvImage" class="hiddenlink" target="rightframe"><b>YuvImage</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/classes_index_all.html b/docs/html/sdk/api_diff/8/changes/classes_index_all.html
index c0b5a6a..36b1a1f 100644
--- a/docs/html/sdk/api_diff/8/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/8/changes/classes_index_all.html
@@ -828,7 +828,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/classes_index_changes.html b/docs/html/sdk/api_diff/8/changes/classes_index_changes.html
index 71c9736..911f86f 100644
--- a/docs/html/sdk/api_diff/8/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/8/changes/classes_index_changes.html
@@ -673,7 +673,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="dalvik.system.Zygote.html" class="hiddenlink" target="rightframe">Zygote</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/classes_index_removals.html b/docs/html/sdk/api_diff/8/changes/classes_index_removals.html
index e6da73f..af7f1d0 100644
--- a/docs/html/sdk/api_diff/8/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/8/changes/classes_index_removals.html
@@ -47,7 +47,7 @@
 <div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
 Listed as: <span style="color:#069"><strong>Added</strong></span>,  <span style="color:#069"><strike>Removed</strike></span>,  <span style="color:#069">Changed</span></font>
 </div>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/8/changes/constructors_index_additions.html
index 62a4528..b37a0b5 100644
--- a/docs/html/sdk/api_diff/8/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/8/changes/constructors_index_additions.html
@@ -71,7 +71,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.net.http.SslCertificate.html#android.net.http.SslCertificate.ctor_added(java.lang.String, java.lang.String, java.util.Date, java.util.Date)" class="hiddenlink" target="rightframe"><b>SslCertificate</b>
 (<code>String, String, Date, Date</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/constructors_index_all.html b/docs/html/sdk/api_diff/8/changes/constructors_index_all.html
index c8a68d8f..e1d4039 100644
--- a/docs/html/sdk/api_diff/8/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/8/changes/constructors_index_all.html
@@ -91,7 +91,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="javax.xml.XMLConstants.html#javax.xml.XMLConstants.ctor_removed()" class="hiddenlink" target="rightframe"><strike>XMLConstants</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/8/changes/constructors_index_changes.html
index 0f9ca3c..4bce2cc 100644
--- a/docs/html/sdk/api_diff/8/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/8/changes/constructors_index_changes.html
@@ -63,7 +63,7 @@
 (<code>String, String, String, String</code>)</A></nobr>&nbsp;constructor<br>
 <nobr><A HREF="android.net.SSLCertificateSocketFactory.html#android.net.SSLCertificateSocketFactory.ctor_changed(int)" class="hiddenlink" target="rightframe">SSLCertificateSocketFactory
 (<code>int</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/8/changes/constructors_index_removals.html
index 618fd13..77a6d0e 100644
--- a/docs/html/sdk/api_diff/8/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/8/changes/constructors_index_removals.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="javax.xml.XMLConstants.html#javax.xml.XMLConstants.ctor_removed()" class="hiddenlink" target="rightframe"><strike>XMLConstants</strike>
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/dalvik.bytecode.Opcodes.html b/docs/html/sdk/api_diff/8/changes/dalvik.bytecode.Opcodes.html
index c12ea91..a5cf9e8 100644
--- a/docs/html/sdk/api_diff/8/changes/dalvik.bytecode.Opcodes.html
+++ b/docs/html/sdk/api_diff/8/changes/dalvik.bytecode.Opcodes.html
@@ -312,7 +312,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/dalvik.system.VMDebug.html b/docs/html/sdk/api_diff/8/changes/dalvik.system.VMDebug.html
index 3bec244..28bbea9 100644
--- a/docs/html/sdk/api_diff/8/changes/dalvik.system.VMDebug.html
+++ b/docs/html/sdk/api_diff/8/changes/dalvik.system.VMDebug.html
@@ -164,7 +164,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/dalvik.system.Zygote.html b/docs/html/sdk/api_diff/8/changes/dalvik.system.Zygote.html
index 3565aedf..e8cbc8c 100644
--- a/docs/html/sdk/api_diff/8/changes/dalvik.system.Zygote.html
+++ b/docs/html/sdk/api_diff/8/changes/dalvik.system.Zygote.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/fields_index_additions.html b/docs/html/sdk/api_diff/8/changes/fields_index_additions.html
index c7b9eba..c715ef07 100644
--- a/docs/html/sdk/api_diff/8/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/8/changes/fields_index_additions.html
@@ -921,7 +921,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.R.attr.html#android.R.attr.webTextViewStyle" class="hiddenlink" target="rightframe">webTextViewStyle</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/fields_index_all.html b/docs/html/sdk/api_diff/8/changes/fields_index_all.html
index b34f9aa..7039983 100644
--- a/docs/html/sdk/api_diff/8/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/8/changes/fields_index_all.html
@@ -1124,7 +1124,7 @@
 </nobr><br>
 <nobr><A HREF="android.graphics.PixelFormat.html#android.graphics.PixelFormat.YCbCr_422_SP" class="hiddenlink" target="rightframe">YCbCr_422_SP</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/fields_index_changes.html b/docs/html/sdk/api_diff/8/changes/fields_index_changes.html
index b8ca063..a000145 100644
--- a/docs/html/sdk/api_diff/8/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/8/changes/fields_index_changes.html
@@ -223,7 +223,7 @@
 </nobr><br>
 <nobr><A HREF="android.graphics.PixelFormat.html#android.graphics.PixelFormat.YCbCr_422_SP" class="hiddenlink" target="rightframe">YCbCr_422_SP</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/fields_index_removals.html b/docs/html/sdk/api_diff/8/changes/fields_index_removals.html
index b7b9304..024fe87 100644
--- a/docs/html/sdk/api_diff/8/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/8/changes/fields_index_removals.html
@@ -123,7 +123,7 @@
 </nobr><br>
 <nobr><A HREF="android.content.pm.PackageManager.html#android.content.pm.PackageManager.PKG_INSTALL_INCOMPLETE" class="hiddenlink" target="rightframe"><strike>PKG_INSTALL_INCOMPLETE</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/java.net.DatagramSocketImpl.html b/docs/html/sdk/api_diff/8/changes/java.net.DatagramSocketImpl.html
index f2797c2..6c88203 100644
--- a/docs/html/sdk/api_diff/8/changes/java.net.DatagramSocketImpl.html
+++ b/docs/html/sdk/api_diff/8/changes/java.net.DatagramSocketImpl.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/java.nio.charset.Charset.html b/docs/html/sdk/api_diff/8/changes/java.nio.charset.Charset.html
index 00459bb..c38cae3 100644
--- a/docs/html/sdk/api_diff/8/changes/java.nio.charset.Charset.html
+++ b/docs/html/sdk/api_diff/8/changes/java.nio.charset.Charset.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/java.util.ArrayList.html b/docs/html/sdk/api_diff/8/changes/java.util.ArrayList.html
index 57a6f01..59e8c1d 100644
--- a/docs/html/sdk/api_diff/8/changes/java.util.ArrayList.html
+++ b/docs/html/sdk/api_diff/8/changes/java.util.ArrayList.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/java.util.HashMap.html b/docs/html/sdk/api_diff/8/changes/java.util.HashMap.html
index f80f209..95656b6 100644
--- a/docs/html/sdk/api_diff/8/changes/java.util.HashMap.html
+++ b/docs/html/sdk/api_diff/8/changes/java.util.HashMap.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/java.util.regex.Matcher.html b/docs/html/sdk/api_diff/8/changes/java.util.regex.Matcher.html
index cde54ef..c8764bd 100644
--- a/docs/html/sdk/api_diff/8/changes/java.util.regex.Matcher.html
+++ b/docs/html/sdk/api_diff/8/changes/java.util.regex.Matcher.html
@@ -121,7 +121,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/java.util.regex.Pattern.html b/docs/html/sdk/api_diff/8/changes/java.util.regex.Pattern.html
index 04ccbc1..f1cc6de 100644
--- a/docs/html/sdk/api_diff/8/changes/java.util.regex.Pattern.html
+++ b/docs/html/sdk/api_diff/8/changes/java.util.regex.Pattern.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/javax.xml.XMLConstants.html b/docs/html/sdk/api_diff/8/changes/javax.xml.XMLConstants.html
index 5b75dcc..95d97c8 100644
--- a/docs/html/sdk/api_diff/8/changes/javax.xml.XMLConstants.html
+++ b/docs/html/sdk/api_diff/8/changes/javax.xml.XMLConstants.html
@@ -109,7 +109,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilder.html b/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilder.html
index 3b0320e..da7003a 100644
--- a/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilder.html
+++ b/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilder.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilderFactory.html b/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilderFactory.html
index db4f0a3..f9adcd9 100644
--- a/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilderFactory.html
+++ b/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilderFactory.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.SAXParser.html b/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.SAXParser.html
index 48cb76d..15cff16 100644
--- a/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.SAXParser.html
+++ b/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.SAXParser.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.SAXParserFactory.html b/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.SAXParserFactory.html
index f36f63f..2dfe1ad 100644
--- a/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.SAXParserFactory.html
+++ b/docs/html/sdk/api_diff/8/changes/javax.xml.parsers.SAXParserFactory.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/jdiff_help.html b/docs/html/sdk/api_diff/8/changes/jdiff_help.html
index 5dfacec..07748dd9 100644
--- a/docs/html/sdk/api_diff/8/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/8/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/8/changes/jdiff_statistics.html
index d0eb78b..40d2a0c 100644
--- a/docs/html/sdk/api_diff/8/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/8/changes/jdiff_statistics.html
@@ -950,7 +950,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/8/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/8/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/8/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/methods_index_additions.html b/docs/html/sdk/api_diff/8/changes/methods_index_additions.html
index 822c43b..5f43903 100644
--- a/docs/html/sdk/api_diff/8/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/8/changes/methods_index_additions.html
@@ -902,7 +902,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.util.Log.html#android.util.Log.wtf_added(java.lang.String, java.lang.Throwable)" class="hiddenlink" target="rightframe">type&nbsp;<b>
 (<code>String, Throwable</code>)</b>&nbsp;in&nbsp;android.util.Log
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/methods_index_all.html b/docs/html/sdk/api_diff/8/changes/methods_index_all.html
index 91d79f8..a4e7e6a 100644
--- a/docs/html/sdk/api_diff/8/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/8/changes/methods_index_all.html
@@ -1043,7 +1043,7 @@
 &nbsp;&nbsp;<nobr><A HREF="android.util.Log.html#android.util.Log.wtf_added(java.lang.String, java.lang.Throwable)" class="hiddenlink" target="rightframe">type&nbsp;<b>
 (<code>String, Throwable</code>)</b>&nbsp;in&nbsp;android.util.Log
 </A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/methods_index_changes.html b/docs/html/sdk/api_diff/8/changes/methods_index_changes.html
index b7268b7..0c2c591 100644
--- a/docs/html/sdk/api_diff/8/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/8/changes/methods_index_changes.html
@@ -289,7 +289,7 @@
 ()</A></nobr><br>
 <nobr><A HREF="dalvik.system.VMDebug.html#dalvik.system.VMDebug.startMethodTracing_changed()" class="hiddenlink" target="rightframe">startMethodTracing
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/methods_index_removals.html b/docs/html/sdk/api_diff/8/changes/methods_index_removals.html
index 5e7e067e..84d57c1 100644
--- a/docs/html/sdk/api_diff/8/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/8/changes/methods_index_removals.html
@@ -71,7 +71,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="java.net.DatagramSocketImpl.html#java.net.DatagramSocketImpl.setOption_removed(int, java.lang.Object)" class="hiddenlink" target="rightframe"><strike>setOption</strike>
 (<code>int, Object</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Attr.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Attr.html
index 860375b..b0d60c3 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Attr.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Attr.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.DOMException.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.DOMException.html
index c7e82fb..bbebfc3 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.DOMException.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.DOMException.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.DOMImplementation.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.DOMImplementation.html
index 4c498fa..53d8c58 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.DOMImplementation.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.DOMImplementation.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Document.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Document.html
index 8eaf593..5f1318b 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Document.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Document.html
@@ -199,7 +199,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Element.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Element.html
index bef9622..99292d3 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Element.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Element.html
@@ -177,7 +177,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Entity.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Entity.html
index 07cc42c..801bb6c 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Entity.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Entity.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.NamedNodeMap.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.NamedNodeMap.html
index 08662fd..c88863d 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.NamedNodeMap.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.NamedNodeMap.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Node.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Node.html
index 9c9e968..86bdd0b 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Node.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Node.html
@@ -235,7 +235,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Text.html b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Text.html
index eb8a239..3c2da5c 100644
--- a/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Text.html
+++ b/docs/html/sdk/api_diff/8/changes/org.w3c.dom.Text.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/packages_index_additions.html b/docs/html/sdk/api_diff/8/changes/packages_index_additions.html
index 80069e3..d0aa4d54 100644
--- a/docs/html/sdk/api_diff/8/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/8/changes/packages_index_additions.html
@@ -63,7 +63,7 @@
 <A HREF="changes-summary.html#javax.xml.xpath" class="hiddenlink" target="rightframe"><b>javax.xml.xpath</b></A><br>
 <A NAME="O"></A>
 <A HREF="changes-summary.html#org.w3c.dom.ls" class="hiddenlink" target="rightframe"><b>org.w3c.dom.ls</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/packages_index_all.html b/docs/html/sdk/api_diff/8/changes/packages_index_all.html
index 49852d2..2228d67 100644
--- a/docs/html/sdk/api_diff/8/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/8/changes/packages_index_all.html
@@ -104,7 +104,7 @@
 <A NAME="O"></A>
 <A HREF="pkg_org.w3c.dom.html" class="hiddenlink" target="rightframe">org.w3c.dom</A><br>
 <A HREF="changes-summary.html#org.w3c.dom.ls" class="hiddenlink" target="rightframe"><b>org.w3c.dom.ls</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/packages_index_changes.html b/docs/html/sdk/api_diff/8/changes/packages_index_changes.html
index 152b182..d2ea605 100644
--- a/docs/html/sdk/api_diff/8/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/8/changes/packages_index_changes.html
@@ -93,7 +93,7 @@
 <A HREF="pkg_javax.xml.parsers.html" class="hiddenlink" target="rightframe">javax.xml.parsers</A><br>
 <A NAME="O"></A>
 <A HREF="pkg_org.w3c.dom.html" class="hiddenlink" target="rightframe">org.w3c.dom</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/packages_index_removals.html b/docs/html/sdk/api_diff/8/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/8/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/8/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.accounts.html b/docs/html/sdk/api_diff/8/changes/pkg_android.accounts.html
index 7f2c3e0..daa6695e 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.accounts.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.accounts.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.app.html b/docs/html/sdk/api_diff/8/changes/pkg_android.app.html
index 892b454..7283f12 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.app.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.content.html b/docs/html/sdk/api_diff/8/changes/pkg_android.content.html
index d0a8e32..2e47ded 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.content.html
@@ -197,7 +197,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/8/changes/pkg_android.content.pm.html
index 29f6c7a..1499a8a 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.content.pm.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/8/changes/pkg_android.content.res.html
index 055d42a..aec6606 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.content.res.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.database.html b/docs/html/sdk/api_diff/8/changes/pkg_android.database.html
index dece819..0c68c82 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.database.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.database.sqlite.html b/docs/html/sdk/api_diff/8/changes/pkg_android.database.sqlite.html
index 6f0d2ba..ca349da 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.database.sqlite.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.database.sqlite.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.gesture.html b/docs/html/sdk/api_diff/8/changes/pkg_android.gesture.html
index 28ec9d1..93665ec 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.gesture.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.gesture.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/8/changes/pkg_android.graphics.html
index aafb0e0..a4a95d3 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.graphics.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/8/changes/pkg_android.hardware.html
index 13d1c3a..7edee93 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.hardware.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.html b/docs/html/sdk/api_diff/8/changes/pkg_android.html
index c100283..cf8d090 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.location.html b/docs/html/sdk/api_diff/8/changes/pkg_android.location.html
index a4244d2..4f1df5f 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.location.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.location.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.media.html b/docs/html/sdk/api_diff/8/changes/pkg_android.media.html
index 4289206..197a647 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.media.html
@@ -190,7 +190,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.net.html b/docs/html/sdk/api_diff/8/changes/pkg_android.net.html
index b771a2b..bf5fb00 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.net.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.net.http.html b/docs/html/sdk/api_diff/8/changes/pkg_android.net.http.html
index 5b9f5c8..6f812e1 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.net.http.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.net.http.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/8/changes/pkg_android.opengl.html
index 1bea6d9..658f145 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.opengl.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.os.html b/docs/html/sdk/api_diff/8/changes/pkg_android.os.html
index cf3fc7d..d650c1d 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.os.html
@@ -176,7 +176,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/8/changes/pkg_android.provider.html
index 06db000..dcb1d53 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.provider.html
@@ -196,7 +196,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.speech.html b/docs/html/sdk/api_diff/8/changes/pkg_android.speech.html
index 0ae2978..0b6a0b1 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.speech.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.speech.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.speech.tts.html b/docs/html/sdk/api_diff/8/changes/pkg_android.speech.tts.html
index d8368a2..f5b5ff9 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.speech.tts.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.speech.tts.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/8/changes/pkg_android.telephony.html
index 718df76..4d995f1 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.telephony.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.test.html b/docs/html/sdk/api_diff/8/changes/pkg_android.test.html
index df8b98c..4bf67c1 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.test.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.test.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/8/changes/pkg_android.test.mock.html
index 344281b..3963b4b 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.test.mock.html
@@ -134,7 +134,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.text.html b/docs/html/sdk/api_diff/8/changes/pkg_android.text.html
index ae9e9a7..9820705 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.text.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.text.style.html b/docs/html/sdk/api_diff/8/changes/pkg_android.text.style.html
index 6332233..bf3cea6 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.text.style.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.text.style.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.text.util.html b/docs/html/sdk/api_diff/8/changes/pkg_android.text.util.html
index 875efa6..5734e37 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.text.util.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.text.util.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.util.html b/docs/html/sdk/api_diff/8/changes/pkg_android.util.html
index 7803591..44f21d5 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.util.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.view.animation.html b/docs/html/sdk/api_diff/8/changes/pkg_android.view.animation.html
index 559c118..2063b02 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.view.animation.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.view.animation.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.view.html b/docs/html/sdk/api_diff/8/changes/pkg_android.view.html
index cb5401f..a9acc5a 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.view.html
@@ -190,7 +190,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/8/changes/pkg_android.webkit.html
index 038f1451..25dae5f 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.webkit.html
@@ -169,7 +169,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/8/changes/pkg_android.widget.html
index bfbf096..9239e4f 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_android.widget.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_dalvik.bytecode.html b/docs/html/sdk/api_diff/8/changes/pkg_dalvik.bytecode.html
index 943ec6b..639d695 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_dalvik.bytecode.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_dalvik.bytecode.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_dalvik.system.html b/docs/html/sdk/api_diff/8/changes/pkg_dalvik.system.html
index 14aff19..28726b6 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_dalvik.system.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_dalvik.system.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_java.net.html b/docs/html/sdk/api_diff/8/changes/pkg_java.net.html
index 510e838..3d7d0ee 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_java.net.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_java.net.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_java.nio.charset.html b/docs/html/sdk/api_diff/8/changes/pkg_java.nio.charset.html
index e83a1be..d7ae97e 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_java.nio.charset.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_java.nio.charset.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_java.util.html b/docs/html/sdk/api_diff/8/changes/pkg_java.util.html
index 0d13408..eca4073 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_java.util.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_java.util.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_java.util.regex.html b/docs/html/sdk/api_diff/8/changes/pkg_java.util.regex.html
index 5227e54..d188baa 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_java.util.regex.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_java.util.regex.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_javax.xml.html b/docs/html/sdk/api_diff/8/changes/pkg_javax.xml.html
index f0168b6..b874c1a 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_javax.xml.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_javax.xml.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_javax.xml.parsers.html b/docs/html/sdk/api_diff/8/changes/pkg_javax.xml.parsers.html
index 9ddbcbb..c0adc80 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_javax.xml.parsers.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_javax.xml.parsers.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/8/changes/pkg_org.w3c.dom.html b/docs/html/sdk/api_diff/8/changes/pkg_org.w3c.dom.html
index eca49bc0..253b928 100644
--- a/docs/html/sdk/api_diff/8/changes/pkg_org.w3c.dom.html
+++ b/docs/html/sdk/api_diff/8/changes/pkg_org.w3c.dom.html
@@ -239,7 +239,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/9/changes/alldiffs_index_additions.html
index c959256..0be157d 100644
--- a/docs/html/sdk/api_diff/9/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/9/changes/alldiffs_index_additions.html
@@ -3283,7 +3283,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_java.util.zip.html#ZipError" class="hiddenlink" target="rightframe"><b>ZipError</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/9/changes/alldiffs_index_all.html
index 9e779b1..287908e 100644
--- a/docs/html/sdk/api_diff/9/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/9/changes/alldiffs_index_all.html
@@ -4068,7 +4068,7 @@
 <A HREF="pkg_java.util.zip.html#ZipError" class="hiddenlink" target="rightframe"><b>ZipError</b></A><br>
 <!-- Class Zygote -->
 <A HREF="pkg_dalvik.system.html#Zygote" class="hiddenlink" target="rightframe"><strike>Zygote</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/9/changes/alldiffs_index_changes.html
index 09ebd79..fd6792f 100644
--- a/docs/html/sdk/api_diff/9/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/9/changes/alldiffs_index_changes.html
@@ -1184,7 +1184,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="javax.security.auth.x500.X500Principal.html" class="hiddenlink" target="rightframe">X500Principal</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/9/changes/alldiffs_index_removals.html
index 6d454fc..6a988e7 100644
--- a/docs/html/sdk/api_diff/9/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/9/changes/alldiffs_index_removals.html
@@ -427,7 +427,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_dalvik.system.html#Zygote" class="hiddenlink" target="rightframe"><strike>Zygote</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/9/changes/android.Manifest.permission.html
index 70283e4..89a9af0 100644
--- a/docs/html/sdk/api_diff/9/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/9/changes/android.Manifest.permission.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.R.attr.html b/docs/html/sdk/api_diff/9/changes/android.R.attr.html
index 3d48dfc..2de5a9b 100644
--- a/docs/html/sdk/api_diff/9/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/9/changes/android.R.attr.html
@@ -185,7 +185,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.R.drawable.html b/docs/html/sdk/api_diff/9/changes/android.R.drawable.html
index e3673ad..c98ead9 100644
--- a/docs/html/sdk/api_diff/9/changes/android.R.drawable.html
+++ b/docs/html/sdk/api_diff/9/changes/android.R.drawable.html
@@ -196,7 +196,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.R.style.html b/docs/html/sdk/api_diff/9/changes/android.R.style.html
index 5ca5763..1d50812 100644
--- a/docs/html/sdk/api_diff/9/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/9/changes/android.R.style.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.app.Activity.html b/docs/html/sdk/api_diff/9/changes/android.app.Activity.html
index 78d77e0..6b9893f 100644
--- a/docs/html/sdk/api_diff/9/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/9/changes/android.app.Activity.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.app.ActivityManager.RunningAppProcessInfo.html b/docs/html/sdk/api_diff/9/changes/android.app.ActivityManager.RunningAppProcessInfo.html
index 1e24fad..e3e1701 100644
--- a/docs/html/sdk/api_diff/9/changes/android.app.ActivityManager.RunningAppProcessInfo.html
+++ b/docs/html/sdk/api_diff/9/changes/android.app.ActivityManager.RunningAppProcessInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.app.Notification.html b/docs/html/sdk/api_diff/9/changes/android.app.Notification.html
index 91af5a4..ff611d4 100644
--- a/docs/html/sdk/api_diff/9/changes/android.app.Notification.html
+++ b/docs/html/sdk/api_diff/9/changes/android.app.Notification.html
@@ -128,7 +128,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.app.admin.DevicePolicyManager.html b/docs/html/sdk/api_diff/9/changes/android.app.admin.DevicePolicyManager.html
index efa9a6f..0ceaf15 100644
--- a/docs/html/sdk/api_diff/9/changes/android.app.admin.DevicePolicyManager.html
+++ b/docs/html/sdk/api_diff/9/changes/android.app.admin.DevicePolicyManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.AbstractThreadedSyncAdapter.html b/docs/html/sdk/api_diff/9/changes/android.content.AbstractThreadedSyncAdapter.html
index 87b41032..eb4a7a3 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.AbstractThreadedSyncAdapter.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.AbstractThreadedSyncAdapter.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.Context.html b/docs/html/sdk/api_diff/9/changes/android.content.Context.html
index a6e0f1c..755cd59 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.Context.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.IntentSender.html b/docs/html/sdk/api_diff/9/changes/android.content.IntentSender.html
index 73d4a54..ea341f3 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.IntentSender.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.IntentSender.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.SharedPreferences.Editor.html b/docs/html/sdk/api_diff/9/changes/android.content.SharedPreferences.Editor.html
index 8c58b8e..83b9855 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.SharedPreferences.Editor.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.SharedPreferences.Editor.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.pm.ActivityInfo.html b/docs/html/sdk/api_diff/9/changes/android.content.pm.ActivityInfo.html
index 0ffcfc1e..dddd153 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.pm.ActivityInfo.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.pm.ActivityInfo.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/9/changes/android.content.pm.ApplicationInfo.html
index cfb51b0..3d492a0 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.pm.ApplicationInfo.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageInfo.html b/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageInfo.html
index 32f27d9..dc421c1 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageInfo.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageInfo.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageItemInfo.html b/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageItemInfo.html
index f01fcce..e50c3e5 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageItemInfo.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageItemInfo.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageManager.html
index f6e3ad4..26ce106 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.pm.PackageManager.html
@@ -200,7 +200,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/9/changes/android.content.res.Configuration.html
index cc7c38f..38e26d6 100644
--- a/docs/html/sdk/api_diff/9/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/9/changes/android.content.res.Configuration.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.graphics.ImageFormat.html b/docs/html/sdk/api_diff/9/changes/android.graphics.ImageFormat.html
index a65e27a..178eabe 100644
--- a/docs/html/sdk/api_diff/9/changes/android.graphics.ImageFormat.html
+++ b/docs/html/sdk/api_diff/9/changes/android.graphics.ImageFormat.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.hardware.Camera.Parameters.html b/docs/html/sdk/api_diff/9/changes/android.hardware.Camera.Parameters.html
index 6a4ebe3..4be8276 100644
--- a/docs/html/sdk/api_diff/9/changes/android.hardware.Camera.Parameters.html
+++ b/docs/html/sdk/api_diff/9/changes/android.hardware.Camera.Parameters.html
@@ -217,7 +217,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/9/changes/android.hardware.Camera.html
index 915c1e9..8ee07c4 100644
--- a/docs/html/sdk/api_diff/9/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/9/changes/android.hardware.Camera.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.hardware.Sensor.html b/docs/html/sdk/api_diff/9/changes/android.hardware.Sensor.html
index 62f2848..e808d197 100644
--- a/docs/html/sdk/api_diff/9/changes/android.hardware.Sensor.html
+++ b/docs/html/sdk/api_diff/9/changes/android.hardware.Sensor.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.hardware.SensorManager.html b/docs/html/sdk/api_diff/9/changes/android.hardware.SensorManager.html
index ca414bc..7d6c19b 100644
--- a/docs/html/sdk/api_diff/9/changes/android.hardware.SensorManager.html
+++ b/docs/html/sdk/api_diff/9/changes/android.hardware.SensorManager.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.location.Criteria.html b/docs/html/sdk/api_diff/9/changes/android.location.Criteria.html
index 25b67c0..38f0aef 100644
--- a/docs/html/sdk/api_diff/9/changes/android.location.Criteria.html
+++ b/docs/html/sdk/api_diff/9/changes/android.location.Criteria.html
@@ -186,7 +186,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.location.Geocoder.html b/docs/html/sdk/api_diff/9/changes/android.location.Geocoder.html
index 19e62dd..5fa79bf 100644
--- a/docs/html/sdk/api_diff/9/changes/android.location.Geocoder.html
+++ b/docs/html/sdk/api_diff/9/changes/android.location.Geocoder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.location.LocationManager.html b/docs/html/sdk/api_diff/9/changes/android.location.LocationManager.html
index b8f7b99..44868f3 100644
--- a/docs/html/sdk/api_diff/9/changes/android.location.LocationManager.html
+++ b/docs/html/sdk/api_diff/9/changes/android.location.LocationManager.html
@@ -158,7 +158,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.media.AudioTrack.html b/docs/html/sdk/api_diff/9/changes/android.media.AudioTrack.html
index a577060..1405ac2 100644
--- a/docs/html/sdk/api_diff/9/changes/android.media.AudioTrack.html
+++ b/docs/html/sdk/api_diff/9/changes/android.media.AudioTrack.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.media.CamcorderProfile.html b/docs/html/sdk/api_diff/9/changes/android.media.CamcorderProfile.html
index 46f3297..8e732dc 100644
--- a/docs/html/sdk/api_diff/9/changes/android.media.CamcorderProfile.html
+++ b/docs/html/sdk/api_diff/9/changes/android.media.CamcorderProfile.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.media.CameraProfile.html b/docs/html/sdk/api_diff/9/changes/android.media.CameraProfile.html
index 6f6d359..c286ebe 100644
--- a/docs/html/sdk/api_diff/9/changes/android.media.CameraProfile.html
+++ b/docs/html/sdk/api_diff/9/changes/android.media.CameraProfile.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.media.ExifInterface.html b/docs/html/sdk/api_diff/9/changes/android.media.ExifInterface.html
index 7763832..a23c693 100644
--- a/docs/html/sdk/api_diff/9/changes/android.media.ExifInterface.html
+++ b/docs/html/sdk/api_diff/9/changes/android.media.ExifInterface.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.media.MediaPlayer.html b/docs/html/sdk/api_diff/9/changes/android.media.MediaPlayer.html
index f67f0ff..378527e 100644
--- a/docs/html/sdk/api_diff/9/changes/android.media.MediaPlayer.html
+++ b/docs/html/sdk/api_diff/9/changes/android.media.MediaPlayer.html
@@ -151,7 +151,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/9/changes/android.media.MediaRecorder.html
index d7932ce..ee7e307 100644
--- a/docs/html/sdk/api_diff/9/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/9/changes/android.media.MediaRecorder.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.net.wifi.WifiManager.WifiLock.html b/docs/html/sdk/api_diff/9/changes/android.net.wifi.WifiManager.WifiLock.html
index 2422b0e..b689d7e 100644
--- a/docs/html/sdk/api_diff/9/changes/android.net.wifi.WifiManager.WifiLock.html
+++ b/docs/html/sdk/api_diff/9/changes/android.net.wifi.WifiManager.WifiLock.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.opengl.GLES20.html b/docs/html/sdk/api_diff/9/changes/android.opengl.GLES20.html
index 54e205a..b393657 100644
--- a/docs/html/sdk/api_diff/9/changes/android.opengl.GLES20.html
+++ b/docs/html/sdk/api_diff/9/changes/android.opengl.GLES20.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/9/changes/android.os.Build.VERSION_CODES.html
index 35865f8..3b49e34 100644
--- a/docs/html/sdk/api_diff/9/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/9/changes/android.os.Build.VERSION_CODES.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.os.Build.html b/docs/html/sdk/api_diff/9/changes/android.os.Build.html
index c6a9257..e5d584a 100644
--- a/docs/html/sdk/api_diff/9/changes/android.os.Build.html
+++ b/docs/html/sdk/api_diff/9/changes/android.os.Build.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.os.DropBoxManager.Entry.html b/docs/html/sdk/api_diff/9/changes/android.os.DropBoxManager.Entry.html
index 0120ed3..199b93a 100644
--- a/docs/html/sdk/api_diff/9/changes/android.os.DropBoxManager.Entry.html
+++ b/docs/html/sdk/api_diff/9/changes/android.os.DropBoxManager.Entry.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.os.Environment.html b/docs/html/sdk/api_diff/9/changes/android.os.Environment.html
index 7fe9b068..94164a2 100644
--- a/docs/html/sdk/api_diff/9/changes/android.os.Environment.html
+++ b/docs/html/sdk/api_diff/9/changes/android.os.Environment.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.os.ParcelFileDescriptor.html b/docs/html/sdk/api_diff/9/changes/android.os.ParcelFileDescriptor.html
index 65a161e..61b8b33 100644
--- a/docs/html/sdk/api_diff/9/changes/android.os.ParcelFileDescriptor.html
+++ b/docs/html/sdk/api_diff/9/changes/android.os.ParcelFileDescriptor.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.os.PowerManager.WakeLock.html b/docs/html/sdk/api_diff/9/changes/android.os.PowerManager.WakeLock.html
index 8bb70b2..5fa793c 100644
--- a/docs/html/sdk/api_diff/9/changes/android.os.PowerManager.WakeLock.html
+++ b/docs/html/sdk/api_diff/9/changes/android.os.PowerManager.WakeLock.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.provider.ContactsContract.CommonDataKinds.Nickname.html b/docs/html/sdk/api_diff/9/changes/android.provider.ContactsContract.CommonDataKinds.Nickname.html
index ca50ebe..7745d4c 100644
--- a/docs/html/sdk/api_diff/9/changes/android.provider.ContactsContract.CommonDataKinds.Nickname.html
+++ b/docs/html/sdk/api_diff/9/changes/android.provider.ContactsContract.CommonDataKinds.Nickname.html
@@ -125,7 +125,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.provider.MediaStore.html b/docs/html/sdk/api_diff/9/changes/android.provider.MediaStore.html
index 4bb64ce..17f487f 100644
--- a/docs/html/sdk/api_diff/9/changes/android.provider.MediaStore.html
+++ b/docs/html/sdk/api_diff/9/changes/android.provider.MediaStore.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/9/changes/android.provider.Settings.html
index 775c5bd..d71d346 100644
--- a/docs/html/sdk/api_diff/9/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/9/changes/android.provider.Settings.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.service.wallpaper.WallpaperService.Engine.html b/docs/html/sdk/api_diff/9/changes/android.service.wallpaper.WallpaperService.Engine.html
index aa8316d..5f75e93 100644
--- a/docs/html/sdk/api_diff/9/changes/android.service.wallpaper.WallpaperService.Engine.html
+++ b/docs/html/sdk/api_diff/9/changes/android.service.wallpaper.WallpaperService.Engine.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/9/changes/android.telephony.TelephonyManager.html
index ccad409..9315b81 100644
--- a/docs/html/sdk/api_diff/9/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/9/changes/android.telephony.TelephonyManager.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.telephony.gsm.GsmCellLocation.html b/docs/html/sdk/api_diff/9/changes/android.telephony.gsm.GsmCellLocation.html
index 525cc78..67cc36a 100644
--- a/docs/html/sdk/api_diff/9/changes/android.telephony.gsm.GsmCellLocation.html
+++ b/docs/html/sdk/api_diff/9/changes/android.telephony.gsm.GsmCellLocation.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/9/changes/android.test.mock.MockPackageManager.html
index 71c9ab7..2c674ef 100644
--- a/docs/html/sdk/api_diff/9/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/9/changes/android.test.mock.MockPackageManager.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.text.format.DateUtils.html b/docs/html/sdk/api_diff/9/changes/android.text.format.DateUtils.html
index dd8efaa..c48282d 100644
--- a/docs/html/sdk/api_diff/9/changes/android.text.format.DateUtils.html
+++ b/docs/html/sdk/api_diff/9/changes/android.text.format.DateUtils.html
@@ -125,7 +125,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.util.DisplayMetrics.html b/docs/html/sdk/api_diff/9/changes/android.util.DisplayMetrics.html
index 9e55310..8e7855c 100644
--- a/docs/html/sdk/api_diff/9/changes/android.util.DisplayMetrics.html
+++ b/docs/html/sdk/api_diff/9/changes/android.util.DisplayMetrics.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/9/changes/android.view.KeyEvent.html
index e334021..69b9920 100644
--- a/docs/html/sdk/api_diff/9/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/9/changes/android.view.KeyEvent.html
@@ -278,7 +278,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/9/changes/android.view.MotionEvent.html
index ab8d209..47c5ae6 100644
--- a/docs/html/sdk/api_diff/9/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/9/changes/android.view.MotionEvent.html
@@ -352,7 +352,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.view.View.html b/docs/html/sdk/api_diff/9/changes/android.view.View.html
index e9c299b..3bd408f 100644
--- a/docs/html/sdk/api_diff/9/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/9/changes/android.view.View.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/9/changes/android.view.ViewConfiguration.html
index 1f94737..013052a 100644
--- a/docs/html/sdk/api_diff/9/changes/android.view.ViewConfiguration.html
+++ b/docs/html/sdk/api_diff/9/changes/android.view.ViewConfiguration.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.view.Window.html b/docs/html/sdk/api_diff/9/changes/android.view.Window.html
index 4cd2943..05849c3 100644
--- a/docs/html/sdk/api_diff/9/changes/android.view.Window.html
+++ b/docs/html/sdk/api_diff/9/changes/android.view.Window.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.BaseInputConnection.html b/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.BaseInputConnection.html
index ed0154b..7c802e8 100644
--- a/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.BaseInputConnection.html
+++ b/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.BaseInputConnection.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.InputConnection.html b/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.InputConnection.html
index 17c8b16..99f9236 100644
--- a/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.InputConnection.html
+++ b/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.InputConnection.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.InputConnectionWrapper.html b/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.InputConnectionWrapper.html
index 4fbec13..212717f 100644
--- a/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.InputConnectionWrapper.html
+++ b/docs/html/sdk/api_diff/9/changes/android.view.inputmethod.InputConnectionWrapper.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/9/changes/android.webkit.WebSettings.html
index 5270329..5921045 100644
--- a/docs/html/sdk/api_diff/9/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/9/changes/android.webkit.WebSettings.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.widget.ListView.html b/docs/html/sdk/api_diff/9/changes/android.widget.ListView.html
index e3fe75a..8f235ed 100644
--- a/docs/html/sdk/api_diff/9/changes/android.widget.ListView.html
+++ b/docs/html/sdk/api_diff/9/changes/android.widget.ListView.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/9/changes/android.widget.RemoteViews.html
index 2940f16..f857ff0 100644
--- a/docs/html/sdk/api_diff/9/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/9/changes/android.widget.RemoteViews.html
@@ -113,7 +113,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/changes-summary.html b/docs/html/sdk/api_diff/9/changes/changes-summary.html
index 4bccfe5..f1264a6 100644
--- a/docs/html/sdk/api_diff/9/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/9/changes/changes-summary.html
@@ -500,7 +500,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/classes_index_additions.html b/docs/html/sdk/api_diff/9/changes/classes_index_additions.html
index cb2edff..afd7536 100644
--- a/docs/html/sdk/api_diff/9/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/9/changes/classes_index_additions.html
@@ -396,7 +396,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_java.util.zip.html#ZipError" class="hiddenlink" target="rightframe"><b>ZipError</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/classes_index_all.html b/docs/html/sdk/api_diff/9/changes/classes_index_all.html
index 22137dc..4c795c3f 100644
--- a/docs/html/sdk/api_diff/9/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/9/changes/classes_index_all.html
@@ -899,7 +899,7 @@
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_java.util.zip.html#ZipError" class="hiddenlink" target="rightframe"><b>ZipError</b></A><br>
 <A HREF="pkg_dalvik.system.html#Zygote" class="hiddenlink" target="rightframe"><strike>Zygote</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/classes_index_changes.html b/docs/html/sdk/api_diff/9/changes/classes_index_changes.html
index 9446527..b84ff57 100644
--- a/docs/html/sdk/api_diff/9/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/9/changes/classes_index_changes.html
@@ -763,7 +763,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="javax.security.auth.x500.X500Principal.html" class="hiddenlink" target="rightframe">X500Principal</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/classes_index_removals.html b/docs/html/sdk/api_diff/9/changes/classes_index_removals.html
index 1cc22e1..c8696fc 100644
--- a/docs/html/sdk/api_diff/9/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/9/changes/classes_index_removals.html
@@ -110,7 +110,7 @@
  <a href="#topheader"><font size="-2">TOP</font></a>
 <p><div style="line-height:1.5em;color:black">
 <A HREF="pkg_dalvik.system.html#Zygote" class="hiddenlink" target="rightframe"><strike>Zygote</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/9/changes/constructors_index_additions.html
index 122442e..b369083 100644
--- a/docs/html/sdk/api_diff/9/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/9/changes/constructors_index_additions.html
@@ -220,7 +220,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="javax.security.auth.x500.X500Principal.html#javax.security.auth.x500.X500Principal.ctor_added(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe"><b>X500Principal</b>
 (<code>String, Map&lt;String, String&gt;</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/constructors_index_all.html b/docs/html/sdk/api_diff/9/changes/constructors_index_all.html
index 80d83ea..b0843be 100644
--- a/docs/html/sdk/api_diff/9/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/9/changes/constructors_index_all.html
@@ -273,7 +273,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="javax.security.auth.x500.X500Principal.html#javax.security.auth.x500.X500Principal.ctor_added(java.lang.String, java.util.Map<java.lang.String, java.lang.String>)" class="hiddenlink" target="rightframe"><b>X500Principal</b>
 (<code>String, Map&lt;String, String&gt;</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/9/changes/constructors_index_changes.html
index 376f692..646c1a8 100644
--- a/docs/html/sdk/api_diff/9/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/9/changes/constructors_index_changes.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="java.text.NumberFormat.html#java.text.NumberFormat.ctor_changed()" class="hiddenlink" target="rightframe">NumberFormat
 ()</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/9/changes/constructors_index_removals.html
index d5c6a02d..d1a4444 100644
--- a/docs/html/sdk/api_diff/9/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/9/changes/constructors_index_removals.html
@@ -53,7 +53,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="javax.net.ssl.KeyStoreBuilderParameters.html#javax.net.ssl.KeyStoreBuilderParameters.ctor_removed(java.util.List)" class="hiddenlink" target="rightframe"><strike>KeyStoreBuilderParameters</strike>
 (<code>List</code>)</A></nobr>&nbsp;constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/dalvik.bytecode.Opcodes.html b/docs/html/sdk/api_diff/9/changes/dalvik.bytecode.Opcodes.html
index 0d75aed..603d551 100644
--- a/docs/html/sdk/api_diff/9/changes/dalvik.bytecode.Opcodes.html
+++ b/docs/html/sdk/api_diff/9/changes/dalvik.bytecode.Opcodes.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/dalvik.system.PathClassLoader.html b/docs/html/sdk/api_diff/9/changes/dalvik.system.PathClassLoader.html
index 035fab5..80a2cf0 100644
--- a/docs/html/sdk/api_diff/9/changes/dalvik.system.PathClassLoader.html
+++ b/docs/html/sdk/api_diff/9/changes/dalvik.system.PathClassLoader.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/fields_index_additions.html b/docs/html/sdk/api_diff/9/changes/fields_index_additions.html
index 2ca911c..a743100 100644
--- a/docs/html/sdk/api_diff/9/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/9/changes/fields_index_additions.html
@@ -716,7 +716,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.graphics.ImageFormat.html#android.graphics.ImageFormat.YV12" class="hiddenlink" target="rightframe">YV12</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/fields_index_all.html b/docs/html/sdk/api_diff/9/changes/fields_index_all.html
index e3bf1ba..1048ed5 100644
--- a/docs/html/sdk/api_diff/9/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/9/changes/fields_index_all.html
@@ -782,7 +782,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.graphics.ImageFormat.html#android.graphics.ImageFormat.YV12" class="hiddenlink" target="rightframe">YV12</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/fields_index_changes.html b/docs/html/sdk/api_diff/9/changes/fields_index_changes.html
index 272ff13..ec511e2 100644
--- a/docs/html/sdk/api_diff/9/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/9/changes/fields_index_changes.html
@@ -139,7 +139,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.provider.ContactsContract.CommonDataKinds.Nickname.html#android.provider.ContactsContract.CommonDataKinds.Nickname.TYPE_MAINDEN_NAME" class="hiddenlink" target="rightframe">TYPE_MAINDEN_NAME</A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/fields_index_removals.html b/docs/html/sdk/api_diff/9/changes/fields_index_removals.html
index e29fe79..0b103a0 100644
--- a/docs/html/sdk/api_diff/9/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/9/changes/fields_index_removals.html
@@ -61,7 +61,7 @@
 <p><div style="line-height:1.5em;color:black">
 <nobr><A HREF="android.Manifest.permission.html#android.Manifest.permission.WRITE_OWNER_DATA" class="hiddenlink" target="rightframe"><strike>WRITE_OWNER_DATA</strike></A>
 </nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.awt.font.TextAttribute.html b/docs/html/sdk/api_diff/9/changes/java.awt.font.TextAttribute.html
index be7fea9..f1bb649 100644
--- a/docs/html/sdk/api_diff/9/changes/java.awt.font.TextAttribute.html
+++ b/docs/html/sdk/api_diff/9/changes/java.awt.font.TextAttribute.html
@@ -150,7 +150,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.io.File.html b/docs/html/sdk/api_diff/9/changes/java.io.File.html
index cd9ca56..0f1bab4 100644
--- a/docs/html/sdk/api_diff/9/changes/java.io.File.html
+++ b/docs/html/sdk/api_diff/9/changes/java.io.File.html
@@ -189,7 +189,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.io.IOException.html b/docs/html/sdk/api_diff/9/changes/java.io.IOException.html
index 15c9640..f4ec2a7 100644
--- a/docs/html/sdk/api_diff/9/changes/java.io.IOException.html
+++ b/docs/html/sdk/api_diff/9/changes/java.io.IOException.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.io.ObjectStreamClass.html b/docs/html/sdk/api_diff/9/changes/java.io.ObjectStreamClass.html
index 23991c3..4266771 100644
--- a/docs/html/sdk/api_diff/9/changes/java.io.ObjectStreamClass.html
+++ b/docs/html/sdk/api_diff/9/changes/java.io.ObjectStreamClass.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.io.PipedInputStream.html b/docs/html/sdk/api_diff/9/changes/java.io.PipedInputStream.html
index 06eb810..b235256 100644
--- a/docs/html/sdk/api_diff/9/changes/java.io.PipedInputStream.html
+++ b/docs/html/sdk/api_diff/9/changes/java.io.PipedInputStream.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.io.PipedReader.html b/docs/html/sdk/api_diff/9/changes/java.io.PipedReader.html
index 55f3f1e..5250e13 100644
--- a/docs/html/sdk/api_diff/9/changes/java.io.PipedReader.html
+++ b/docs/html/sdk/api_diff/9/changes/java.io.PipedReader.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.io.PrintStream.html b/docs/html/sdk/api_diff/9/changes/java.io.PrintStream.html
index 85c54cf..9c74b03 100644
--- a/docs/html/sdk/api_diff/9/changes/java.io.PrintStream.html
+++ b/docs/html/sdk/api_diff/9/changes/java.io.PrintStream.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.io.PrintWriter.html b/docs/html/sdk/api_diff/9/changes/java.io.PrintWriter.html
index 9db39c3..e298bfc 100644
--- a/docs/html/sdk/api_diff/9/changes/java.io.PrintWriter.html
+++ b/docs/html/sdk/api_diff/9/changes/java.io.PrintWriter.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.Class.html b/docs/html/sdk/api_diff/9/changes/java.lang.Class.html
index 4e7da699..2c85608 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.Class.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.Class.html
@@ -191,7 +191,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.Double.html b/docs/html/sdk/api_diff/9/changes/java.lang.Double.html
index ebd6993..17b86f5 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.Double.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.Double.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.Enum.html b/docs/html/sdk/api_diff/9/changes/java.lang.Enum.html
index 0486fba..a594ed1 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.Enum.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.Enum.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.Float.html b/docs/html/sdk/api_diff/9/changes/java.lang.Float.html
index 06ef0f0..9473c11 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.Float.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.Float.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.Math.html b/docs/html/sdk/api_diff/9/changes/java.lang.Math.html
index de20ad6..241d435 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.Math.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.Math.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.Package.html b/docs/html/sdk/api_diff/9/changes/java.lang.Package.html
index 088560d..f22b9cb 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.Package.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.Package.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.StrictMath.html b/docs/html/sdk/api_diff/9/changes/java.lang.StrictMath.html
index 3053c1e..a9bcb6c 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.StrictMath.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.StrictMath.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.String.html b/docs/html/sdk/api_diff/9/changes/java.lang.String.html
index d02801d..4fc440b 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.String.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.String.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.System.html b/docs/html/sdk/api_diff/9/changes/java.lang.System.html
index c760872..53207eee 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.System.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.System.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.reflect.Array.html b/docs/html/sdk/api_diff/9/changes/java.lang.reflect.Array.html
index 3d90906..99853f7 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.reflect.Array.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.reflect.Array.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.lang.reflect.Member.html b/docs/html/sdk/api_diff/9/changes/java.lang.reflect.Member.html
index 04a0faf..accda5e 100644
--- a/docs/html/sdk/api_diff/9/changes/java.lang.reflect.Member.html
+++ b/docs/html/sdk/api_diff/9/changes/java.lang.reflect.Member.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.net.NetworkInterface.html b/docs/html/sdk/api_diff/9/changes/java.net.NetworkInterface.html
index f48d21e..c45b17c 100644
--- a/docs/html/sdk/api_diff/9/changes/java.net.NetworkInterface.html
+++ b/docs/html/sdk/api_diff/9/changes/java.net.NetworkInterface.html
@@ -171,7 +171,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.net.SocketImpl.html b/docs/html/sdk/api_diff/9/changes/java.net.SocketImpl.html
index 71f23ac..a807ab5 100644
--- a/docs/html/sdk/api_diff/9/changes/java.net.SocketImpl.html
+++ b/docs/html/sdk/api_diff/9/changes/java.net.SocketImpl.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.nio.Buffer.html b/docs/html/sdk/api_diff/9/changes/java.nio.Buffer.html
index 4aa54f3..1a16b1d 100644
--- a/docs/html/sdk/api_diff/9/changes/java.nio.Buffer.html
+++ b/docs/html/sdk/api_diff/9/changes/java.nio.Buffer.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.security.AccessController.html b/docs/html/sdk/api_diff/9/changes/java.security.AccessController.html
index f1687e1..e5abf53 100644
--- a/docs/html/sdk/api_diff/9/changes/java.security.AccessController.html
+++ b/docs/html/sdk/api_diff/9/changes/java.security.AccessController.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.security.Policy.html b/docs/html/sdk/api_diff/9/changes/java.security.Policy.html
index 3a23bbb..d819ac7 100644
--- a/docs/html/sdk/api_diff/9/changes/java.security.Policy.html
+++ b/docs/html/sdk/api_diff/9/changes/java.security.Policy.html
@@ -186,7 +186,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.security.UnrecoverableKeyException.html b/docs/html/sdk/api_diff/9/changes/java.security.UnrecoverableKeyException.html
index c536aea..a36b0a7 100644
--- a/docs/html/sdk/api_diff/9/changes/java.security.UnrecoverableKeyException.html
+++ b/docs/html/sdk/api_diff/9/changes/java.security.UnrecoverableKeyException.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.Array.html b/docs/html/sdk/api_diff/9/changes/java.sql.Array.html
index 1a395cd..f7e400f 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.Array.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.Array.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.BatchUpdateException.html b/docs/html/sdk/api_diff/9/changes/java.sql.BatchUpdateException.html
index 28917cd..73c60d9 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.BatchUpdateException.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.BatchUpdateException.html
@@ -136,7 +136,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.Blob.html b/docs/html/sdk/api_diff/9/changes/java.sql.Blob.html
index 0a045cf..84f98c6 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.Blob.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.Blob.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.CallableStatement.html b/docs/html/sdk/api_diff/9/changes/java.sql.CallableStatement.html
index 1cd43cc..6868834 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.CallableStatement.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.CallableStatement.html
@@ -325,7 +325,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.Clob.html b/docs/html/sdk/api_diff/9/changes/java.sql.Clob.html
index 75adcf3..13f2c62 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.Clob.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.Clob.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.Connection.html b/docs/html/sdk/api_diff/9/changes/java.sql.Connection.html
index a22128e..4a27548 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.Connection.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.Connection.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.DataTruncation.html b/docs/html/sdk/api_diff/9/changes/java.sql.DataTruncation.html
index 4c75237..fc531bb 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.DataTruncation.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.DataTruncation.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.DatabaseMetaData.html b/docs/html/sdk/api_diff/9/changes/java.sql.DatabaseMetaData.html
index 31bc0c4..02642aa 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.DatabaseMetaData.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.DatabaseMetaData.html
@@ -250,7 +250,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.ParameterMetaData.html b/docs/html/sdk/api_diff/9/changes/java.sql.ParameterMetaData.html
index 25abf80..51537c2d 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.ParameterMetaData.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.ParameterMetaData.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.PreparedStatement.html b/docs/html/sdk/api_diff/9/changes/java.sql.PreparedStatement.html
index 4e358e4..875f8b7 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.PreparedStatement.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.PreparedStatement.html
@@ -227,7 +227,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.ResultSet.html b/docs/html/sdk/api_diff/9/changes/java.sql.ResultSet.html
index a2a9b42..a3bd278 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.ResultSet.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.ResultSet.html
@@ -438,7 +438,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.ResultSetMetaData.html b/docs/html/sdk/api_diff/9/changes/java.sql.ResultSetMetaData.html
index 96e4c65..81fcfdb 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.ResultSetMetaData.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.ResultSetMetaData.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.SQLException.html b/docs/html/sdk/api_diff/9/changes/java.sql.SQLException.html
index 6d3dd0d..56fcb66 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.SQLException.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.SQLException.html
@@ -145,7 +145,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.SQLInput.html b/docs/html/sdk/api_diff/9/changes/java.sql.SQLInput.html
index 9e726d0..c729295 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.SQLInput.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.SQLInput.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.SQLOutput.html b/docs/html/sdk/api_diff/9/changes/java.sql.SQLOutput.html
index 493b133..944c3d6 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.SQLOutput.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.SQLOutput.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.SQLWarning.html b/docs/html/sdk/api_diff/9/changes/java.sql.SQLWarning.html
index 73ef5d7..d2c738e 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.SQLWarning.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.SQLWarning.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.Statement.html b/docs/html/sdk/api_diff/9/changes/java.sql.Statement.html
index ce2875d..d1f3c37 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.Statement.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.Statement.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.sql.Types.html b/docs/html/sdk/api_diff/9/changes/java.sql.Types.html
index 95844f7..7c1256b 100644
--- a/docs/html/sdk/api_diff/9/changes/java.sql.Types.html
+++ b/docs/html/sdk/api_diff/9/changes/java.sql.Types.html
@@ -143,7 +143,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.text.BreakIterator.html b/docs/html/sdk/api_diff/9/changes/java.text.BreakIterator.html
index b8ff610..a4198ac 100644
--- a/docs/html/sdk/api_diff/9/changes/java.text.BreakIterator.html
+++ b/docs/html/sdk/api_diff/9/changes/java.text.BreakIterator.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.text.CollationKey.html b/docs/html/sdk/api_diff/9/changes/java.text.CollationKey.html
index 4eb7d0c..532ef55 100644
--- a/docs/html/sdk/api_diff/9/changes/java.text.CollationKey.html
+++ b/docs/html/sdk/api_diff/9/changes/java.text.CollationKey.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.text.DateFormatSymbols.html b/docs/html/sdk/api_diff/9/changes/java.text.DateFormatSymbols.html
index dcf91b5..46134a7 100644
--- a/docs/html/sdk/api_diff/9/changes/java.text.DateFormatSymbols.html
+++ b/docs/html/sdk/api_diff/9/changes/java.text.DateFormatSymbols.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.text.DecimalFormatSymbols.html b/docs/html/sdk/api_diff/9/changes/java.text.DecimalFormatSymbols.html
index bf9e9c0..2545984 100644
--- a/docs/html/sdk/api_diff/9/changes/java.text.DecimalFormatSymbols.html
+++ b/docs/html/sdk/api_diff/9/changes/java.text.DecimalFormatSymbols.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.text.Format.html b/docs/html/sdk/api_diff/9/changes/java.text.Format.html
index dd1b44ed..6d949a6 100644
--- a/docs/html/sdk/api_diff/9/changes/java.text.Format.html
+++ b/docs/html/sdk/api_diff/9/changes/java.text.Format.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.text.NumberFormat.html b/docs/html/sdk/api_diff/9/changes/java.text.NumberFormat.html
index f5e3048..52df1c4 100644
--- a/docs/html/sdk/api_diff/9/changes/java.text.NumberFormat.html
+++ b/docs/html/sdk/api_diff/9/changes/java.text.NumberFormat.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.Arrays.html b/docs/html/sdk/api_diff/9/changes/java.util.Arrays.html
index da28c78..d520255 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.Arrays.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.Arrays.html
@@ -304,7 +304,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.Calendar.html b/docs/html/sdk/api_diff/9/changes/java.util.Calendar.html
index 0a2ee73..8c36127 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.Calendar.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.Calendar.html
@@ -144,7 +144,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.Collections.html b/docs/html/sdk/api_diff/9/changes/java.util.Collections.html
index 7644816..3942eec 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.Collections.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.Collections.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.LinkedList.html b/docs/html/sdk/api_diff/9/changes/java.util.LinkedList.html
index 7614a2c..5bb61d3 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.LinkedList.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.LinkedList.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.Locale.html b/docs/html/sdk/api_diff/9/changes/java.util.Locale.html
index 242df24..28f1f76 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.Locale.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.Locale.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.Properties.html b/docs/html/sdk/api_diff/9/changes/java.util.Properties.html
index 97bb0be..208c4f2 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.Properties.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.Properties.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.PropertyResourceBundle.html b/docs/html/sdk/api_diff/9/changes/java.util.PropertyResourceBundle.html
index a5d0902..749563b 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.PropertyResourceBundle.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.PropertyResourceBundle.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.ResourceBundle.html b/docs/html/sdk/api_diff/9/changes/java.util.ResourceBundle.html
index f5dfbb4..ef33b20 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.ResourceBundle.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.ResourceBundle.html
@@ -157,7 +157,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.Scanner.html b/docs/html/sdk/api_diff/9/changes/java.util.Scanner.html
index ca9c480..a8f9222 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.Scanner.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.Scanner.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.TreeMap.html b/docs/html/sdk/api_diff/9/changes/java.util.TreeMap.html
index 1b37ea0..22f5b1b 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.TreeMap.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.TreeMap.html
@@ -228,7 +228,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.TreeSet.html b/docs/html/sdk/api_diff/9/changes/java.util.TreeSet.html
index f201c42..5db6e87 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.TreeSet.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.TreeSet.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.AbstractExecutorService.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.AbstractExecutorService.html
index d37f3df..056da50 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.AbstractExecutorService.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.AbstractExecutorService.html
@@ -179,7 +179,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ConcurrentHashMap.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ConcurrentHashMap.html
index 52c43f4..cd90473 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ConcurrentHashMap.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ConcurrentHashMap.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ExecutorService.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ExecutorService.html
index 18b74a9..553dd2c 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ExecutorService.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ExecutorService.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.Executors.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.Executors.html
index 11589c9..b5e427c 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.Executors.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.Executors.html
@@ -137,7 +137,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.FutureTask.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.FutureTask.html
index d42f255..9860892 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.FutureTask.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.FutureTask.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ScheduledThreadPoolExecutor.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ScheduledThreadPoolExecutor.html
index f760d81..eb6ce8f 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ScheduledThreadPoolExecutor.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ScheduledThreadPoolExecutor.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ThreadPoolExecutor.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ThreadPoolExecutor.html
index 752d1f7..3c3a1d6 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ThreadPoolExecutor.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.ThreadPoolExecutor.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.TimeUnit.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.TimeUnit.html
index e3ae536..c5dde7e 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.TimeUnit.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.TimeUnit.html
@@ -122,7 +122,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicBoolean.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicBoolean.html
index 6a3ef17..c33e55f 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicBoolean.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicBoolean.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicInteger.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicInteger.html
index 38476cf..074265c 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicInteger.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicInteger.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerArray.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerArray.html
index 605bab1..68ae1a0 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerArray.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerArray.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerFieldUpdater.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerFieldUpdater.html
index 58406eb..c9af94e 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerFieldUpdater.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerFieldUpdater.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLong.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLong.html
index c94c2307..dbee783 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLong.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLong.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongArray.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongArray.html
index 4aa0d0c..2782bd6 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongArray.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongArray.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongFieldUpdater.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongFieldUpdater.html
index aeeb697..096b381 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongFieldUpdater.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongFieldUpdater.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReference.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReference.html
index a857d44..ba83b91 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReference.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReference.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceArray.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceArray.html
index 576b4b9..cd6a11c 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceArray.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceArray.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.html
index f87494e..257aa6b 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.AbstractOwnableSynchronizer.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.AbstractOwnableSynchronizer.html
index fad57f1..887c6bc 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.AbstractOwnableSynchronizer.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.AbstractOwnableSynchronizer.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.LockSupport.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.LockSupport.html
index 2330df5..3e950fd 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.LockSupport.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.LockSupport.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.html
index d2eb62b..f4a759e 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.html b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.html
index 3a44286..aad75c6 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/java.util.logging.Logger.html b/docs/html/sdk/api_diff/9/changes/java.util.logging.Logger.html
index a2761da..088773c 100644
--- a/docs/html/sdk/api_diff/9/changes/java.util.logging.Logger.html
+++ b/docs/html/sdk/api_diff/9/changes/java.util.logging.Logger.html
@@ -125,7 +125,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.HandshakeCompletedEvent.html b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.HandshakeCompletedEvent.html
index 0eb2f71..06e5edb 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.HandshakeCompletedEvent.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.HandshakeCompletedEvent.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.KeyStoreBuilderParameters.html b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.KeyStoreBuilderParameters.html
index ad0433c..e9a6467 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.KeyStoreBuilderParameters.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.KeyStoreBuilderParameters.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLContext.html b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLContext.html
index 0953c7c..2fbf040 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLContext.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLContext.html
@@ -129,7 +129,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLContextSpi.html b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLContextSpi.html
index 82af9fd..64926fc 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLContextSpi.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLContextSpi.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLEngine.html b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLEngine.html
index 22096d2..d862179 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLEngine.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLEngine.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionBindingEvent.html b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionBindingEvent.html
index 76072755..56b9511 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionBindingEvent.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionBindingEvent.html
@@ -94,7 +94,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionContext.html b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionContext.html
index 55f055b..8ab3a78 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionContext.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionContext.html
@@ -111,7 +111,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSocket.html b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSocket.html
index 2e0f406..0cb41cd 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSocket.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.net.ssl.SSLSocket.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.security.auth.Subject.html b/docs/html/sdk/api_diff/9/changes/javax.security.auth.Subject.html
index c646720..ac02cdf 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.security.auth.Subject.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.security.auth.Subject.html
@@ -165,7 +165,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.security.auth.x500.X500Principal.html b/docs/html/sdk/api_diff/9/changes/javax.security.auth.x500.X500Principal.html
index 4d6fb01..27075c7 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.security.auth.x500.X500Principal.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.security.auth.x500.X500Principal.html
@@ -123,7 +123,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.sql.ConnectionPoolDataSource.html b/docs/html/sdk/api_diff/9/changes/javax.sql.ConnectionPoolDataSource.html
index 9019ff9..50f11b2 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.sql.ConnectionPoolDataSource.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.sql.ConnectionPoolDataSource.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.sql.DataSource.html b/docs/html/sdk/api_diff/9/changes/javax.sql.DataSource.html
index ec32499..430a12a 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.sql.DataSource.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.sql.DataSource.html
@@ -130,7 +130,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.sql.PooledConnection.html b/docs/html/sdk/api_diff/9/changes/javax.sql.PooledConnection.html
index d2b640a..d574688 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.sql.PooledConnection.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.sql.PooledConnection.html
@@ -115,7 +115,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.sql.RowSet.html b/docs/html/sdk/api_diff/9/changes/javax.sql.RowSet.html
index e0140ee..03db58f 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.sql.RowSet.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.sql.RowSet.html
@@ -500,7 +500,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.xml.datatype.DatatypeFactory.html b/docs/html/sdk/api_diff/9/changes/javax.xml.datatype.DatatypeFactory.html
index 38f78d4..d062c71 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.xml.datatype.DatatypeFactory.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.xml.datatype.DatatypeFactory.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.xml.parsers.DocumentBuilderFactory.html b/docs/html/sdk/api_diff/9/changes/javax.xml.parsers.DocumentBuilderFactory.html
index dd69f54..1b518e6 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.xml.parsers.DocumentBuilderFactory.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.xml.parsers.DocumentBuilderFactory.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.xml.parsers.SAXParserFactory.html b/docs/html/sdk/api_diff/9/changes/javax.xml.parsers.SAXParserFactory.html
index fb0248c..f45d08b 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.xml.parsers.SAXParserFactory.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.xml.parsers.SAXParserFactory.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.xml.transform.TransformerFactory.html b/docs/html/sdk/api_diff/9/changes/javax.xml.transform.TransformerFactory.html
index ce71a52..bb3eee7 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.xml.transform.TransformerFactory.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.xml.transform.TransformerFactory.html
@@ -108,7 +108,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/javax.xml.validation.SchemaFactory.html b/docs/html/sdk/api_diff/9/changes/javax.xml.validation.SchemaFactory.html
index 695c13c..e1b133d 100644
--- a/docs/html/sdk/api_diff/9/changes/javax.xml.validation.SchemaFactory.html
+++ b/docs/html/sdk/api_diff/9/changes/javax.xml.validation.SchemaFactory.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/jdiff_help.html b/docs/html/sdk/api_diff/9/changes/jdiff_help.html
index c7b7623..e255cdd 100644
--- a/docs/html/sdk/api_diff/9/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/9/changes/jdiff_help.html
@@ -120,7 +120,7 @@
 There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass. 
 In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes. 
 </BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/9/changes/jdiff_statistics.html
index dcbb910..bd53b35 100644
--- a/docs/html/sdk/api_diff/9/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/9/changes/jdiff_statistics.html
@@ -1205,7 +1205,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/9/changes/jdiff_topleftframe.html
index 36f9836..48ec27f 100644
--- a/docs/html/sdk/api_diff/9/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/9/changes/jdiff_topleftframe.html
@@ -49,7 +49,7 @@
   <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
 </TR>
 </TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/methods_index_additions.html b/docs/html/sdk/api_diff/9/changes/methods_index_additions.html
index 41c8371..3eaeefc 100644
--- a/docs/html/sdk/api_diff/9/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/9/changes/methods_index_additions.html
@@ -1898,7 +1898,7 @@
 (<code>RowId</code>)</A></nobr><br>
 <nobr><A HREF="java.sql.SQLOutput.html#java.sql.SQLOutput.writeSQLXML_added(java.sql.SQLXML)" class="hiddenlink" target="rightframe"><b>writeSQLXML</b>
 (<code>SQLXML</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/methods_index_all.html b/docs/html/sdk/api_diff/9/changes/methods_index_all.html
index 74b195c..4aa178b 100644
--- a/docs/html/sdk/api_diff/9/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/9/changes/methods_index_all.html
@@ -2065,7 +2065,7 @@
 (<code>RowId</code>)</A></nobr><br>
 <nobr><A HREF="java.sql.SQLOutput.html#java.sql.SQLOutput.writeSQLXML_added(java.sql.SQLXML)" class="hiddenlink" target="rightframe"><b>writeSQLXML</b>
 (<code>SQLXML</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/methods_index_changes.html b/docs/html/sdk/api_diff/9/changes/methods_index_changes.html
index 9068580..543560f 100644
--- a/docs/html/sdk/api_diff/9/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/9/changes/methods_index_changes.html
@@ -217,7 +217,7 @@
 ()</A></nobr><br>
 <nobr><A HREF="java.io.File.html#java.io.File.toURL_changed()" class="hiddenlink" target="rightframe">toURL
 ()</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/methods_index_removals.html b/docs/html/sdk/api_diff/9/changes/methods_index_removals.html
index 46cf588..cfaa842 100644
--- a/docs/html/sdk/api_diff/9/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/9/changes/methods_index_removals.html
@@ -188,7 +188,7 @@
 </A></nobr><br>
 <nobr><A HREF="java.net.SocketImpl.html#java.net.SocketImpl.setOption_removed(int, java.lang.Object)" class="hiddenlink" target="rightframe"><strike>setOption</strike>
 (<code>int, Object</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/org.apache.http.protocol.HTTP.html b/docs/html/sdk/api_diff/9/changes/org.apache.http.protocol.HTTP.html
index 4840682..b0fffb5 100644
--- a/docs/html/sdk/api_diff/9/changes/org.apache.http.protocol.HTTP.html
+++ b/docs/html/sdk/api_diff/9/changes/org.apache.http.protocol.HTTP.html
@@ -110,7 +110,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/packages_index_additions.html b/docs/html/sdk/api_diff/9/changes/packages_index_additions.html
index 408a3cd..ca847ac 100644
--- a/docs/html/sdk/api_diff/9/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/9/changes/packages_index_additions.html
@@ -54,7 +54,7 @@
 <A HREF="changes-summary.html#android.net.sip" class="hiddenlink" target="rightframe"><b>android.net.sip</b></A><br>
 <A HREF="changes-summary.html#android.nfc" class="hiddenlink" target="rightframe"><b>android.nfc</b></A><br>
 <A HREF="changes-summary.html#android.os.storage" class="hiddenlink" target="rightframe"><b>android.os.storage</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/packages_index_all.html b/docs/html/sdk/api_diff/9/changes/packages_index_all.html
index 79002f8..91c1ffd 100644
--- a/docs/html/sdk/api_diff/9/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/9/changes/packages_index_all.html
@@ -107,7 +107,7 @@
 <A HREF="pkg_javax.xml.validation.html" class="hiddenlink" target="rightframe">javax.xml.validation</A><br>
 <A NAME="O"></A>
 <A HREF="pkg_org.apache.http.protocol.html" class="hiddenlink" target="rightframe">org.apache.http.protocol</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/packages_index_changes.html b/docs/html/sdk/api_diff/9/changes/packages_index_changes.html
index a02c6e1..28ca21e 100644
--- a/docs/html/sdk/api_diff/9/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/9/changes/packages_index_changes.html
@@ -103,7 +103,7 @@
 <A HREF="pkg_javax.xml.validation.html" class="hiddenlink" target="rightframe">javax.xml.validation</A><br>
 <A NAME="O"></A>
 <A HREF="pkg_org.apache.http.protocol.html" class="hiddenlink" target="rightframe">org.apache.http.protocol</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/packages_index_removals.html b/docs/html/sdk/api_diff/9/changes/packages_index_removals.html
index d0ffabc..5f37b27 100644
--- a/docs/html/sdk/api_diff/9/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/9/changes/packages_index_removals.html
@@ -49,7 +49,7 @@
 </div>
 <br>
 <div id="indexTableEntries">
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.app.admin.html b/docs/html/sdk/api_diff/9/changes/pkg_android.app.admin.html
index 86aadc6..09ad238 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.app.admin.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.app.admin.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.app.html b/docs/html/sdk/api_diff/9/changes/pkg_android.app.html
index c5297cc..7166605 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.app.html
@@ -155,7 +155,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.content.html b/docs/html/sdk/api_diff/9/changes/pkg_android.content.html
index 3913ff2..c55a092 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.content.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/9/changes/pkg_android.content.pm.html
index 0f0fc6d..4e34dd6 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.content.pm.html
@@ -133,7 +133,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/9/changes/pkg_android.content.res.html
index b203f5d..ad652ef 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.content.res.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/9/changes/pkg_android.graphics.html
index e67cfef..ec07aea 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.graphics.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/9/changes/pkg_android.hardware.html
index c606352..66cda87 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.hardware.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.html b/docs/html/sdk/api_diff/9/changes/pkg_android.html
index 73b42c1..0cf3ae6 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.html
@@ -126,7 +126,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.location.html b/docs/html/sdk/api_diff/9/changes/pkg_android.location.html
index 362433d..43d2b4d 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.location.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.location.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.media.html b/docs/html/sdk/api_diff/9/changes/pkg_android.media.html
index 50bcee5..d4d00ef 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.media.html
@@ -140,7 +140,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.net.wifi.html b/docs/html/sdk/api_diff/9/changes/pkg_android.net.wifi.html
index 13b4e4c..01c0b89 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.net.wifi.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.net.wifi.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.opengl.html b/docs/html/sdk/api_diff/9/changes/pkg_android.opengl.html
index 9c83cc1..3066e0e 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.opengl.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.opengl.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.os.html b/docs/html/sdk/api_diff/9/changes/pkg_android.os.html
index dff8cfc..89621de 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.os.html
@@ -190,7 +190,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/9/changes/pkg_android.provider.html
index 3142cea..9620d3d 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.provider.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.service.wallpaper.html b/docs/html/sdk/api_diff/9/changes/pkg_android.service.wallpaper.html
index 15ba062..4dba5d1 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.service.wallpaper.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.service.wallpaper.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.telephony.gsm.html b/docs/html/sdk/api_diff/9/changes/pkg_android.telephony.gsm.html
index cb3b24e..6d082a2 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.telephony.gsm.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.telephony.gsm.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/9/changes/pkg_android.telephony.html
index 9453675..bee16c6 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.telephony.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/9/changes/pkg_android.test.mock.html
index 23cedb7..dd8a262 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.test.mock.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.text.format.html b/docs/html/sdk/api_diff/9/changes/pkg_android.text.format.html
index 6147743..479b628 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.text.format.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.text.format.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.util.html b/docs/html/sdk/api_diff/9/changes/pkg_android.util.html
index 2f97134..f11d3e5 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.util.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.view.html b/docs/html/sdk/api_diff/9/changes/pkg_android.view.html
index 8c062bc..428280b 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.view.html
@@ -190,7 +190,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.view.inputmethod.html b/docs/html/sdk/api_diff/9/changes/pkg_android.view.inputmethod.html
index c593696..ea55a54 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.view.inputmethod.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.view.inputmethod.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/9/changes/pkg_android.webkit.html
index 3716cd6a..283e8cd 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.webkit.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/9/changes/pkg_android.widget.html
index 682ceb1..d8551aa 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_android.widget.html
@@ -127,7 +127,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_dalvik.bytecode.html b/docs/html/sdk/api_diff/9/changes/pkg_dalvik.bytecode.html
index 4806813..c453f9f 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_dalvik.bytecode.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_dalvik.bytecode.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_dalvik.system.html b/docs/html/sdk/api_diff/9/changes/pkg_dalvik.system.html
index 755ec42..70cb0e6 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_dalvik.system.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_dalvik.system.html
@@ -176,7 +176,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.awt.font.html b/docs/html/sdk/api_diff/9/changes/pkg_java.awt.font.html
index 1885a58..0dd989c 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.awt.font.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.awt.font.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.io.html b/docs/html/sdk/api_diff/9/changes/pkg_java.io.html
index c0fbd26..f1a84ce 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.io.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.io.html
@@ -169,7 +169,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.lang.html b/docs/html/sdk/api_diff/9/changes/pkg_java.lang.html
index c0cb7bb..bf95c95 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.lang.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.lang.html
@@ -161,7 +161,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.lang.reflect.html b/docs/html/sdk/api_diff/9/changes/pkg_java.lang.reflect.html
index 9b11ecd..1045fdf 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.lang.reflect.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.lang.reflect.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.net.html b/docs/html/sdk/api_diff/9/changes/pkg_java.net.html
index db373bc..3dcb57e 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.net.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.net.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.nio.html b/docs/html/sdk/api_diff/9/changes/pkg_java.nio.html
index f994f22..5bbc881 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.nio.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.nio.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.security.html b/docs/html/sdk/api_diff/9/changes/pkg_java.security.html
index 40a9586..880c956 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.security.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.security.html
@@ -141,7 +141,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.sql.html b/docs/html/sdk/api_diff/9/changes/pkg_java.sql.html
index 274fed7..37b8952 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.sql.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.sql.html
@@ -365,7 +365,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.text.html b/docs/html/sdk/api_diff/9/changes/pkg_java.text.html
index b0042d2..df8ce85 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.text.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.text.html
@@ -162,7 +162,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.atomic.html b/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.atomic.html
index d2101ec..b2b1945 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.atomic.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.atomic.html
@@ -168,7 +168,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.html b/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.html
index 076324ac..acab8cb5 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.html
@@ -211,7 +211,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.locks.html b/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.locks.html
index acd018c..15bd5f7 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.locks.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.util.concurrent.locks.html
@@ -148,7 +148,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.util.html b/docs/html/sdk/api_diff/9/changes/pkg_java.util.html
index 70686a7..35381c9 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.util.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.util.html
@@ -246,7 +246,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.util.logging.html b/docs/html/sdk/api_diff/9/changes/pkg_java.util.logging.html
index 6624582..e519f26 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.util.logging.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.util.logging.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_java.util.zip.html b/docs/html/sdk/api_diff/9/changes/pkg_java.util.zip.html
index 8d7eb81..c94edf5 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_java.util.zip.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_java.util.zip.html
@@ -119,7 +119,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_javax.net.ssl.html b/docs/html/sdk/api_diff/9/changes/pkg_javax.net.ssl.html
index 97211a9..7dc0994 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_javax.net.ssl.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_javax.net.ssl.html
@@ -169,7 +169,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_javax.security.auth.html b/docs/html/sdk/api_diff/9/changes/pkg_javax.security.auth.html
index c3ac79e..da9d97a 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_javax.security.auth.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_javax.security.auth.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_javax.security.auth.x500.html b/docs/html/sdk/api_diff/9/changes/pkg_javax.security.auth.x500.html
index fc892e3..f16238b 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_javax.security.auth.x500.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_javax.security.auth.x500.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_javax.sql.html b/docs/html/sdk/api_diff/9/changes/pkg_javax.sql.html
index e0e10c5..779ebae 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_javax.sql.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_javax.sql.html
@@ -155,7 +155,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.datatype.html b/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.datatype.html
index d616e93..e6ac06a 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.datatype.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.datatype.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.parsers.html b/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.parsers.html
index 58b5010..14dbefa 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.parsers.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.parsers.html
@@ -112,7 +112,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.transform.html b/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.transform.html
index c5248b6..411d440 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.transform.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.transform.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.validation.html b/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.validation.html
index 53740f99..789ad38 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.validation.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_javax.xml.validation.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/api_diff/9/changes/pkg_org.apache.http.protocol.html b/docs/html/sdk/api_diff/9/changes/pkg_org.apache.http.protocol.html
index 11b8836..41c008d 100644
--- a/docs/html/sdk/api_diff/9/changes/pkg_org.apache.http.protocol.html
+++ b/docs/html/sdk/api_diff/9/changes/pkg_org.apache.http.protocol.html
@@ -105,7 +105,7 @@
     </div> <!-- end footer -->
     </div><!-- end doc-content -->
     </div> <!-- end body-content --> 
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+<script src="//www.google-analytics.com/ga.js" type="text/javascript">
 </script>
 <script type="text/javascript">
   try {
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 961afda..cb9d2ef 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,4 +1,5 @@
 page.title=Android SDK
+page.template=sdk
 header.hide=1
 page.metaDescription=Download the official Android SDK to develop apps for Android-powered devices.
 
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
index 3248b7d..105f60d 100644
--- a/docs/html/sitemap.txt
+++ b/docs/html/sitemap.txt
@@ -2611,7 +2611,7 @@
 http://developer.android.com/reference/android/support/v4/view/PagerTabStrip.html
 http://developer.android.com/reference/android/support/v4/view/PagerTitleStrip.html
 http://developer.android.com/reference/android/renderscript/RSSurfaceView.html
-http://developer.android.com/guide/topics/graphics/renderscript.html
+http://developer.android.com/guide/topics/renderscript/index.html
 http://developer.android.com/reference/android/renderscript/RSTextureView.html
 http://developer.android.com/reference/android/appwidget/AppWidgetHost.html
 http://developer.android.com/reference/javax/xml/XMLConstants.html
diff --git a/docs/html/tools/debugging/debugging-ui.jd b/docs/html/tools/debugging/debugging-ui.jd
index a5991ec..8ca5192 100644
--- a/docs/html/tools/debugging/debugging-ui.jd
+++ b/docs/html/tools/debugging/debugging-ui.jd
@@ -36,14 +36,14 @@
               <li>
 <iframe title="Hierarchyviewer" 
     width="210" height="160" 
-    src="http://www.youtube.com/embed/PAgE7saQUUY?rel=0&amp;hd=1" 
+    src="//www.youtube.com/embed/PAgE7saQUUY?rel=0&amp;hd=1" 
     frameborder="0" allowfullscreen>
 </iframe>
               </li>
               <li>
 <iframe title="Pixel Perfect" 
     width="210" height="160" 
-    src="http://www.youtube.com/embed/C45bMZGdN7Y?rel=0&amp;hd=1" 
+    src="//www.youtube.com/embed/C45bMZGdN7Y?rel=0&amp;hd=1" 
     frameborder="0" 
     allowfullscreen>
 </iframe>
diff --git a/docs/html/tools/help/adb.jd b/docs/html/tools/help/adb.jd
index d44d54b..e0ee0e6 100644
--- a/docs/html/tools/help/adb.jd
+++ b/docs/html/tools/help/adb.jd
Binary files differ
diff --git a/docs/html/tools/help/uiautomator/index.jd b/docs/html/tools/help/uiautomator/index.jd
index 38ba177..e3899d6 100644
--- a/docs/html/tools/help/uiautomator/index.jd
+++ b/docs/html/tools/help/uiautomator/index.jd
@@ -76,11 +76,6 @@
 </tr>
 
 <tr>
-<td><nobr><code>-e runner [CLASS]</code></nobr></td>
-<td>Use the specified test runner class instead. If unspecified, the {@code uiautomator} framework’s  default runner will be used.</td>
-</tr>
-
-<tr>
 <td><code>dump</code></td>
 <td><code>[file]</code></td>
 <td>Generate an XML file with a dump of the current UI hierarchy. If a filepath is not specified, by default, the generated dump file is stored on the device in this location {@code /storage/sdcard0/window_dump.xml}.</td>
diff --git a/docs/html/tools/sdk/images/2.0/camera-modes.png b/docs/html/tools/sdk/images/2.0/camera-modes.png
deleted file mode 100644
index ac4c1da..0000000
--- a/docs/html/tools/sdk/images/2.0/camera-modes.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.0/email-inbox.png b/docs/html/tools/sdk/images/2.0/email-inbox.png
deleted file mode 100644
index 50d1c19..0000000
--- a/docs/html/tools/sdk/images/2.0/email-inbox.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.0/mms-search.png b/docs/html/tools/sdk/images/2.0/mms-search.png
deleted file mode 100644
index 22c7dca..0000000
--- a/docs/html/tools/sdk/images/2.0/mms-search.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.0/multiple-accounts.png b/docs/html/tools/sdk/images/2.0/multiple-accounts.png
deleted file mode 100644
index aa4cb15..0000000
--- a/docs/html/tools/sdk/images/2.0/multiple-accounts.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.0/quick-connect.png b/docs/html/tools/sdk/images/2.0/quick-connect.png
deleted file mode 100644
index 0bbf7dd..0000000
--- a/docs/html/tools/sdk/images/2.0/quick-connect.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22browser.png b/docs/html/tools/sdk/images/2.2/22browser.png
deleted file mode 100644
index 817439d..0000000
--- a/docs/html/tools/sdk/images/2.2/22browser.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22exchange.png b/docs/html/tools/sdk/images/2.2/22exchange.png
deleted file mode 100644
index 1fa1f59..0000000
--- a/docs/html/tools/sdk/images/2.2/22exchange.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22gallery.png b/docs/html/tools/sdk/images/2.2/22gallery.png
deleted file mode 100644
index 0cb74ad..0000000
--- a/docs/html/tools/sdk/images/2.2/22gallery.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22home.png b/docs/html/tools/sdk/images/2.2/22home.png
deleted file mode 100644
index a11ea30..0000000
--- a/docs/html/tools/sdk/images/2.2/22home.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22hotspot.png b/docs/html/tools/sdk/images/2.2/22hotspot.png
deleted file mode 100644
index 0951439..0000000
--- a/docs/html/tools/sdk/images/2.2/22hotspot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22keyboard.png b/docs/html/tools/sdk/images/2.2/22keyboard.png
deleted file mode 100644
index 69f95ca..0000000
--- a/docs/html/tools/sdk/images/2.2/22keyboard.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/jit-graph.png b/docs/html/tools/sdk/images/2.2/jit-graph.png
deleted file mode 100644
index 52b8d60..0000000
--- a/docs/html/tools/sdk/images/2.2/jit-graph.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/ffc.png b/docs/html/tools/sdk/images/2.3/ffc.png
deleted file mode 100644
index 136a395f..0000000
--- a/docs/html/tools/sdk/images/2.3/ffc.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/home-menu.png b/docs/html/tools/sdk/images/2.3/home-menu.png
deleted file mode 100644
index e9c8620..0000000
--- a/docs/html/tools/sdk/images/2.3/home-menu.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/home-plain.png b/docs/html/tools/sdk/images/2.3/home-plain.png
deleted file mode 100644
index a6255f6..0000000
--- a/docs/html/tools/sdk/images/2.3/home-plain.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/nfc.png b/docs/html/tools/sdk/images/2.3/nfc.png
deleted file mode 100644
index a21b6ab..0000000
--- a/docs/html/tools/sdk/images/2.3/nfc.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/onetouch.png b/docs/html/tools/sdk/images/2.3/onetouch.png
deleted file mode 100644
index 2789612..0000000
--- a/docs/html/tools/sdk/images/2.3/onetouch.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/power.png b/docs/html/tools/sdk/images/2.3/power.png
deleted file mode 100644
index 7b0785d..0000000
--- a/docs/html/tools/sdk/images/2.3/power.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/running.png b/docs/html/tools/sdk/images/2.3/running.png
deleted file mode 100644
index fe9a1a0..0000000
--- a/docs/html/tools/sdk/images/2.3/running.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/selection.png b/docs/html/tools/sdk/images/2.3/selection.png
deleted file mode 100644
index 46ff28c..0000000
--- a/docs/html/tools/sdk/images/2.3/selection.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/sipcall.png b/docs/html/tools/sdk/images/2.3/sipcall.png
deleted file mode 100644
index 48a5a1d..0000000
--- a/docs/html/tools/sdk/images/2.3/sipcall.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/browser.png b/docs/html/tools/sdk/images/3.0/browser.png
deleted file mode 100644
index 0f16b27..0000000
--- a/docs/html/tools/sdk/images/3.0/browser.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/browser_full.png b/docs/html/tools/sdk/images/3.0/browser_full.png
deleted file mode 100644
index 08a329d..0000000
--- a/docs/html/tools/sdk/images/3.0/browser_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/camera.png b/docs/html/tools/sdk/images/3.0/camera.png
deleted file mode 100644
index 7dabdfc..0000000
--- a/docs/html/tools/sdk/images/3.0/camera.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/camera_full.png b/docs/html/tools/sdk/images/3.0/camera_full.png
deleted file mode 100644
index 3ee95c9..0000000
--- a/docs/html/tools/sdk/images/3.0/camera_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/contacts.png b/docs/html/tools/sdk/images/3.0/contacts.png
deleted file mode 100644
index 9304701..0000000
--- a/docs/html/tools/sdk/images/3.0/contacts.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/contacts_full.png b/docs/html/tools/sdk/images/3.0/contacts_full.png
deleted file mode 100644
index b5eaf5b..0000000
--- a/docs/html/tools/sdk/images/3.0/contacts_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/copy.png b/docs/html/tools/sdk/images/3.0/copy.png
deleted file mode 100644
index d5a4c3e..0000000
--- a/docs/html/tools/sdk/images/3.0/copy.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/copy_full.png b/docs/html/tools/sdk/images/3.0/copy_full.png
deleted file mode 100644
index 124cf52..0000000
--- a/docs/html/tools/sdk/images/3.0/copy_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/home_hero1.png b/docs/html/tools/sdk/images/3.0/home_hero1.png
deleted file mode 100644
index c00391f..0000000
--- a/docs/html/tools/sdk/images/3.0/home_hero1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/home_hero1_full.png b/docs/html/tools/sdk/images/3.0/home_hero1_full.png
deleted file mode 100644
index 1910ed2..0000000
--- a/docs/html/tools/sdk/images/3.0/home_hero1_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/homescreen_cust_port.png b/docs/html/tools/sdk/images/3.0/homescreen_cust_port.png
deleted file mode 100644
index b003a30..0000000
--- a/docs/html/tools/sdk/images/3.0/homescreen_cust_port.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/homescreen_cust_port_full.png b/docs/html/tools/sdk/images/3.0/homescreen_cust_port_full.png
deleted file mode 100644
index 9c64edd..0000000
--- a/docs/html/tools/sdk/images/3.0/homescreen_cust_port_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/mail_drag.png b/docs/html/tools/sdk/images/3.0/mail_drag.png
deleted file mode 100644
index 1f09a7a..0000000
--- a/docs/html/tools/sdk/images/3.0/mail_drag.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/mail_drag_full.png b/docs/html/tools/sdk/images/3.0/mail_drag_full.png
deleted file mode 100644
index be4472f..0000000
--- a/docs/html/tools/sdk/images/3.0/mail_drag_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/tasks.png b/docs/html/tools/sdk/images/3.0/tasks.png
deleted file mode 100644
index a4ba1ba..0000000
--- a/docs/html/tools/sdk/images/3.0/tasks.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/tasks_full.png b/docs/html/tools/sdk/images/3.0/tasks_full.png
deleted file mode 100644
index d2a2241..0000000
--- a/docs/html/tools/sdk/images/3.0/tasks_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/widgets.png b/docs/html/tools/sdk/images/3.0/widgets.png
deleted file mode 100644
index d847666..0000000
--- a/docs/html/tools/sdk/images/3.0/widgets.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/controls.png b/docs/html/tools/sdk/images/3.1/controls.png
deleted file mode 100644
index e0ca1f8..0000000
--- a/docs/html/tools/sdk/images/3.1/controls.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/home.png b/docs/html/tools/sdk/images/3.1/home.png
deleted file mode 100644
index ea0a75a..0000000
--- a/docs/html/tools/sdk/images/3.1/home.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/home_full.png b/docs/html/tools/sdk/images/3.1/home_full.png
deleted file mode 100644
index 2b8e85e..0000000
--- a/docs/html/tools/sdk/images/3.1/home_full.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/resizeable.png b/docs/html/tools/sdk/images/3.1/resizeable.png
deleted file mode 100644
index c9f5e8e..0000000
--- a/docs/html/tools/sdk/images/3.1/resizeable.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/tasks.png b/docs/html/tools/sdk/images/3.1/tasks.png
deleted file mode 100644
index 89d69e5..0000000
--- a/docs/html/tools/sdk/images/3.1/tasks.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/allapps-lg.png b/docs/html/tools/sdk/images/4.0/allapps-lg.png
deleted file mode 100644
index f5eba3c..0000000
--- a/docs/html/tools/sdk/images/4.0/allapps-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/allapps.png b/docs/html/tools/sdk/images/4.0/allapps.png
deleted file mode 100644
index 317a49a..0000000
--- a/docs/html/tools/sdk/images/4.0/allapps.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/bbench.png b/docs/html/tools/sdk/images/4.0/bbench.png
deleted file mode 100644
index f113092..0000000
--- a/docs/html/tools/sdk/images/4.0/bbench.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/beam-lg.png b/docs/html/tools/sdk/images/4.0/beam-lg.png
deleted file mode 100644
index 608fc94..0000000
--- a/docs/html/tools/sdk/images/4.0/beam-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/beam-maps-lg.png b/docs/html/tools/sdk/images/4.0/beam-maps-lg.png
deleted file mode 100644
index 96ac235..0000000
--- a/docs/html/tools/sdk/images/4.0/beam-maps-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/beam-maps.png b/docs/html/tools/sdk/images/4.0/beam-maps.png
deleted file mode 100644
index 63b6756..0000000
--- a/docs/html/tools/sdk/images/4.0/beam-maps.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/beam.png b/docs/html/tools/sdk/images/4.0/beam.png
deleted file mode 100644
index 0eb7d26..0000000
--- a/docs/html/tools/sdk/images/4.0/beam.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/browser-lg.png b/docs/html/tools/sdk/images/4.0/browser-lg.png
deleted file mode 100644
index fe3fe81..0000000
--- a/docs/html/tools/sdk/images/4.0/browser-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/browser-tabs-lg.png b/docs/html/tools/sdk/images/4.0/browser-tabs-lg.png
deleted file mode 100644
index 0ea8f10..0000000
--- a/docs/html/tools/sdk/images/4.0/browser-tabs-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/browser-tabs.png b/docs/html/tools/sdk/images/4.0/browser-tabs.png
deleted file mode 100644
index 413b0c6..0000000
--- a/docs/html/tools/sdk/images/4.0/browser-tabs.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/browser.png b/docs/html/tools/sdk/images/4.0/browser.png
deleted file mode 100644
index 4bc8179..0000000
--- a/docs/html/tools/sdk/images/4.0/browser.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/calendar-widget-lg.png b/docs/html/tools/sdk/images/4.0/calendar-widget-lg.png
deleted file mode 100644
index 39fc986..0000000
--- a/docs/html/tools/sdk/images/4.0/calendar-widget-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/calendar-widget.png b/docs/html/tools/sdk/images/4.0/calendar-widget.png
deleted file mode 100644
index 80a57f7..0000000
--- a/docs/html/tools/sdk/images/4.0/calendar-widget.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/camera-lg.png b/docs/html/tools/sdk/images/4.0/camera-lg.png
deleted file mode 100644
index 7d96a4f..0000000
--- a/docs/html/tools/sdk/images/4.0/camera-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/camera.png b/docs/html/tools/sdk/images/4.0/camera.png
deleted file mode 100644
index 7454549..0000000
--- a/docs/html/tools/sdk/images/4.0/camera.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-call-lg.png b/docs/html/tools/sdk/images/4.0/contact-call-lg.png
deleted file mode 100644
index 40b1f40..0000000
--- a/docs/html/tools/sdk/images/4.0/contact-call-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-call.png b/docs/html/tools/sdk/images/4.0/contact-call.png
deleted file mode 100644
index 5550b57..0000000
--- a/docs/html/tools/sdk/images/4.0/contact-call.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-connect-lg.png b/docs/html/tools/sdk/images/4.0/contact-connect-lg.png
deleted file mode 100644
index ad0d04c..0000000
--- a/docs/html/tools/sdk/images/4.0/contact-connect-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-connect.png b/docs/html/tools/sdk/images/4.0/contact-connect.png
deleted file mode 100644
index d958206..0000000
--- a/docs/html/tools/sdk/images/4.0/contact-connect.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-email-lg.png b/docs/html/tools/sdk/images/4.0/contact-email-lg.png
deleted file mode 100644
index db75a46..0000000
--- a/docs/html/tools/sdk/images/4.0/contact-email-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-email.png b/docs/html/tools/sdk/images/4.0/contact-email.png
deleted file mode 100644
index 9e5460d..0000000
--- a/docs/html/tools/sdk/images/4.0/contact-email.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-faves-lg.png b/docs/html/tools/sdk/images/4.0/contact-faves-lg.png
deleted file mode 100644
index 1ec3fd0..0000000
--- a/docs/html/tools/sdk/images/4.0/contact-faves-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-faves.png b/docs/html/tools/sdk/images/4.0/contact-faves.png
deleted file mode 100644
index 57e4ca6..0000000
--- a/docs/html/tools/sdk/images/4.0/contact-faves.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/face-unlock-lg.png b/docs/html/tools/sdk/images/4.0/face-unlock-lg.png
deleted file mode 100644
index 3fd1695..0000000
--- a/docs/html/tools/sdk/images/4.0/face-unlock-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/face-unlock.png b/docs/html/tools/sdk/images/4.0/face-unlock.png
deleted file mode 100644
index 00afb83..0000000
--- a/docs/html/tools/sdk/images/4.0/face-unlock.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-edit-lg.png b/docs/html/tools/sdk/images/4.0/gallery-edit-lg.png
deleted file mode 100644
index 3d6688f..0000000
--- a/docs/html/tools/sdk/images/4.0/gallery-edit-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-edit.png b/docs/html/tools/sdk/images/4.0/gallery-edit.png
deleted file mode 100644
index 69744ec..0000000
--- a/docs/html/tools/sdk/images/4.0/gallery-edit.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-share-lg.png b/docs/html/tools/sdk/images/4.0/gallery-share-lg.png
deleted file mode 100644
index 749f51e..0000000
--- a/docs/html/tools/sdk/images/4.0/gallery-share-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-share.png b/docs/html/tools/sdk/images/4.0/gallery-share.png
deleted file mode 100644
index 443a70c..0000000
--- a/docs/html/tools/sdk/images/4.0/gallery-share.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-widget.png b/docs/html/tools/sdk/images/4.0/gallery-widget.png
deleted file mode 100644
index e72fd0d..0000000
--- a/docs/html/tools/sdk/images/4.0/gallery-widget.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/home-lg.png b/docs/html/tools/sdk/images/4.0/home-lg.png
deleted file mode 100644
index 5b9021d..0000000
--- a/docs/html/tools/sdk/images/4.0/home-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/home.png b/docs/html/tools/sdk/images/4.0/home.png
deleted file mode 100644
index cd24732..0000000
--- a/docs/html/tools/sdk/images/4.0/home.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/live-effects.png b/docs/html/tools/sdk/images/4.0/live-effects.png
deleted file mode 100644
index 11a0122..0000000
--- a/docs/html/tools/sdk/images/4.0/live-effects.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/lock-camera-lg.png b/docs/html/tools/sdk/images/4.0/lock-camera-lg.png
deleted file mode 100644
index c82cec6..0000000
--- a/docs/html/tools/sdk/images/4.0/lock-camera-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/lock-camera.png b/docs/html/tools/sdk/images/4.0/lock-camera.png
deleted file mode 100644
index d3cc153..0000000
--- a/docs/html/tools/sdk/images/4.0/lock-camera.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/lock-lg.png b/docs/html/tools/sdk/images/4.0/lock-lg.png
deleted file mode 100644
index b859e11..0000000
--- a/docs/html/tools/sdk/images/4.0/lock-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/lock.png b/docs/html/tools/sdk/images/4.0/lock.png
deleted file mode 100644
index d168826..0000000
--- a/docs/html/tools/sdk/images/4.0/lock.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/quick-responses-lg.png b/docs/html/tools/sdk/images/4.0/quick-responses-lg.png
deleted file mode 100644
index 39cea9a..0000000
--- a/docs/html/tools/sdk/images/4.0/quick-responses-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/quick-responses.png b/docs/html/tools/sdk/images/4.0/quick-responses.png
deleted file mode 100644
index d43f348..0000000
--- a/docs/html/tools/sdk/images/4.0/quick-responses.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/screenshot-lg.png b/docs/html/tools/sdk/images/4.0/screenshot-lg.png
deleted file mode 100644
index 30ac339..0000000
--- a/docs/html/tools/sdk/images/4.0/screenshot-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/screenshot.png b/docs/html/tools/sdk/images/4.0/screenshot.png
deleted file mode 100644
index b23c913..0000000
--- a/docs/html/tools/sdk/images/4.0/screenshot.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/tasks-lg.png b/docs/html/tools/sdk/images/4.0/tasks-lg.png
deleted file mode 100644
index 58b5c5d..0000000
--- a/docs/html/tools/sdk/images/4.0/tasks-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/tasks.png b/docs/html/tools/sdk/images/4.0/tasks.png
deleted file mode 100644
index 34a9d4a..0000000
--- a/docs/html/tools/sdk/images/4.0/tasks.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/text-replace-lg.png b/docs/html/tools/sdk/images/4.0/text-replace-lg.png
deleted file mode 100644
index 047d802..0000000
--- a/docs/html/tools/sdk/images/4.0/text-replace-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/text-replace.png b/docs/html/tools/sdk/images/4.0/text-replace.png
deleted file mode 100644
index d2bda3e..0000000
--- a/docs/html/tools/sdk/images/4.0/text-replace.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/tts-lg.png b/docs/html/tools/sdk/images/4.0/tts-lg.png
deleted file mode 100644
index 2f49051..0000000
--- a/docs/html/tools/sdk/images/4.0/tts-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/tts.png b/docs/html/tools/sdk/images/4.0/tts.png
deleted file mode 100644
index 3eae634..0000000
--- a/docs/html/tools/sdk/images/4.0/tts.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/usage-all-lg.png b/docs/html/tools/sdk/images/4.0/usage-all-lg.png
deleted file mode 100644
index fd7eeba..0000000
--- a/docs/html/tools/sdk/images/4.0/usage-all-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/usage-all.png b/docs/html/tools/sdk/images/4.0/usage-all.png
deleted file mode 100644
index 048db83..0000000
--- a/docs/html/tools/sdk/images/4.0/usage-all.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/usage-maps-lg.png b/docs/html/tools/sdk/images/4.0/usage-maps-lg.png
deleted file mode 100644
index b144370..0000000
--- a/docs/html/tools/sdk/images/4.0/usage-maps-lg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/usage-maps.png b/docs/html/tools/sdk/images/4.0/usage-maps.png
deleted file mode 100644
index a6dcd21..0000000
--- a/docs/html/tools/sdk/images/4.0/usage-maps.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/battery.png b/docs/html/tools/sdk/images/battery.png
deleted file mode 100644
index 10fd16b..0000000
--- a/docs/html/tools/sdk/images/battery.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/camera.png b/docs/html/tools/sdk/images/camera.png
deleted file mode 100644
index 6078388..0000000
--- a/docs/html/tools/sdk/images/camera.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/donut_small_bg.png b/docs/html/tools/sdk/images/donut_small_bg.png
deleted file mode 100644
index f514b50..0000000
--- a/docs/html/tools/sdk/images/donut_small_bg.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/market.png b/docs/html/tools/sdk/images/market.png
deleted file mode 100644
index 8d11134..0000000
--- a/docs/html/tools/sdk/images/market.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/images/search.png b/docs/html/tools/sdk/images/search.png
deleted file mode 100644
index 10ab910..0000000
--- a/docs/html/tools/sdk/images/search.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/tools/sdk/ndk/index.jd b/docs/html/tools/sdk/ndk/index.jd
index f3c9a44..cb4954b 100644
--- a/docs/html/tools/sdk/ndk/index.jd
+++ b/docs/html/tools/sdk/ndk/index.jd
@@ -1,4 +1,5 @@
 ndk=true
+page.template=sdk
 
 ndk.win_download=android-ndk-r8d-windows.zip
 ndk.win_bytes=327014028
diff --git a/docs/html/tools/sdk/preview/index.jd b/docs/html/tools/sdk/preview/index.jd
index ed8f7e0..d96df93 100644
--- a/docs/html/tools/sdk/preview/index.jd
+++ b/docs/html/tools/sdk/preview/index.jd
@@ -1,2 +1,3 @@
 sdk.redirect=true
+page.template=sdk
 @jd:body
diff --git a/docs/html/tools/workflow/publishing/publishing.jd b/docs/html/tools/workflow/publishing/publishing.jd
index 400f56f..649e80d 100644
--- a/docs/html/tools/workflow/publishing/publishing.jd
+++ b/docs/html/tools/workflow/publishing/publishing.jd
@@ -58,11 +58,11 @@
 publish it on an application marketplace like Google Play. Publishing on Google Play is a
 straightforward process that you can do in just a few simple steps&mdash;register, configure,
 upload, and publish. Registration takes only a few minutes and needs to be done only once.
-The configuration and publishing steps can all be done through the Google Play Android Developer Console
+The configuration and publishing steps can all be done through the Google Play Developer Console
 after you register as a Google Play developer.</p>
 
 <p>To start publishing on Google Play, first read this topic and then go to the <a
-href="https://play.google.com/apps/publish">Google Play Android Developer Console</a> and register as
+href="https://play.google.com/apps/publish">Google Play Developer Console</a> and register as
 a Google Play developer.</p>
 
 
@@ -632,21 +632,21 @@
 
 <div class="button-row">
   <input type="radio" name="buttonStyle" value="get_it_on_play_logo_small" id="ns" checked="checked" />
-    <label for="ns"><img src="http://www.android.com/images/brand/get_it_on_play_logo_small.png"
+    <label for="ns"><img src="//www.android.com/images/brand/get_it_on_play_logo_small.png"
 alt="Get it on Google Play (small)" /></label>
     &nbsp;&nbsp;&nbsp;&nbsp;
   <input type="radio" name="buttonStyle" value="get_it_on_play_logo_large" id="nm" />
-    <label for="nm"><img src="http://www.android.com/images/brand/get_it_on_play_logo_large.png"
+    <label for="nm"><img src="//www.android.com/images/brand/get_it_on_play_logo_large.png"
 alt="Get it on Google Play (large)" /></label>
 </div>
 
 <div class="button-row">
   <input type="radio" name="buttonStyle" value="android_app_on_play_logo_small" id="ws" />
-    <label for="ws"><img src="http://www.android.com/images/brand/android_app_on_play_logo_small.png"
+    <label for="ws"><img src="//www.android.com/images/brand/android_app_on_play_logo_small.png"
 alt="Android app on Google Play (small)" /></label>
     &nbsp;&nbsp;&nbsp;&nbsp;
   <input type="radio" name="buttonStyle" value="android_app_on_play_logo_large" id="wm" />
-    <label for="wm"><img src="http://www.android.com/images/brand/android_app_on_play_logo_large.png"
+    <label for="wm"><img src="//www.android.com/images/brand/android_app_on_play_logo_large.png"
 alt="Android app on Google Play (large)" /></label>
 </div>
 
diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java
index 381e65b..905dc8e 100644
--- a/graphics/java/android/graphics/BitmapFactory.java
+++ b/graphics/java/android/graphics/BitmapFactory.java
@@ -49,12 +49,14 @@
          * If set, decode methods that take the Options object will attempt to
          * reuse this bitmap when loading content. If the decode operation cannot
          * use this bitmap, the decode method will return <code>null</code> and
-         * will throw an IllegalArgumentException. The
-         * current implementation necessitates that the reused bitmap be of the
-         * same size as the source content and in jpeg or png format (whether as a
-         * resource or as a stream). The {@link android.graphics.Bitmap.Config
+         * will throw an IllegalArgumentException. The current implementation
+         * necessitates that the reused bitmap be mutable and of the same size as the
+         * source content. The source content must be in jpeg or png format (whether as
+         * a resource or as a stream). The {@link android.graphics.Bitmap.Config
          * configuration} of the reused bitmap will override the setting of
-         * {@link #inPreferredConfig}, if set.
+         * {@link #inPreferredConfig}, if set. The reused bitmap will continue to
+         * remain mutable even when decoding a resource which would normally result
+         * in an immutable bitmap.
          *
          * <p>You should still always use the returned Bitmap of the decode
          * method and not assume that reusing the bitmap worked, due to the
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 3949afd..483d11a 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -37,8 +37,8 @@
  * Canvas and Drawables</a> developer guide.</p></div>
  */
 public class Canvas {
-    // assigned in constructors, freed in finalizer
-    final int mNativeCanvas;
+    // assigned in constructors or setBitmap, freed in finalizer
+    int mNativeCanvas;
     
     // may be null
     private Bitmap mBitmap;
@@ -83,7 +83,7 @@
     private final CanvasFinalizer mFinalizer;
 
     private static class CanvasFinalizer {
-        private final int mNativeCanvas;
+        private int mNativeCanvas;
 
         public CanvasFinalizer(int nativeCanvas) {
             mNativeCanvas = nativeCanvas;
@@ -143,6 +143,17 @@
     }
 
     /**
+     * Replace existing canvas while ensuring that the swap has occurred before
+     * the previous native canvas is unreferenced.
+     */
+    private void safeCanvasSwap(int nativeCanvas) {
+        final int oldCanvas = mNativeCanvas;
+        mNativeCanvas = nativeCanvas;
+        mFinalizer.mNativeCanvas = nativeCanvas;
+        finalizer(oldCanvas);
+    }
+    
+    /**
      * Returns null.
      * 
      * @deprecated This method is not supported and should not be invoked.
@@ -168,11 +179,11 @@
     }
 
     /**
-     * Specify a bitmap for the canvas to draw into.  As a side-effect, also
-     * updates the canvas's target density to match that of the bitmap.
+     * Specify a bitmap for the canvas to draw into. As a side-effect, the
+     * canvas' target density is updated to match that of the bitmap while all
+     * other state such as the layers, filters, matrix, and clip are reset.
      *
      * @param bitmap Specifies a mutable bitmap for the canvas to draw into.
-     * 
      * @see #setDensity(int)
      * @see #getDensity()
      */
@@ -181,17 +192,19 @@
             throw new RuntimeException("Can't set a bitmap device on a GL canvas");
         }
 
-        int pointer = 0;
-        if (bitmap != null) {
+        if (bitmap == null) {
+            safeCanvasSwap(initRaster(0));
+            mDensity = Bitmap.DENSITY_NONE;
+        } else {
             if (!bitmap.isMutable()) {
                 throw new IllegalStateException();
             }
             throwIfRecycled(bitmap);
+
+            safeCanvasSwap(initRaster(bitmap.ni()));
             mDensity = bitmap.mDensity;
-            pointer = bitmap.ni();
         }
 
-        native_setBitmap(mNativeCanvas, pointer);
         mBitmap = bitmap;
     }
     
@@ -706,7 +719,7 @@
      *              does not intersect with the canvas' clip
      */
     public boolean quickReject(RectF rect, EdgeType type) {
-        return native_quickReject(mNativeCanvas, rect, type.nativeInt);
+        return native_quickReject(mNativeCanvas, rect);
     }
 
     /**
@@ -726,7 +739,7 @@
      *                    does not intersect with the canvas' clip
      */
     public boolean quickReject(Path path, EdgeType type) {
-        return native_quickReject(mNativeCanvas, path.ni(), type.nativeInt);
+        return native_quickReject(mNativeCanvas, path.ni());
     }
 
     /**
@@ -749,9 +762,9 @@
      * @return            true if the rect (transformed by the canvas' matrix)
      *                    does not intersect with the canvas' clip
      */
-    public boolean quickReject(float left, float top, float right, float bottom, EdgeType type) {
-        return native_quickReject(mNativeCanvas, left, top, right, bottom,
-                                  type.nativeInt);
+    public boolean quickReject(float left, float top, float right, float bottom,
+                               EdgeType type) {
+        return native_quickReject(mNativeCanvas, left, top, right, bottom);
     }
 
     /**
@@ -1625,7 +1638,6 @@
     public static native void freeTextLayoutCaches();
 
     private static native int initRaster(int nativeBitmapOrZero);
-    private static native void native_setBitmap(int nativeCanvas, int bitmap);
     private static native int native_saveLayer(int nativeCanvas, RectF bounds,
                                                int paint, int layerFlags);
     private static native int native_saveLayer(int nativeCanvas, float l,
@@ -1656,15 +1668,12 @@
                                                        Rect bounds);
     private static native void native_getCTM(int canvas, int matrix);
     private static native boolean native_quickReject(int nativeCanvas,
-                                                     RectF rect,
-                                                     int native_edgeType);
+                                                     RectF rect);
     private static native boolean native_quickReject(int nativeCanvas,
-                                                     int path,
-                                                     int native_edgeType);
+                                                     int path);
     private static native boolean native_quickReject(int nativeCanvas,
                                                      float left, float top,
-                                                     float right, float bottom,
-                                                     int native_edgeType);
+                                                     float right, float bottom);
     private static native void native_drawRGB(int nativeCanvas, int r, int g,
                                               int b);
     private static native void native_drawARGB(int nativeCanvas, int a, int r,
diff --git a/graphics/java/android/graphics/Path.java b/graphics/java/android/graphics/Path.java
index f6b5ffc..157c7d1 100644
--- a/graphics/java/android/graphics/Path.java
+++ b/graphics/java/android/graphics/Path.java
@@ -375,9 +375,9 @@
      */
     public enum Direction {
         /** clockwise */
-        CW  (0),    // must match enum in SkPath.h
+        CW  (1),    // must match enum in SkPath.h
         /** counter-clockwise */
-        CCW (1);    // must match enum in SkPath.h
+        CCW (2);    // must match enum in SkPath.h
         
         Direction(int ni) {
             nativeInt = ni;
diff --git a/graphics/java/android/graphics/Region.java b/graphics/java/android/graphics/Region.java
index 9773039..72d0c43 100644
--- a/graphics/java/android/graphics/Region.java
+++ b/graphics/java/android/graphics/Region.java
@@ -87,7 +87,8 @@
     /** Set the region to the specified region.
     */
     public boolean set(Region region) {
-        return nativeSetRegion(mNativeRegion, region.mNativeRegion);
+        nativeSetRegion(mNativeRegion, region.mNativeRegion);
+        return true;
     }
 
     /** Set the region to the specified rectangle
@@ -406,8 +407,7 @@
     private static native int nativeConstructor();
     private static native void nativeDestructor(int native_region);
 
-    private static native boolean nativeSetRegion(int native_dst,
-                                                  int native_src);
+    private static native void nativeSetRegion(int native_dst, int native_src);
     private static native boolean nativeSetRect(int native_dst, int left,
                                                 int top, int right, int bottom);
     private static native boolean nativeSetPath(int native_dst, int native_path,
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 4487a3c..c68c9f7 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -225,16 +225,4 @@
     private static native int  nativeGetStyle(int native_instance);
     private static native int  nativeCreateFromAsset(AssetManager mgr, String path);
     private static native int nativeCreateFromFile(String path);
-
-    /**
-     * Set the global gamma coefficients for black and white text. This call is
-     * usually a no-op in shipping products, and only exists for testing during
-     * development.
-     *
-     * @param blackGamma gamma coefficient for black text
-     * @param whiteGamma gamma coefficient for white text
-     *
-     * @hide - this is just for calibrating devices, not for normal apps
-     */
-    public static native void setGammaForText(float blackGamma, float whiteGamma);
 }
diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java
index 5e9872f..5f0844a 100644
--- a/graphics/java/android/renderscript/Allocation.java
+++ b/graphics/java/android/renderscript/Allocation.java
@@ -67,7 +67,7 @@
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>For more information about creating an application that uses Renderscript, read the
- * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
  * </div>
  **/
 public class Allocation extends BaseObj {
@@ -1466,6 +1466,10 @@
      * Creates a non-mipmapped renderscript allocation to use as a
      * graphics texture from the bitmap referenced by resource id
      *
+     * With target API version 18 or greater, this allocation will be
+     * created with USAGE_SHARED. With target API version 17 or lower,
+     * this allocation will be created with USAGE_GRAPHICS_TEXTURE.
+     *
      * @param rs Context to which the allocation will belong.
      * @param res application resources
      * @param id resource id to load the data from
@@ -1476,6 +1480,11 @@
     static public Allocation createFromBitmapResource(RenderScript rs,
                                                       Resources res,
                                                       int id) {
+        if (rs.getApplicationContext().getApplicationInfo().targetSdkVersion >= 18) {
+            return createFromBitmapResource(rs, res, id,
+                                            MipmapControl.MIPMAP_NONE,
+                                            USAGE_SHARED | USAGE_SCRIPT);
+        }
         return createFromBitmapResource(rs, res, id,
                                         MipmapControl.MIPMAP_NONE,
                                         USAGE_GRAPHICS_TEXTURE);
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 20e716c..a79ce17 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -44,7 +44,7 @@
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>For more information about creating an application that uses Renderscript, read the
- * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
  * </div>
  **/
 public class Element extends BaseObj {
diff --git a/graphics/java/android/renderscript/Matrix3f.java b/graphics/java/android/renderscript/Matrix3f.java
index 66f2c81..5e9a7ca 100644
--- a/graphics/java/android/renderscript/Matrix3f.java
+++ b/graphics/java/android/renderscript/Matrix3f.java
@@ -138,9 +138,9 @@
         mMat[6] =  zx*nc + ys;
         mMat[1] =  xy*nc + zs;
         mMat[4] = y*y*nc +  c;
-        mMat[9] =  yz*nc - xs;
+        mMat[7] =  yz*nc - xs;
         mMat[2] =  zx*nc - ys;
-        mMat[6] =  yz*nc + xs;
+        mMat[5] =  yz*nc + xs;
         mMat[8] = z*z*nc +  c;
     }
 
diff --git a/graphics/java/android/renderscript/RSSurfaceView.java b/graphics/java/android/renderscript/RSSurfaceView.java
index 506f1af..82ed95c 100644
--- a/graphics/java/android/renderscript/RSSurfaceView.java
+++ b/graphics/java/android/renderscript/RSSurfaceView.java
@@ -36,7 +36,7 @@
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>For more information about creating an application that uses Renderscript, read the
- * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
  * </div>
  */
 public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index fa115ff..00e8769 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -41,7 +41,7 @@
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>For more information about creating an application that uses Renderscript, read the
- * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
  * </div>
  **/
 public class RenderScript {
@@ -157,6 +157,12 @@
         rsnContextFinish(mContext);
     }
 
+    native void rsnContextSendMessage(int con, int id, int[] data);
+    synchronized void nContextSendMessage(int id, int[] data) {
+        validate();
+        rsnContextSendMessage(mContext, id, data);
+    }
+
     native void rsnContextBindRootScript(int con, int script);
     synchronized void nContextBindRootScript(int script) {
         validate();
@@ -824,6 +830,16 @@
     }
 
     /**
+     * @hide
+     *
+     * @param id
+     * @param data
+     */
+    public void sendMessage(int id, int[] data) {
+        nContextSendMessage(id, data);
+    }
+
+    /**
      * Runtime error base class.  An application should derive from this class
      * if it wishes to install an error handler.  When errors occur at runtime
      * the fields in this class will be filled and the run method called.
@@ -947,6 +963,7 @@
                         mRS.mErrorCallback.mErrorNum = subID;
                         mRS.mErrorCallback.run();
                     } else {
+                        android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
                         // Do not throw here. In these cases, we do not have
                         // a fatal error.
                     }
diff --git a/graphics/java/android/renderscript/RenderScriptGL.java b/graphics/java/android/renderscript/RenderScriptGL.java
index 12c8102..5269405 100644
--- a/graphics/java/android/renderscript/RenderScriptGL.java
+++ b/graphics/java/android/renderscript/RenderScriptGL.java
@@ -39,7 +39,7 @@
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>For more information about creating an application that uses Renderscript, read the
- * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
  * </div>
  **/
 public class RenderScriptGL extends RenderScript {
diff --git a/graphics/java/android/renderscript/Type.java b/graphics/java/android/renderscript/Type.java
index cb12594..d1446f6 100644
--- a/graphics/java/android/renderscript/Type.java
+++ b/graphics/java/android/renderscript/Type.java
@@ -40,7 +40,7 @@
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>For more information about creating an application that uses Renderscript, read the
- * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+ * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
  * </div>
  **/
 public class Type extends BaseObj {
diff --git a/graphics/java/android/renderscript/package.html b/graphics/java/android/renderscript/package.html
index 775645f..5eab23c 100644
--- a/graphics/java/android/renderscript/package.html
+++ b/graphics/java/android/renderscript/package.html
@@ -4,7 +4,7 @@
 carrying out mathematical calculations and 3D graphics rendering.</p>
 
 <p>For more information, see the
-<a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
+<a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
 {@more}
 
 <p>An example of Renderscript in applications include the 3D carousel view that is present in
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 54413b4..80001a6 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -346,6 +346,23 @@
     rsContextDeinitToClient(con);
 }
 
+static void
+nContextSendMessage(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray data)
+{
+    jint *ptr = NULL;
+    jint len = 0;
+    if (data) {
+        len = _env->GetArrayLength(data);
+        jint *ptr = _env->GetIntArrayElements(data, NULL);
+    }
+    LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", con, id, len);
+    rsContextSendMessage(con, id, (const uint8_t *)ptr, len * sizeof(int));
+    if (data) {
+        _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
+    }
+}
+
+
 
 static jint
 nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
@@ -1434,6 +1451,7 @@
 {"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
 {"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
 {"rsnContextResume",                 "(I)V",                                  (void*)nContextResume },
+{"rsnContextSendMessage",            "(II[I)V",                               (void*)nContextSendMessage },
 {"rsnAssignName",                    "(II[B)V",                               (void*)nAssignName },
 {"rsnGetName",                       "(II)Ljava/lang/String;",                (void*)nGetName },
 {"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
diff --git a/include/androidfw/KeycodeLabels.h b/include/androidfw/KeycodeLabels.h
index 538949d..3e12f26 100644
--- a/include/androidfw/KeycodeLabels.h
+++ b/include/androidfw/KeycodeLabels.h
@@ -244,6 +244,8 @@
     { "RO", 217 },
     { "KANA", 218 },
     { "ASSIST", 219 },
+    { "BRIGHTNESS_DOWN", 220 },
+    { "BRIGHTNESS_UP", 221 },
 
     // NOTE: If you add a new keycode here you must also add it to several other files.
     //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
diff --git a/keystore/java/android/security/AndroidKeyStore.java b/keystore/java/android/security/AndroidKeyStore.java
index aabfcae..65d7b8f 100644
--- a/keystore/java/android/security/AndroidKeyStore.java
+++ b/keystore/java/android/security/AndroidKeyStore.java
@@ -16,9 +16,8 @@
 
 package android.security;
 
-import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey;
 import org.apache.harmony.xnet.provider.jsse.OpenSSLEngine;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder;
 
 import android.util.Log;
 
@@ -210,10 +209,8 @@
         byte[] keyBytes = null;
 
         final String pkeyAlias;
-        if (key instanceof OpenSSLRSAPrivateKey) {
-            pkeyAlias = ((OpenSSLRSAPrivateKey) key).getPkeyAlias();
-        } else if (key instanceof OpenSSLDSAPrivateKey) {
-            pkeyAlias = ((OpenSSLDSAPrivateKey) key).getPkeyAlias();
+        if (key instanceof OpenSSLKeyHolder) {
+            pkeyAlias = ((OpenSSLKeyHolder) key).getOpenSSLKey().getAlias();
         } else {
             pkeyAlias = null;
         }
diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java
index 44be804..ceaff37 100644
--- a/keystore/java/android/security/KeyStore.java
+++ b/keystore/java/android/security/KeyStore.java
@@ -243,7 +243,12 @@
      */
     public long getmtime(String key) {
         try {
-            return mBinder.getmtime(key);
+            final long millis = mBinder.getmtime(key);
+            if (millis == -1L) {
+                return -1L;
+            }
+
+            return millis * 1000L;
         } catch (RemoteException e) {
             Log.w(TAG, "Cannot connect to keystore", e);
             return -1L;
diff --git a/keystore/tests/src/android/security/AndroidKeyStoreTest.java b/keystore/tests/src/android/security/AndroidKeyStoreTest.java
index 49e2f12..c376f3d 100644
--- a/keystore/tests/src/android/security/AndroidKeyStoreTest.java
+++ b/keystore/tests/src/android/security/AndroidKeyStoreTest.java
@@ -51,6 +51,9 @@
 import java.util.Iterator;
 import java.util.Set;
 
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
 import javax.security.auth.x500.X500Principal;
 
 public class AndroidKeyStoreTest extends AndroidTestCase {
@@ -577,17 +580,14 @@
         assertAliases(new String[] { });
     }
 
-    public void testKeyStore_DeleteEntry_EmptyStore_Failure() throws Exception {
+    public void testKeyStore_DeleteEntry_EmptyStore_Success() throws Exception {
         mKeyStore.load(null, null);
 
-        try {
-            mKeyStore.deleteEntry(TEST_ALIAS_1);
-            fail("Should throw KeyStoreException with non-existent alias");
-        } catch (KeyStoreException success) {
-        }
+        // Should not throw when a non-existent entry is requested for delete.
+        mKeyStore.deleteEntry(TEST_ALIAS_1);
     }
 
-    public void testKeyStore_DeleteEntry_NonExistent_Failure() throws Exception {
+    public void testKeyStore_DeleteEntry_NonExistent_Success() throws Exception {
         mKeyStore.load(null, null);
 
         // TEST_ALIAS_1
@@ -596,11 +596,8 @@
         assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_USER_1));
         assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_CA_1));
 
-        try {
-            mKeyStore.deleteEntry(TEST_ALIAS_2);
-            fail("Should throw KeyStoreException with non-existent alias");
-        } catch (KeyStoreException success) {
-        }
+        // Should not throw when a non-existent entry is requested for delete.
+        mKeyStore.deleteEntry(TEST_ALIAS_2);
     }
 
     public void testKeyStore_GetCertificate_Single_Success() throws Exception {
@@ -1551,4 +1548,49 @@
         } catch (UnsupportedOperationException success) {
         }
     }
+
+    private void setupKey() throws Exception {
+        final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
+        assertTrue(mAndroidKeyStore.generate(privateKeyAlias));
+
+        X509Certificate cert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_1, TEST_SERIAL_1,
+                TEST_DN_1, NOW, NOW_PLUS_10_YEARS);
+
+        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1,
+                cert.getEncoded()));
+    }
+
+    public void testKeyStore_KeyOperations_Wrap_Success() throws Exception {
+        mKeyStore.load(null, null);
+
+        setupKey();
+
+        // Test key usage
+        Entry e = mKeyStore.getEntry(TEST_ALIAS_1, null);
+        assertNotNull(e);
+        assertTrue(e instanceof PrivateKeyEntry);
+
+        PrivateKeyEntry privEntry = (PrivateKeyEntry) e;
+        PrivateKey privKey = privEntry.getPrivateKey();
+        assertNotNull(privKey);
+
+        PublicKey pubKey = privEntry.getCertificate().getPublicKey();
+
+        Cipher c = Cipher.getInstance("RSA/ECB/PKCS1Padding");
+        c.init(Cipher.WRAP_MODE, pubKey);
+
+        byte[] expectedKey = new byte[] {
+                0x00, 0x05, (byte) 0xAA, (byte) 0x0A5, (byte) 0xFF, 0x55, 0x0A
+        };
+
+        SecretKey expectedSecret = new SecretKeySpec(expectedKey, "AES");
+
+        byte[] wrappedExpected = c.wrap(expectedSecret);
+
+        c.init(Cipher.UNWRAP_MODE, privKey);
+        SecretKey actualSecret = (SecretKey) c.unwrap(wrappedExpected, "AES", Cipher.SECRET_KEY);
+
+        assertEquals(Arrays.toString(expectedSecret.getEncoded()),
+                Arrays.toString(actualSecret.getEncoded()));
+    }
 }
diff --git a/libs/androidfw/Input.cpp b/libs/androidfw/Input.cpp
index 97b0ec1..eca692a 100644
--- a/libs/androidfw/Input.cpp
+++ b/libs/androidfw/Input.cpp
@@ -72,6 +72,8 @@
         case AKEYCODE_MEDIA_RECORD:
         case AKEYCODE_MEDIA_FAST_FORWARD:
         case AKEYCODE_MUTE:
+        case AKEYCODE_BRIGHTNESS_DOWN:
+        case AKEYCODE_BRIGHTNESS_UP:
             return true;
     }
     
@@ -108,6 +110,8 @@
         case AKEYCODE_CAMERA:
         case AKEYCODE_FOCUS:
         case AKEYCODE_SEARCH:
+        case AKEYCODE_BRIGHTNESS_DOWN:
+        case AKEYCODE_BRIGHTNESS_UP:
             return true;
     }
     
@@ -221,7 +225,7 @@
     }
 
     for (uint32_t i = 0; i < count; i++) {
-        values[i] = parcel->readInt32();
+        values[i] = parcel->readFloat();
     }
     return OK;
 }
@@ -231,7 +235,7 @@
 
     uint32_t count = __builtin_popcountll(bits);
     for (uint32_t i = 0; i < count; i++) {
-        parcel->writeInt32(values[i]);
+        parcel->writeFloat(values[i]);
     }
     return OK;
 }
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 549edd2..881d160 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -21,10 +21,10 @@
 		LayerRenderer.cpp \
 		Matrix.cpp \
 		OpenGLRenderer.cpp \
-		PathRenderer.cpp \
 		Patch.cpp \
 		PatchCache.cpp \
 		PathCache.cpp \
+		PathTessellator.cpp \
 		Program.cpp \
 		ProgramCache.cpp \
 		ResourceCache.cpp \
@@ -42,6 +42,7 @@
 		external/skia/include/core \
 		external/skia/include/effects \
 		external/skia/include/images \
+		external/skia/src/core \
 		external/skia/src/ports \
 		external/skia/include/utils
 
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index 5c2b388..1a86b3a 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -89,6 +89,9 @@
 
     mFunctorsCount = 0;
 
+    debugLayersUpdates = false;
+    debugOverdraw = false;
+
     mInitialized = true;
 }
 
@@ -466,9 +469,9 @@
 // Tiling
 ///////////////////////////////////////////////////////////////////////////////
 
-void Caches::startTiling(GLuint x, GLuint y, GLuint width, GLuint height, bool opaque) {
+void Caches::startTiling(GLuint x, GLuint y, GLuint width, GLuint height, bool discard) {
     if (extensions.hasTiledRendering() && !debugOverdraw) {
-        glStartTilingQCOM(x, y, width, height, (opaque ? GL_NONE : GL_COLOR_BUFFER_BIT0_QCOM));
+        glStartTilingQCOM(x, y, width, height, (discard ? GL_NONE : GL_COLOR_BUFFER_BIT0_QCOM));
     }
 }
 
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index ae188be..d73ac1e 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -66,7 +66,6 @@
 static const GLsizei gMeshStride = sizeof(TextureVertex);
 static const GLsizei gVertexStride = sizeof(Vertex);
 static const GLsizei gAlphaVertexStride = sizeof(AlphaVertex);
-static const GLsizei gAAVertexStride = sizeof(AAVertex);
 static const GLsizei gMeshTextureOffset = 2 * sizeof(float);
 static const GLsizei gVertexAlphaOffset = 2 * sizeof(float);
 static const GLsizei gVertexAAWidthOffset = 2 * sizeof(float);
@@ -215,7 +214,7 @@
     bool disableScissor();
     void setScissorEnabled(bool enabled);
 
-    void startTiling(GLuint x, GLuint y, GLuint width, GLuint height, bool opaque);
+    void startTiling(GLuint x, GLuint y, GLuint width, GLuint height, bool discard);
     void endTiling();
 
     /**
diff --git a/libs/hwui/DisplayListLogBuffer.cpp b/libs/hwui/DisplayListLogBuffer.cpp
index f204644..f039fcd 100644
--- a/libs/hwui/DisplayListLogBuffer.cpp
+++ b/libs/hwui/DisplayListLogBuffer.cpp
@@ -18,9 +18,8 @@
 
 // BUFFER_SIZE size must be one more than a multiple of COMMAND_SIZE to ensure
 // that mStart always points at the next command, not just the next item
-#define COMMAND_SIZE 2
 #define NUM_COMMANDS 50
-#define BUFFER_SIZE ((NUM_COMMANDS * COMMAND_SIZE) + 1)
+#define BUFFER_SIZE ((NUM_COMMANDS) + 1)
 
 /**
  * DisplayListLogBuffer is a utility class which logs the most recent display
@@ -57,7 +56,7 @@
 
 
 DisplayListLogBuffer::DisplayListLogBuffer() {
-    mBufferFirst = (int*) malloc(BUFFER_SIZE * sizeof(int));
+    mBufferFirst = (OpLog*) malloc(BUFFER_SIZE * sizeof(OpLog));
     mStart = mBufferFirst;
     mBufferLast = mBufferFirst + BUFFER_SIZE - 1;
     mEnd = mStart;
@@ -71,42 +70,30 @@
  * Called from DisplayListRenderer to output the current buffer into the
  * specified FILE. This only happens in a dumpsys/bugreport operation.
  */
-void DisplayListLogBuffer::outputCommands(FILE *file, const char* opNames[])
+void DisplayListLogBuffer::outputCommands(FILE *file)
 {
-    int *tmpBufferPtr = mStart;
+    OpLog* tmpBufferPtr = mStart;
     while (true) {
         if (tmpBufferPtr == mEnd) {
             break;
         }
-        int level = *tmpBufferPtr++;
+        OpLog* nextOp = tmpBufferPtr++;
         if (tmpBufferPtr > mBufferLast) {
             tmpBufferPtr = mBufferFirst;
         }
-        int op = *tmpBufferPtr++;
-        if (tmpBufferPtr > mBufferLast) {
-            tmpBufferPtr = mBufferFirst;
-        }
-        uint32_t count = (level + 1) * 2;
-        char indent[count + 1];
-        for (uint32_t i = 0; i < count; i++) {
-            indent[i] = ' ';
-        }
-        indent[count] = '\0';
-        fprintf(file, "%s%s\n", indent, opNames[op]);
+
+        fprintf(file, "%*s%s\n", tmpBufferPtr->level*2, "", tmpBufferPtr->label);
     }
 }
 
-void DisplayListLogBuffer::writeCommand(int level, int op) {
-    writeInt(level);
-    writeInt(op);
-}
-
 /**
- * Store the given value in the buffer and increment/wrap the mEnd
- * and mStart values as appropriate.
+ * Store the given level and label in the buffer and increment/wrap the mEnd
+ * and mStart values as appropriate. Label should point to static memory.
  */
-void DisplayListLogBuffer::writeInt(int value) {
-    *((int*)mEnd) = value;
+void DisplayListLogBuffer::writeCommand(int level, const char* label) {
+    mEnd->level = level;
+    mEnd->label = label;
+
     if (mEnd == mBufferLast) {
         mEnd = mBufferFirst;
     } else {
diff --git a/libs/hwui/DisplayListLogBuffer.h b/libs/hwui/DisplayListLogBuffer.h
index 5d689bb..c884789 100644
--- a/libs/hwui/DisplayListLogBuffer.h
+++ b/libs/hwui/DisplayListLogBuffer.h
@@ -31,19 +31,23 @@
     friend class Singleton<DisplayListLogBuffer>;
 
 public:
-    void writeCommand(int level, int op);
-    void writeInt(int value);
-    void outputCommands(FILE *file, const char* opNames[]);
+    void writeCommand(int level, const char* label);
+    void outputCommands(FILE *file);
 
     bool isEmpty() {
         return (mStart == mEnd);
     }
 
+    struct OpLog {
+        int level;
+        const char* label;
+    };
+
 private:
-    int *mBufferFirst; // where the memory starts
-    int* mStart;       // where the current command stream starts
-    int* mEnd;         // where the current commands end
-    int* mBufferLast;  // where the buffer memory ends
+    OpLog* mBufferFirst; // where the memory starts
+    OpLog* mStart;       // where the current command stream starts
+    OpLog* mEnd;         // where the current commands end
+    OpLog* mBufferLast;  // where the buffer memory ends
 
 };
 
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
new file mode 100644
index 0000000..6425b43
--- /dev/null
+++ b/libs/hwui/DisplayListOp.h
@@ -0,0 +1,1138 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+#ifndef ANDROID_HWUI_DISPLAY_OPERATION_H
+#define ANDROID_HWUI_DISPLAY_OPERATION_H
+
+#include <SkXfermode.h>
+
+#include "OpenGLRenderer.h"
+#include "DisplayListRenderer.h"
+#include "utils/LinearAllocator.h"
+
+#define CRASH() do { \
+    *(int *)(uintptr_t)0xbbadbeef = 0; \
+    ((void(*)())0)(); /* More reliable, but doesn't say BBADBEEF */ \
+} while(false)
+
+#define MATRIX_STRING "[%.2f %.2f %.2f] [%.2f %.2f %.2f] [%.2f %.2f %.2f]"
+#define MATRIX_ARGS(m) \
+    m->get(0), m->get(1), m->get(2), \
+    m->get(3), m->get(4), m->get(5), \
+    m->get(6), m->get(7), m->get(8)
+#define RECT_STRING "%.2f %.2f %.2f %.2f"
+#define RECT_ARGS(r) \
+    r.left, r.top, r.right, r.bottom
+
+// Use OP_LOG for logging with arglist, OP_LOGS if just printing char*
+#define OP_LOGS(s) OP_LOG("%s", s)
+#define OP_LOG(s, ...) ALOGD( "%*s" s, level * 2, "", __VA_ARGS__ )
+
+
+namespace android {
+namespace uirenderer {
+
+/**
+ * Structure for storing canvas operations when they are recorded into a DisplayList, so that they
+ * may be replayed to an OpenGLRenderer.
+ *
+ * To avoid individual memory allocations, DisplayListOps may only be allocated into a
+ * LinearAllocator's managed memory buffers.  Each pointer held by a DisplayListOp is either a
+ * pointer into memory also allocated in the LinearAllocator (mostly for text and float buffers) or
+ * references a externally refcounted object (Sk... and Skia... objects). ~DisplayListOp() is
+ * never called as LinearAllocators are simply discarded, so no memory management should be done in
+ * this class.
+ */
+class DisplayListOp {
+public:
+    // These objects should always be allocated with a LinearAllocator, and never destroyed/deleted.
+    // standard new() intentionally not implemented, and delete/deconstructor should never be used.
+    virtual ~DisplayListOp() { CRASH(); }
+    static void operator delete(void* ptr) { CRASH(); }
+    /** static void* operator new(size_t size); PURPOSELY OMITTED **/
+    static void* operator new(size_t size, LinearAllocator& allocator) {
+        return allocator.alloc(size);
+    }
+
+    enum OpLogFlag {
+        kOpLogFlag_Recurse = 0x1,
+        kOpLogFlag_JSON = 0x2 // TODO: add?
+    };
+
+    //TODO: for draw batching, DrawOps should override a virtual sub-method, with
+    // DrawOps::apply deferring operations to a different list if possible
+    virtual status_t replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, int saveCount,
+            uint32_t level, bool caching, int multipliedAlpha) = 0;
+
+    virtual void output(int level, uint32_t flags = 0) = 0;
+
+    // NOTE: it would be nice to declare constants and overriding the implementation in each op to
+    // point at the constants, but that seems to require a .cpp file
+    virtual const char* name() = 0;
+};
+
+class StateOp : public DisplayListOp {
+public:
+    StateOp() {};
+
+    virtual ~StateOp() {}
+
+    virtual status_t replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, int saveCount,
+            uint32_t level, bool caching, int multipliedAlpha) {
+        applyState(renderer, saveCount);
+        return DrawGlInfo::kStatusDone;
+    }
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) = 0;
+};
+
+class DrawOp : public DisplayListOp {
+public:
+    DrawOp(SkPaint* paint)
+            : mPaint(paint), mQuickRejected(false) {}
+
+    virtual status_t replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, int saveCount,
+            uint32_t level, bool caching, int multipliedAlpha) {
+        if (mQuickRejected && CC_LIKELY(flags & DisplayList::kReplayFlag_ClipChildren)) {
+            return DrawGlInfo::kStatusDone;
+        }
+
+        return applyDraw(renderer, dirty, level, caching, multipliedAlpha);
+    }
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) = 0;
+
+    // returns true if bounds exist
+    virtual bool getLocalBounds(Rect& localBounds) { return false; }
+
+    // TODO: better refine localbounds usage
+    void setQuickRejected(bool quickRejected) { mQuickRejected = quickRejected; }
+    bool getQuickRejected() { return mQuickRejected; }
+
+protected:
+    SkPaint* getPaint(OpenGLRenderer& renderer) {
+        return renderer.filterPaint(mPaint);
+    }
+
+    SkPaint* mPaint; // should be accessed via getPaint() when applying
+    bool mQuickRejected;
+};
+
+class DrawBoundedOp : public DrawOp {
+public:
+    DrawBoundedOp(float left, float top, float right, float bottom, SkPaint* paint)
+            : DrawOp(paint), mLocalBounds(left, top, right, bottom) {}
+
+    // default constructor for area, to be overridden in child constructor body
+    DrawBoundedOp(SkPaint* paint)
+            : DrawOp(paint) {}
+
+    bool getLocalBounds(Rect& localBounds) {
+        localBounds.set(mLocalBounds);
+        return true;
+    }
+
+protected:
+    Rect mLocalBounds; // displayed area in LOCAL coord. doesn't incorporate stroke, so check paint
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// STATE OPERATIONS - these may affect the state of the canvas/renderer, but do
+//         not directly draw or alter output
+///////////////////////////////////////////////////////////////////////////////
+
+class SaveOp : public StateOp {
+public:
+    SaveOp(int flags)
+            : mFlags(flags) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.save(mFlags);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("Save flags %x", mFlags);
+    }
+
+    virtual const char* name() { return "Save"; }
+
+private:
+    int mFlags;
+};
+
+class RestoreToCountOp : public StateOp {
+public:
+    RestoreToCountOp(int count)
+            : mCount(count) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.restoreToCount(saveCount + mCount);
+
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("Restore to count %d", mCount);
+    }
+
+    virtual const char* name() { return "RestoreToCount"; }
+
+private:
+    int mCount;
+};
+
+class SaveLayerOp : public StateOp {
+public:
+    SaveLayerOp(float left, float top, float right, float bottom, SkPaint* paint, int flags)
+            : mArea(left, top, right, bottom), mPaint(paint), mFlags(flags) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        SkPaint* paint = renderer.filterPaint(mPaint);
+        renderer.saveLayer(mArea.left, mArea.top, mArea.right, mArea.bottom, paint, mFlags);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("SaveLayer of area " RECT_STRING, RECT_ARGS(mArea));
+    }
+
+    virtual const char* name() { return "SaveLayer"; }
+
+private:
+    Rect mArea;
+    SkPaint* mPaint;
+    int mFlags;
+};
+
+class SaveLayerAlphaOp : public StateOp {
+public:
+    SaveLayerAlphaOp(float left, float top, float right, float bottom, int alpha, int flags)
+            : mArea(left, top, right, bottom), mAlpha(alpha), mFlags(flags) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.saveLayerAlpha(mArea.left, mArea.top, mArea.right, mArea.bottom, mAlpha, mFlags);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("SaveLayerAlpha of area " RECT_STRING, RECT_ARGS(mArea));
+    }
+
+    virtual const char* name() { return "SaveLayerAlpha"; }
+private:
+    Rect mArea;
+    int mAlpha;
+    int mFlags;
+};
+
+class TranslateOp : public StateOp {
+public:
+    TranslateOp(float dx, float dy)
+            : mDx(dx), mDy(dy) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.translate(mDx, mDy);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("Translate by %f %f", mDx, mDy);
+    }
+
+    virtual const char* name() { return "Translate"; }
+
+private:
+    float mDx;
+    float mDy;
+};
+
+class RotateOp : public StateOp {
+public:
+    RotateOp(float degrees)
+            : mDegrees(degrees) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.rotate(mDegrees);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("Rotate by %f degrees", mDegrees);
+    }
+
+    virtual const char* name() { return "Rotate"; }
+
+private:
+    float mDegrees;
+};
+
+class ScaleOp : public StateOp {
+public:
+    ScaleOp(float sx, float sy)
+            : mSx(sx), mSy(sy) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.scale(mSx, mSy);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("Scale by %f %f", mSx, mSy);
+    }
+
+    virtual const char* name() { return "Scale"; }
+
+private:
+    float mSx;
+    float mSy;
+};
+
+class SkewOp : public StateOp {
+public:
+    SkewOp(float sx, float sy)
+            : mSx(sx), mSy(sy) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.skew(mSx, mSy);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("Skew by %f %f", mSx, mSy);
+    }
+
+    virtual const char* name() { return "Skew"; }
+
+private:
+    float mSx;
+    float mSy;
+};
+
+class SetMatrixOp : public StateOp {
+public:
+    SetMatrixOp(SkMatrix* matrix)
+            : mMatrix(matrix) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.setMatrix(mMatrix);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("SetMatrix " MATRIX_STRING, MATRIX_ARGS(mMatrix));
+    }
+
+    virtual const char* name() { return "SetMatrix"; }
+
+private:
+    SkMatrix* mMatrix;
+};
+
+class ConcatMatrixOp : public StateOp {
+public:
+    ConcatMatrixOp(SkMatrix* matrix)
+            : mMatrix(matrix) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.concatMatrix(mMatrix);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("ConcatMatrix " MATRIX_STRING, MATRIX_ARGS(mMatrix));
+    }
+
+    virtual const char* name() { return "ConcatMatrix"; }
+
+private:
+    SkMatrix* mMatrix;
+};
+
+class ClipRectOp : public StateOp {
+public:
+    ClipRectOp(float left, float top, float right, float bottom, SkRegion::Op op)
+            : mArea(left, top, right, bottom), mOp(op) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.clipRect(mArea.left, mArea.top, mArea.right, mArea.bottom, mOp);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("ClipRect " RECT_STRING, RECT_ARGS(mArea));
+    }
+
+    virtual const char* name() { return "ClipRect"; }
+
+private:
+    Rect mArea;
+    SkRegion::Op mOp;
+};
+
+class ClipPathOp : public StateOp {
+public:
+    ClipPathOp(SkPath* path, SkRegion::Op op)
+            : mPath(path), mOp(op) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.clipPath(mPath, mOp);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        SkRect bounds = mPath->getBounds();
+        OP_LOG("ClipPath bounds " RECT_STRING,
+                bounds.left(), bounds.top(), bounds.right(), bounds.bottom());
+    }
+
+    virtual const char* name() { return "ClipPath"; }
+
+private:
+    SkPath* mPath;
+    SkRegion::Op mOp;
+};
+
+class ClipRegionOp : public StateOp {
+public:
+    ClipRegionOp(SkRegion* region, SkRegion::Op op)
+            : mRegion(region), mOp(op) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.clipRegion(mRegion, mOp);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        SkIRect bounds = mRegion->getBounds();
+        OP_LOG("ClipRegion bounds %d %d %d %d",
+                bounds.left(), bounds.top(), bounds.right(), bounds.bottom());
+    }
+
+    virtual const char* name() { return "ClipRegion"; }
+
+private:
+    SkRegion* mRegion;
+    SkRegion::Op mOp;
+};
+
+class ResetShaderOp : public StateOp {
+public:
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.resetShader();
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOGS("ResetShader");
+    }
+
+    virtual const char* name() { return "ResetShader"; }
+};
+
+class SetupShaderOp : public StateOp {
+public:
+    SetupShaderOp(SkiaShader* shader)
+            : mShader(shader) {}
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.setupShader(mShader);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("SetupShader, shader %p", mShader);
+    }
+
+    virtual const char* name() { return "SetupShader"; }
+
+private:
+    SkiaShader* mShader;
+};
+
+class ResetColorFilterOp : public StateOp {
+public:
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.resetColorFilter();
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOGS("ResetColorFilter");
+    }
+
+    virtual const char* name() { return "ResetColorFilter"; }
+};
+
+class SetupColorFilterOp : public StateOp {
+public:
+    SetupColorFilterOp(SkiaColorFilter* colorFilter)
+            : mColorFilter(colorFilter) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.setupColorFilter(mColorFilter);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("SetupColorFilter, filter %p", mColorFilter);
+    }
+
+    virtual const char* name() { return "SetupColorFilter"; }
+
+private:
+    SkiaColorFilter* mColorFilter;
+};
+
+class ResetShadowOp : public StateOp {
+public:
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.resetShadow();
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOGS("ResetShadow");
+    }
+
+    virtual const char* name() { return "ResetShadow"; }
+};
+
+class SetupShadowOp : public StateOp {
+public:
+    SetupShadowOp(float radius, float dx, float dy, int color)
+            : mRadius(radius), mDx(dx), mDy(dy), mColor(color) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.setupShadow(mRadius, mDx, mDy, mColor);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("SetupShadow, radius %f, %f, %f, color %#x", mRadius, mDx, mDy, mColor);
+    }
+
+    virtual const char* name() { return "SetupShadow"; }
+
+private:
+    float mRadius;
+    float mDx;
+    float mDy;
+    int mColor;
+};
+
+class ResetPaintFilterOp : public StateOp {
+public:
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.resetPaintFilter();
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOGS("ResetPaintFilter");
+    }
+
+    virtual const char* name() { return "ResetPaintFilter"; }
+};
+
+class SetupPaintFilterOp : public StateOp {
+public:
+    SetupPaintFilterOp(int clearBits, int setBits)
+            : mClearBits(clearBits), mSetBits(setBits) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) {
+        renderer.setupPaintFilter(mClearBits, mSetBits);
+    }
+
+    virtual void output(int level, uint32_t flags = 0) {
+        OP_LOG("SetupPaintFilter, clear %#x, set %#x", mClearBits, mSetBits);
+    }
+
+    virtual const char* name() { return "SetupPaintFilter"; }
+
+private:
+    int mClearBits;
+    int mSetBits;
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
+// DRAW OPERATIONS - these are operations that can draw to the canvas's device
+///////////////////////////////////////////////////////////////////////////////
+
+class DrawBitmapOp : public DrawBoundedOp {
+public:
+    DrawBitmapOp(SkBitmap* bitmap, float left, float top, SkPaint* paint)
+            : DrawBoundedOp(left, top, left + bitmap->width(), top + bitmap->height(),
+                    paint),
+            mBitmap(bitmap) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        SkPaint* paint = getPaint(renderer);
+        int oldAlpha = -1;
+        if (caching && multipliedAlpha < 255) {
+            oldAlpha = paint->getAlpha();
+            paint->setAlpha(multipliedAlpha);
+        }
+        status_t ret = renderer.drawBitmap(mBitmap, mLocalBounds.left, mLocalBounds.top, paint);
+        if (oldAlpha >= 0) {
+            paint->setAlpha(oldAlpha);
+        }
+        return ret;
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw bitmap %p at %f %f", mBitmap, mLocalBounds.left, mLocalBounds.top);
+    }
+
+    virtual const char* name() { return "DrawBitmap"; }
+
+protected:
+    SkBitmap* mBitmap;
+};
+
+class DrawBitmapMatrixOp : public DrawBoundedOp {
+public:
+    DrawBitmapMatrixOp(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint)
+            : DrawBoundedOp(paint), mBitmap(bitmap), mMatrix(matrix) {
+        mLocalBounds.set(0, 0, bitmap->width(), bitmap->height());
+        const mat4 transform(*matrix);
+        transform.mapRect(mLocalBounds);
+    }
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawBitmap(mBitmap, mMatrix, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw bitmap %p matrix " MATRIX_STRING, mBitmap, MATRIX_ARGS(mMatrix));
+    }
+
+    virtual const char* name() { return "DrawBitmap"; }
+
+private:
+    SkBitmap* mBitmap;
+    SkMatrix* mMatrix;
+};
+
+class DrawBitmapRectOp : public DrawBoundedOp {
+public:
+    DrawBitmapRectOp(SkBitmap* bitmap, float srcLeft, float srcTop, float srcRight, float srcBottom,
+            float dstLeft, float dstTop, float dstRight, float dstBottom, SkPaint* paint)
+            : DrawBoundedOp(dstLeft, dstTop, dstRight, dstBottom, paint),
+            mBitmap(bitmap), mSrc(srcLeft, srcTop, srcRight, srcBottom) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawBitmap(mBitmap, mSrc.left, mSrc.top, mSrc.right, mSrc.bottom,
+                mLocalBounds.left, mLocalBounds.top, mLocalBounds.right, mLocalBounds.bottom,
+                getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw bitmap %p src="RECT_STRING", dst="RECT_STRING,
+                mBitmap, RECT_ARGS(mSrc), RECT_ARGS(mLocalBounds));
+    }
+
+    virtual const char* name() { return "DrawBitmapRect"; }
+
+private:
+    SkBitmap* mBitmap;
+    Rect mSrc;
+};
+
+class DrawBitmapDataOp : public DrawBitmapOp {
+public:
+    DrawBitmapDataOp(SkBitmap* bitmap, float left, float top, SkPaint* paint)
+            : DrawBitmapOp(bitmap, left, top, paint) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawBitmapData(mBitmap, mLocalBounds.left,
+                mLocalBounds.top, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw bitmap %p", mBitmap);
+    }
+
+    virtual const char* name() { return "DrawBitmapData"; }
+};
+
+class DrawBitmapMeshOp : public DrawOp {
+public:
+    DrawBitmapMeshOp(SkBitmap* bitmap, int meshWidth, int meshHeight,
+            float* vertices, int* colors, SkPaint* paint)
+            : DrawOp(paint), mBitmap(bitmap), mMeshWidth(meshWidth), mMeshHeight(meshHeight),
+            mVertices(vertices), mColors(colors) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawBitmapMesh(mBitmap, mMeshWidth, mMeshHeight,
+                mVertices, mColors, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw bitmap %p mesh %d x %d", mBitmap, mMeshWidth, mMeshHeight);
+    }
+
+    virtual const char* name() { return "DrawBitmapMesh"; }
+
+private:
+    SkBitmap* mBitmap;
+    int mMeshWidth;
+    int mMeshHeight;
+    float* mVertices;
+    int* mColors;
+};
+
+class DrawPatchOp : public DrawBoundedOp {
+public:
+    DrawPatchOp(SkBitmap* bitmap, const int32_t* xDivs,
+            const int32_t* yDivs, const uint32_t* colors, uint32_t width, uint32_t height,
+            int8_t numColors, float left, float top, float right, float bottom,
+            int alpha, SkXfermode::Mode mode)
+            : DrawBoundedOp(left, top, right, bottom, 0),
+            mBitmap(bitmap), mxDivs(xDivs), myDivs(yDivs),
+            mColors(colors), mxDivsCount(width), myDivsCount(height),
+            mNumColors(numColors), mAlpha(alpha), mMode(mode) {};
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        // NOTE: not calling the virtual method, which takes a paint
+        return renderer.drawPatch(mBitmap, mxDivs, myDivs, mColors,
+                mxDivsCount, myDivsCount, mNumColors,
+                mLocalBounds.left, mLocalBounds.top,
+                mLocalBounds.right, mLocalBounds.bottom, mAlpha, mMode);
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw patch "RECT_STRING, RECT_ARGS(mLocalBounds));
+    }
+
+    virtual const char* name() { return "DrawPatch"; }
+
+private:
+    SkBitmap* mBitmap;
+    const int32_t* mxDivs;
+    const int32_t* myDivs;
+    const uint32_t* mColors;
+    uint32_t mxDivsCount;
+    uint32_t myDivsCount;
+    int8_t mNumColors;
+    int mAlpha;
+    SkXfermode::Mode mMode;
+};
+
+class DrawColorOp : public DrawOp {
+public:
+    DrawColorOp(int color, SkXfermode::Mode mode)
+            : DrawOp(0), mColor(color), mMode(mode) {};
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawColor(mColor, mMode);
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw color %#x, mode %d", mColor, mMode);
+    }
+
+    virtual const char* name() { return "DrawColor"; }
+
+private:
+    int mColor;
+    SkXfermode::Mode mMode;
+};
+
+class DrawStrokableOp : public DrawBoundedOp {
+public:
+    DrawStrokableOp(float left, float top, float right, float bottom, SkPaint* paint)
+            : DrawBoundedOp(left, top, right, bottom, paint) {};
+
+    bool getLocalBounds(Rect& localBounds) {
+        if (mPaint && mPaint->getStyle() != SkPaint::kFill_Style) {
+            float outset = mPaint->getStrokeWidth() * 0.5f;
+            localBounds.set(mLocalBounds.left - outset, mLocalBounds.top - outset,
+                    mLocalBounds.right + outset, mLocalBounds.bottom + outset);
+        } else {
+            localBounds.set(mLocalBounds);
+        }
+        return true;
+    }
+};
+
+class DrawRectOp : public DrawStrokableOp {
+public:
+    DrawRectOp(float left, float top, float right, float bottom, SkPaint* paint)
+            : DrawStrokableOp(left, top, right, bottom, paint) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawRect(mLocalBounds.left, mLocalBounds.top,
+                mLocalBounds.right, mLocalBounds.bottom, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Rect "RECT_STRING, RECT_ARGS(mLocalBounds));
+    }
+
+    virtual const char* name() { return "DrawRect"; }
+};
+
+class DrawRectsOp : public DrawOp {
+public:
+    DrawRectsOp(const float* rects, int count, SkPaint* paint)
+            : DrawOp(paint), mRects(rects), mCount(count) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawRects(mRects, mCount, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Rects count %d", mCount);
+    }
+
+    virtual const char* name() { return "DrawRects"; }
+
+private:
+    const float* mRects;
+    int mCount;
+};
+
+class DrawRoundRectOp : public DrawStrokableOp {
+public:
+    DrawRoundRectOp(float left, float top, float right, float bottom,
+            float rx, float ry, SkPaint* paint)
+            : DrawStrokableOp(left, top, right, bottom, paint), mRx(rx), mRy(ry) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawRoundRect(mLocalBounds.left, mLocalBounds.top,
+                mLocalBounds.right, mLocalBounds.bottom, mRx, mRy, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw RoundRect "RECT_STRING", rx %f, ry %f", RECT_ARGS(mLocalBounds), mRx, mRy);
+    }
+
+    virtual const char* name() { return "DrawRoundRect"; }
+
+private:
+    float mRx;
+    float mRy;
+};
+
+class DrawCircleOp : public DrawStrokableOp {
+public:
+    DrawCircleOp(float x, float y, float radius, SkPaint* paint)
+            : DrawStrokableOp(x - radius, y - radius, x + radius, y + radius, paint),
+            mX(x), mY(y), mRadius(radius) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawCircle(mX, mY, mRadius, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Circle x %f, y %f, r %f", mX, mY, mRadius);
+    }
+
+    virtual const char* name() { return "DrawCircle"; }
+
+private:
+    float mX;
+    float mY;
+    float mRadius;
+};
+
+class DrawOvalOp : public DrawStrokableOp {
+public:
+    DrawOvalOp(float left, float top, float right, float bottom, SkPaint* paint)
+            : DrawStrokableOp(left, top, right, bottom, paint) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawOval(mLocalBounds.left, mLocalBounds.top,
+                mLocalBounds.right, mLocalBounds.bottom, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Oval "RECT_STRING, RECT_ARGS(mLocalBounds));
+    }
+
+    virtual const char* name() { return "DrawOval"; }
+};
+
+class DrawArcOp : public DrawStrokableOp {
+public:
+    DrawArcOp(float left, float top, float right, float bottom,
+            float startAngle, float sweepAngle, bool useCenter, SkPaint* paint)
+            : DrawStrokableOp(left, top, right, bottom, paint),
+            mStartAngle(startAngle), mSweepAngle(sweepAngle), mUseCenter(useCenter) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawArc(mLocalBounds.left, mLocalBounds.top,
+                mLocalBounds.right, mLocalBounds.bottom,
+                mStartAngle, mSweepAngle, mUseCenter, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Arc "RECT_STRING", start %f, sweep %f, useCenter %d",
+                RECT_ARGS(mLocalBounds), mStartAngle, mSweepAngle, mUseCenter);
+    }
+
+    virtual const char* name() { return "DrawArc"; }
+
+private:
+    float mStartAngle;
+    float mSweepAngle;
+    bool mUseCenter;
+};
+
+class DrawPathOp : public DrawBoundedOp {
+public:
+    DrawPathOp(SkPath* path, SkPaint* paint)
+            : DrawBoundedOp(paint), mPath(path) {
+        float left, top, offset;
+        uint32_t width, height;
+        computePathBounds(path, paint, left, top, offset, width, height);
+        left -= offset;
+        top -= offset;
+        mLocalBounds.set(left, top, left + width, top + height);
+    }
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawPath(mPath, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Path %p in "RECT_STRING, mPath, RECT_ARGS(mLocalBounds));
+    }
+
+    virtual const char* name() { return "DrawPath"; }
+
+private:
+    SkPath* mPath;
+};
+
+class DrawLinesOp : public DrawOp {
+public:
+    DrawLinesOp(float* points, int count, SkPaint* paint)
+            : DrawOp(paint), mPoints(points), mCount(count) {
+        /* TODO: inherit from DrawBoundedOp and calculate localbounds something like:
+        for (int i = 0; i < count; i += 2) {
+            mLocalBounds.left = fminf(mLocalBounds.left, points[i]);
+            mLocalBounds.right = fmaxf(mLocalBounds.right, points[i]);
+            mLocalBounds.top = fminf(mLocalBounds.top, points[i+1]);
+            mLocalBounds.bottom = fmaxf(mLocalBounds.bottom, points[i+1]);
+        }
+        */
+    }
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawLines(mPoints, mCount, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Lines count %d", mCount);
+    }
+
+    virtual const char* name() { return "DrawLines"; }
+
+protected:
+    float* mPoints;
+    int mCount;
+};
+
+class DrawPointsOp : public DrawLinesOp {
+public:
+    DrawPointsOp(float* points, int count, SkPaint* paint)
+            : DrawLinesOp(points, count, paint) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawPoints(mPoints, mCount, getPaint(renderer));
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Points count %d", mCount);
+    }
+
+    virtual const char* name() { return "DrawPoints"; }
+};
+
+class DrawSomeTextOp : public DrawOp {
+public:
+    DrawSomeTextOp(const char* text, int bytesCount, int count, SkPaint* paint)
+            : DrawOp(paint), mText(text), mBytesCount(bytesCount), mCount(count) {};
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw some text, %d bytes", mBytesCount);
+    }
+protected:
+    const char* mText;
+    int mBytesCount;
+    int mCount;
+};
+
+class DrawTextOnPathOp : public DrawSomeTextOp {
+public:
+    DrawTextOnPathOp(const char* text, int bytesCount, int count,
+            SkPath* path, float hOffset, float vOffset, SkPaint* paint)
+            : DrawSomeTextOp(text, bytesCount, count, paint),
+            mPath(path), mHOffset(hOffset), mVOffset(vOffset) {
+        /* TODO: inherit from DrawBounded and init mLocalBounds */
+    }
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawTextOnPath(mText, mBytesCount, mCount, mPath,
+                mHOffset, mVOffset, getPaint(renderer));
+    }
+
+    virtual const char* name() { return "DrawTextOnPath"; }
+
+private:
+    SkPath* mPath;
+    float mHOffset;
+    float mVOffset;
+};
+
+class DrawPosTextOp : public DrawSomeTextOp {
+public:
+    DrawPosTextOp(const char* text, int bytesCount, int count,
+            const float* positions, SkPaint* paint)
+            : DrawSomeTextOp(text, bytesCount, count, paint), mPositions(positions) {
+        /* TODO: inherit from DrawBounded and init mLocalBounds */
+    }
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawPosText(mText, mBytesCount, mCount, mPositions, getPaint(renderer));
+    }
+
+    virtual const char* name() { return "DrawPosText"; }
+
+private:
+    const float* mPositions;
+};
+
+class DrawTextOp : public DrawBoundedOp {
+public:
+    DrawTextOp(const char* text, int bytesCount, int count, float x, float y,
+            const float* positions, SkPaint* paint, float length)
+            : DrawBoundedOp(paint), mText(text), mBytesCount(bytesCount), mCount(count),
+            mX(x), mY(y), mPositions(positions), mLength(length) {
+        SkPaint::FontMetrics metrics;
+        paint->getFontMetrics(&metrics, 0.0f);
+        mLocalBounds.set(mX, mY + metrics.fTop, mX + length, mY + metrics.fBottom);
+    }
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawText(mText, mBytesCount, mCount, mX, mY,
+                mPositions, getPaint(renderer), mLength);
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Text of count %d, bytes %d", mCount, mBytesCount);
+    }
+
+    virtual const char* name() { return "DrawText"; }
+
+private:
+    const char* mText;
+    int mBytesCount;
+    int mCount;
+    float mX;
+    float mY;
+    const float* mPositions;
+    float mLength;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// SPECIAL DRAW OPERATIONS
+///////////////////////////////////////////////////////////////////////////////
+
+class DrawFunctorOp : public DrawOp {
+public:
+    DrawFunctorOp(Functor* functor)
+            : DrawOp(0), mFunctor(functor) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        renderer.startMark("GL functor");
+        status_t ret = renderer.callDrawGLFunction(mFunctor, dirty);
+        renderer.endMark();
+        return ret;
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Functor %p", mFunctor);
+    }
+
+    virtual const char* name() { return "DrawFunctor"; }
+
+private:
+    Functor* mFunctor;
+};
+
+class DrawDisplayListOp : public DrawOp {
+public:
+    DrawDisplayListOp(DisplayList* displayList, int flags)
+            : DrawOp(0), mDisplayList(displayList), mFlags(flags) {}
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        return renderer.drawDisplayList(mDisplayList, dirty, mFlags, level + 1);
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Display List %p, flags %#x", mDisplayList, mFlags);
+        if (mDisplayList && (flags & kOpLogFlag_Recurse)) {
+            mDisplayList->output(level + 1);
+        }
+    }
+
+    virtual const char* name() { return "DrawDisplayList"; }
+
+private:
+    DisplayList* mDisplayList;
+    int mFlags;
+};
+
+class DrawLayerOp : public DrawOp {
+public:
+    DrawLayerOp(Layer* layer, float x, float y, SkPaint* paint)
+            : DrawOp(paint), mLayer(layer), mX(x), mY(y) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
+            bool caching, int multipliedAlpha) {
+        int oldAlpha = -1;
+
+        if (caching && multipliedAlpha < 255) {
+            oldAlpha = mLayer->getAlpha();
+            mLayer->setAlpha(multipliedAlpha);
+        }
+        status_t ret = renderer.drawLayer(mLayer, mX, mY, getPaint(renderer));
+        if (oldAlpha >= 0) {
+            mLayer->setAlpha(oldAlpha);
+        }
+        return ret;
+    }
+
+    virtual void output(int level, uint32_t flags) {
+        OP_LOG("Draw Layer %p at %f %f", mLayer, mX, mY);
+    }
+
+    virtual const char* name() { return "DrawLayer"; }
+
+private:
+    Layer* mLayer;
+    float mX;
+    float mY;
+};
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_DISPLAY_OPERATION_H
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index f0c9ce4..0e3e4f8 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -21,6 +21,7 @@
 #include <private/hwui/DrawGlInfo.h>
 
 #include "DisplayListLogBuffer.h"
+#include "DisplayListOp.h"
 #include "DisplayListRenderer.h"
 #include "Caches.h"
 
@@ -31,53 +32,6 @@
 // Display list
 ///////////////////////////////////////////////////////////////////////////////
 
-const char* DisplayList::OP_NAMES[] = {
-    "Save",
-    "Restore",
-    "RestoreToCount",
-    "SaveLayer",
-    "SaveLayerAlpha",
-    "Translate",
-    "Rotate",
-    "Scale",
-    "Skew",
-    "SetMatrix",
-    "ConcatMatrix",
-    "ClipRect",
-    "ClipPath",
-    "ClipRegion",
-    "DrawDisplayList",
-    "DrawLayer",
-    "DrawBitmap",
-    "DrawBitmapMatrix",
-    "DrawBitmapRect",
-    "DrawBitmapData",
-    "DrawBitmapMesh",
-    "DrawPatch",
-    "DrawColor",
-    "DrawRect",
-    "DrawRoundRect",
-    "DrawCircle",
-    "DrawOval",
-    "DrawArc",
-    "DrawPath",
-    "DrawLines",
-    "DrawPoints",
-    "DrawTextOnPath",
-    "DrawPosText",
-    "DrawText",
-    "DrawRects",
-    "ResetShader",
-    "SetupShader",
-    "ResetColorFilter",
-    "SetupColorFilter",
-    "ResetShadow",
-    "SetupShadow",
-    "ResetPaintFilter",
-    "SetupPaintFilter",
-    "DrawGLFunction"
-};
-
 void DisplayList::outputLogBuffer(int fd) {
     DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance();
     if (logBuffer.isEmpty()) {
@@ -87,7 +41,7 @@
     FILE *file = fdopen(fd, "a");
 
     fprintf(file, "\nRecent DisplayList operations\n");
-    logBuffer.outputCommands(file, OP_NAMES);
+    logBuffer.outputCommands(file);
 
     String8 cachesLog;
     Caches::getInstance().dumpMemoryUsage(cachesLog);
@@ -116,9 +70,7 @@
 }
 
 void DisplayList::clearResources() {
-    sk_free((void*) mReader.base());
-    mReader.setMemory(NULL, 0);
-
+    mDisplayListData = NULL;
     delete mTransformMatrix;
     delete mTransformCamera;
     delete mTransformMatrix3D;
@@ -200,7 +152,6 @@
 }
 
 void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) {
-
     if (reusing) {
         // re-using display list - clear out previous allocations
         clearResources();
@@ -208,16 +159,13 @@
 
     init();
 
-    const SkWriter32& writer = recorder.writeStream();
-    if (writer.size() == 0) {
+    mDisplayListData = recorder.getDisplayListData();
+    mSize = mDisplayListData->allocator.usedSize();
+
+    if (mSize == 0) {
         return;
     }
 
-    mSize = writer.size();
-    void* buffer = sk_malloc_throw(mSize);
-    writer.flatten(buffer);
-    mReader.setMemory(buffer, mSize);
-
     mFunctorCount = recorder.getFunctorCount();
 
     Caches& caches = Caches::getInstance();
@@ -312,392 +260,17 @@
  * This function is a simplified version of replay(), where we simply retrieve and log the
  * display list. This function should remain in sync with the replay() function.
  */
-void DisplayList::output(OpenGLRenderer& renderer, uint32_t level) {
-    TextContainer text;
-
-    uint32_t count = (level + 1) * 2;
-    char indent[count + 1];
-    for (uint32_t i = 0; i < count; i++) {
-        indent[i] = ' ';
-    }
-    indent[count] = '\0';
-    ALOGD("%sStart display list (%p, %s, render=%d)", (char*) indent + 2, this,
+void DisplayList::output(uint32_t level) {
+    ALOGD("%*sStart display list (%p, %s, render=%d)", level * 2, "", this,
             mName.string(), isRenderable());
 
-    ALOGD("%s%s %d", indent, "Save", SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
-    int saveCount = renderer.getSaveCount() - 1;
-
-    outputViewProperties(renderer, (char*) indent);
-    mReader.rewind();
-
-    while (!mReader.eof()) {
-        int op = mReader.readInt();
-        if (op & OP_MAY_BE_SKIPPED_MASK) {
-            int skip = mReader.readInt();
-            ALOGD("%sSkip %d", (char*) indent, skip);
-            op &= ~OP_MAY_BE_SKIPPED_MASK;
-        }
-
-        switch (op) {
-            case DrawGLFunction: {
-                Functor *functor = (Functor *) getInt();
-                ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor);
-            }
-            break;
-            case Save: {
-                int rendererNum = getInt();
-                ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum);
-            }
-            break;
-            case Restore: {
-                ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
-            }
-            break;
-            case RestoreToCount: {
-                int restoreCount = saveCount + getInt();
-                ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount);
-            }
-            break;
-            case SaveLayer: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                int flags = getInt();
-                ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent,
-                        OP_NAMES[op], f1, f2, f3, f4, paint, flags);
-            }
-            break;
-            case SaveLayerAlpha: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                int alpha = getInt();
-                int flags = getInt();
-                ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent,
-                        OP_NAMES[op], f1, f2, f3, f4, alpha, flags);
-            }
-            break;
-            case Translate: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2);
-            }
-            break;
-            case Rotate: {
-                float rotation = getFloat();
-                ALOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation);
-            }
-            break;
-            case Scale: {
-                float sx = getFloat();
-                float sy = getFloat();
-                ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy);
-            }
-            break;
-            case Skew: {
-                float sx = getFloat();
-                float sy = getFloat();
-                ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy);
-            }
-            break;
-            case SetMatrix: {
-                SkMatrix* matrix = getMatrix();
-                ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix);
-            }
-            break;
-            case ConcatMatrix: {
-                SkMatrix* matrix = getMatrix();
-                ALOGD("%s%s new concat %p: [%f, %f, %f]   [%f, %f, %f]   [%f, %f, %f]",
-                        (char*) indent, OP_NAMES[op], matrix, matrix->get(0), matrix->get(1),
-                        matrix->get(2), matrix->get(3), matrix->get(4), matrix->get(5),
-                        matrix->get(6), matrix->get(7), matrix->get(8));
-            }
-            break;
-            case ClipRect: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                int regionOp = getInt();
-                ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op],
-                        f1, f2, f3, f4, regionOp);
-            }
-            break;
-            case ClipPath: {
-                SkPath* path = getPath();
-                int regionOp = getInt();
-                ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], regionOp);
-            }
-            break;
-            case ClipRegion: {
-                SkRegion* region = getRegion();
-                int regionOp = getInt();
-                ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], regionOp);
-            }
-            break;
-            case DrawDisplayList: {
-                DisplayList* displayList = getDisplayList();
-                int32_t flags = getInt();
-                ALOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op],
-                        displayList, mWidth, mHeight, flags, level + 1);
-                renderer.outputDisplayList(displayList, level + 1);
-            }
-            break;
-            case DrawLayer: {
-                Layer* layer = (Layer*) getInt();
-                float x = getFloat();
-                float y = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
-                        layer, x, y, paint);
-            }
-            break;
-            case DrawBitmap: {
-                SkBitmap* bitmap = getBitmap();
-                float x = getFloat();
-                float y = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
-                        bitmap, x, y, paint);
-            }
-            break;
-            case DrawBitmapMatrix: {
-                SkBitmap* bitmap = getBitmap();
-                SkMatrix* matrix = getMatrix();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op],
-                        bitmap, matrix, paint);
-            }
-            break;
-            case DrawBitmapRect: {
-                SkBitmap* bitmap = getBitmap();
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                float f5 = getFloat();
-                float f6 = getFloat();
-                float f7 = getFloat();
-                float f8 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p",
-                        (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint);
-            }
-            break;
-            case DrawBitmapData: {
-                SkBitmap* bitmap = getBitmapData();
-                float x = getFloat();
-                float y = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], x, y, paint);
-            }
-            break;
-            case DrawBitmapMesh: {
-                int verticesCount = 0;
-                uint32_t colorsCount = 0;
-                SkBitmap* bitmap = getBitmap();
-                uint32_t meshWidth = getInt();
-                uint32_t meshHeight = getInt();
-                float* vertices = getFloats(verticesCount);
-                bool hasColors = getInt();
-                int* colors = hasColors ? getInts(colorsCount) : NULL;
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
-            }
-            break;
-            case DrawPatch: {
-                int32_t* xDivs = NULL;
-                int32_t* yDivs = NULL;
-                uint32_t* colors = NULL;
-                uint32_t xDivsCount = 0;
-                uint32_t yDivsCount = 0;
-                int8_t numColors = 0;
-                SkBitmap* bitmap = getBitmap();
-                xDivs = getInts(xDivsCount);
-                yDivs = getInts(yDivsCount);
-                colors = getUInts(numColors);
-                float left = getFloat();
-                float top = getFloat();
-                float right = getFloat();
-                float bottom = getFloat();
-                int alpha = getInt();
-                SkXfermode::Mode mode = (SkXfermode::Mode) getInt();
-                ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", (char*) indent, OP_NAMES[op],
-                        left, top, right, bottom);
-            }
-            break;
-            case DrawColor: {
-                int color = getInt();
-                int xferMode = getInt();
-                ALOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode);
-            }
-            break;
-            case DrawRect: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
-                        f1, f2, f3, f4, paint);
-            }
-            break;
-            case DrawRoundRect: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                float f5 = getFloat();
-                float f6 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p",
-                        (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint);
-            }
-            break;
-            case DrawCircle: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %.2f, %.2f, %.2f, %p",
-                        (char*) indent, OP_NAMES[op], f1, f2, f3, paint);
-            }
-            break;
-            case DrawOval: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p",
-                        (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint);
-            }
-            break;
-            case DrawArc: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                float f5 = getFloat();
-                float f6 = getFloat();
-                int i1 = getInt();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p",
-                        (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint);
-            }
-            break;
-            case DrawPath: {
-                SkPath* path = getPath();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint);
-            }
-            break;
-            case DrawLines: {
-                int count = 0;
-                float* points = getFloats(count);
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
-            }
-            break;
-            case DrawPoints: {
-                int count = 0;
-                float* points = getFloats(count);
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
-            }
-            break;
-            case DrawTextOnPath: {
-                getText(&text);
-                int32_t count = getInt();
-                SkPath* path = getPath();
-                float hOffset = getFloat();
-                float vOffset = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op],
-                    text.text(), text.length(), count, paint);
-            }
-            break;
-            case DrawPosText: {
-                getText(&text);
-                int count = getInt();
-                int positionsCount = 0;
-                float* positions = getFloats(positionsCount);
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op],
-                        text.text(), text.length(), count, paint);
-            }
-            break;
-            case DrawText: {
-                getText(&text);
-                int32_t count = getInt();
-                float x = getFloat();
-                float y = getFloat();
-                int32_t positionsCount = 0;
-                float* positions = getFloats(positionsCount);
-                SkPaint* paint = getPaint(renderer);
-                float length = getFloat();
-                ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op],
-                        text.text(), text.length(), count, paint);
-            }
-            break;
-            case DrawRects: {
-                int32_t count = 0;
-                float* rects = getFloats(count);
-                SkPaint* paint = getPaint(renderer);
-                ALOGD("%s%s %d, %p", (char*) indent, OP_NAMES[op], count / 4, paint);
-            }
-            break;
-            case ResetShader: {
-                ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
-            }
-            break;
-            case SetupShader: {
-                SkiaShader* shader = getShader();
-                ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader);
-            }
-            break;
-            case ResetColorFilter: {
-                ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
-            }
-            break;
-            case SetupColorFilter: {
-                SkiaColorFilter *colorFilter = getColorFilter();
-                ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter);
-            }
-            break;
-            case ResetShadow: {
-                ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
-            }
-            break;
-            case SetupShadow: {
-                float radius = getFloat();
-                float dx = getFloat();
-                float dy = getFloat();
-                int color = getInt();
-                ALOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op],
-                        radius, dx, dy, color);
-            }
-            break;
-            case ResetPaintFilter: {
-                ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
-            }
-            break;
-            case SetupPaintFilter: {
-                int clearBits = getInt();
-                int setBits = getInt();
-                ALOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], clearBits, setBits);
-            }
-            break;
-            default:
-                ALOGD("Display List error: op not handled: %s%s",
-                        (char*) indent, OP_NAMES[op]);
-                break;
-        }
+    ALOGD("%*s%s %d", level * 2, "", "Save", SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
+    outputViewProperties(level);
+    int flags = DisplayListOp::kOpLogFlag_Recurse;
+    for (unsigned int i = 0; i < mDisplayListData->displayListOps.size(); i++) {
+        mDisplayListData->displayListOps[i]->output(level, flags);
     }
-    ALOGD("%sDone (%p, %s)", (char*) indent + 2, this, mName.string());
+    ALOGD("%*sDone (%p, %s)", level * 2, "", this, mName.string());
 }
 
 void DisplayList::updateMatrix() {
@@ -743,115 +316,68 @@
     }
 }
 
-void DisplayList::outputViewProperties(OpenGLRenderer& renderer, char* indent) {
+void DisplayList::outputViewProperties(uint32_t level) {
     updateMatrix();
     if (mLeft != 0 || mTop != 0) {
-        ALOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop);
+        ALOGD("%*sTranslate (left, top) %d, %d", level * 2, "", mLeft, mTop);
     }
     if (mStaticMatrix) {
-        ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]",
-                indent, "ConcatMatrix (static)", mStaticMatrix,
-                mStaticMatrix->get(0), mStaticMatrix->get(1),
-                mStaticMatrix->get(2), mStaticMatrix->get(3),
-                mStaticMatrix->get(4), mStaticMatrix->get(5),
-                mStaticMatrix->get(6), mStaticMatrix->get(7),
-                mStaticMatrix->get(8));
+        ALOGD("%*sConcatMatrix (static) %p: " MATRIX_STRING,
+                level * 2, "", mStaticMatrix, MATRIX_ARGS(mStaticMatrix));
     }
     if (mAnimationMatrix) {
-        ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]",
-                indent, "ConcatMatrix (animation)", mAnimationMatrix,
-                mAnimationMatrix->get(0), mAnimationMatrix->get(1),
-                mAnimationMatrix->get(2), mAnimationMatrix->get(3),
-                mAnimationMatrix->get(4), mAnimationMatrix->get(5),
-                mAnimationMatrix->get(6), mAnimationMatrix->get(7),
-                mAnimationMatrix->get(8));
+        ALOGD("%*sConcatMatrix (animation) %p: " MATRIX_STRING,
+                level * 2, "", mAnimationMatrix, MATRIX_ARGS(mStaticMatrix));
     }
     if (mMatrixFlags != 0) {
         if (mMatrixFlags == TRANSLATION) {
-            ALOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY);
+            ALOGD("%*sTranslate %f, %f", level * 2, "", mTranslationX, mTranslationY);
         } else {
-            ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]",
-                    indent, "ConcatMatrix", mTransformMatrix,
-                    mTransformMatrix->get(0), mTransformMatrix->get(1),
-                    mTransformMatrix->get(2), mTransformMatrix->get(3),
-                    mTransformMatrix->get(4), mTransformMatrix->get(5),
-                    mTransformMatrix->get(6), mTransformMatrix->get(7),
-                    mTransformMatrix->get(8));
+            ALOGD("%*sConcatMatrix %p: " MATRIX_STRING,
+                    level * 2, "", mTransformMatrix, MATRIX_ARGS(mTransformMatrix));
         }
     }
     if (mAlpha < 1 && !mCaching) {
         if (!mHasOverlappingRendering) {
-            ALOGD("%s%s %.2f", indent, "SetAlpha", mAlpha);
+            ALOGD("%*sSetAlpha %.2f", level * 2, "", mAlpha);
         } else {
             int flags = SkCanvas::kHasAlphaLayer_SaveFlag;
             if (mClipChildren) {
                 flags |= SkCanvas::kClipToLayer_SaveFlag;
             }
-            ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha",
+            ALOGD("%*sSaveLayerAlpha %.2f, %.2f, %.2f, %.2f, %d, 0x%x", level * 2, "",
                     (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop,
                     mMultipliedAlpha, flags);
         }
     }
     if (mClipChildren) {
-        ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f,
+        ALOGD("%*sClipRect %.2f, %.2f, %.2f, %.2f", level * 2, "", 0.0f, 0.0f,
                 (float) mRight - mLeft, (float) mBottom - mTop);
     }
 }
 
 void DisplayList::setViewProperties(OpenGLRenderer& renderer, uint32_t level) {
-#if DEBUG_DISPLAY_LIST
-        uint32_t count = (level + 1) * 2;
-        char indent[count + 1];
-        for (uint32_t i = 0; i < count; i++) {
-            indent[i] = ' ';
-        }
-        indent[count] = '\0';
+#if DEBUG_DISPLAYLIST
+    outputViewProperties(level);
 #endif
     updateMatrix();
     if (mLeft != 0 || mTop != 0) {
-        DISPLAY_LIST_LOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop);
         renderer.translate(mLeft, mTop);
     }
     if (mStaticMatrix) {
-        DISPLAY_LIST_LOGD(
-                "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]",
-                indent, "ConcatMatrix (static)", mStaticMatrix,
-                mStaticMatrix->get(0), mStaticMatrix->get(1),
-                mStaticMatrix->get(2), mStaticMatrix->get(3),
-                mStaticMatrix->get(4), mStaticMatrix->get(5),
-                mStaticMatrix->get(6), mStaticMatrix->get(7),
-                mStaticMatrix->get(8));
         renderer.concatMatrix(mStaticMatrix);
     } else if (mAnimationMatrix) {
-        DISPLAY_LIST_LOGD(
-                "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]",
-                indent, "ConcatMatrix (animation)", mAnimationMatrix,
-                mAnimationMatrix->get(0), mAnimationMatrix->get(1),
-                mAnimationMatrix->get(2), mAnimationMatrix->get(3),
-                mAnimationMatrix->get(4), mAnimationMatrix->get(5),
-                mAnimationMatrix->get(6), mAnimationMatrix->get(7),
-                mAnimationMatrix->get(8));
         renderer.concatMatrix(mAnimationMatrix);
     }
     if (mMatrixFlags != 0) {
         if (mMatrixFlags == TRANSLATION) {
-            DISPLAY_LIST_LOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY);
             renderer.translate(mTranslationX, mTranslationY);
         } else {
-            DISPLAY_LIST_LOGD(
-                    "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]",
-                    indent, "ConcatMatrix", mTransformMatrix,
-                    mTransformMatrix->get(0), mTransformMatrix->get(1),
-                    mTransformMatrix->get(2), mTransformMatrix->get(3),
-                    mTransformMatrix->get(4), mTransformMatrix->get(5),
-                    mTransformMatrix->get(6), mTransformMatrix->get(7),
-                    mTransformMatrix->get(8));
             renderer.concatMatrix(mTransformMatrix);
         }
     }
     if (mAlpha < 1 && !mCaching) {
         if (!mHasOverlappingRendering) {
-            DISPLAY_LIST_LOGD("%s%s %.2f", indent, "SetAlpha", mAlpha);
             renderer.setAlpha(mAlpha);
         } else {
             // TODO: should be able to store the size of a DL at record time and not
@@ -861,53 +387,35 @@
             if (mClipChildren) {
                 flags |= SkCanvas::kClipToLayer_SaveFlag;
             }
-            DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha",
-                    (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop,
-                    mMultipliedAlpha, flags);
             renderer.saveLayerAlpha(0, 0, mRight - mLeft, mBottom - mTop,
                     mMultipliedAlpha, flags);
         }
     }
     if (mClipChildren) {
-        DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f,
-                (float) mRight - mLeft, (float) mBottom - mTop);
         renderer.clipRect(0, 0, mRight - mLeft, mBottom - mTop,
                 SkRegion::kIntersect_Op);
     }
 }
 
-/**
- * Changes to replay(), specifically those involving opcode or parameter changes, should be mimicked
- * in the output() function, since that function processes the same list of opcodes for the
- * purposes of logging display list info for a given view.
- */
 status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, uint32_t level) {
     status_t drawGlStatus = DrawGlInfo::kStatusDone;
-    TextContainer text;
-    mReader.rewind();
 
 #if DEBUG_DISPLAY_LIST
-    uint32_t count = (level + 1) * 2;
-    char indent[count + 1];
-    for (uint32_t i = 0; i < count; i++) {
-        indent[i] = ' ';
-    }
-    indent[count] = '\0';
     Rect* clipRect = renderer.getClipRect();
-    DISPLAY_LIST_LOGD("%sStart display list (%p, %s), clipRect: %.0f, %.f, %.0f, %.0f",
-            (char*) indent + 2, this, mName.string(), clipRect->left, clipRect->top,
+    DISPLAY_LIST_LOGD("%*sStart display list (%p, %s), clipRect: %.0f, %.f, %.0f, %.0f",
+            (level+1)*2, "", this, mName.string(), clipRect->left, clipRect->top,
             clipRect->right, clipRect->bottom);
 #endif
 
     renderer.startMark(mName.string());
 
     int restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
-    DISPLAY_LIST_LOGD("%s%s %d %d", indent, "Save",
+    DISPLAY_LIST_LOGD("%*sSave %d %d", level * 2, "",
             SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag, restoreTo);
     setViewProperties(renderer, level);
 
     if (renderer.quickRejectNoScissor(0, 0, mWidth, mHeight)) {
-        DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo);
+        DISPLAY_LIST_LOGD("%*sRestoreToCount %d", level * 2, "", restoreTo);
         renderer.restoreToCount(restoreTo);
         renderer.endMark();
         return drawGlStatus;
@@ -915,469 +423,22 @@
 
     DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance();
     int saveCount = renderer.getSaveCount() - 1;
-
-    while (!mReader.eof()) {
-        int op = mReader.readInt();
-        if (op & OP_MAY_BE_SKIPPED_MASK) {
-            int32_t skip = mReader.readInt();
-            if (CC_LIKELY(flags & kReplayFlag_ClipChildren)) {
-                mReader.skip(skip);
-                DISPLAY_LIST_LOGD("%s%s skipping %d bytes", (char*) indent,
-                        OP_NAMES[op & ~OP_MAY_BE_SKIPPED_MASK], skip);
-                continue;
-            } else {
-                op &= ~OP_MAY_BE_SKIPPED_MASK;
-            }
-        }
-        logBuffer.writeCommand(level, op);
-
+    for (unsigned int i = 0; i < mDisplayListData->displayListOps.size(); i++) {
+        DisplayListOp *op = mDisplayListData->displayListOps[i];
 #if DEBUG_DISPLAY_LIST_OPS_AS_EVENTS
-        Caches::getInstance().eventMark(strlen(OP_NAMES[op]), OP_NAMES[op]);
+        Caches::getInstance().eventMark(strlen(op->name()), op->name());
 #endif
 
-        switch (op) {
-            case DrawGLFunction: {
-                Functor *functor = (Functor *) getInt();
-                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor);
-                renderer.startMark("GL functor");
-                drawGlStatus |= renderer.callDrawGLFunction(functor, dirty);
-                renderer.endMark();
-            }
-            break;
-            case Save: {
-                int32_t rendererNum = getInt();
-                DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum);
-                renderer.save(rendererNum);
-            }
-            break;
-            case Restore: {
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                renderer.restore();
-            }
-            break;
-            case RestoreToCount: {
-                int32_t restoreCount = saveCount + getInt();
-                DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount);
-                renderer.restoreToCount(restoreCount);
-            }
-            break;
-            case SaveLayer: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                int32_t flags = getInt();
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent,
-                        OP_NAMES[op], f1, f2, f3, f4, paint, flags);
-                renderer.saveLayer(f1, f2, f3, f4, paint, flags);
-            }
-            break;
-            case SaveLayerAlpha: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                int32_t alpha = getInt();
-                int32_t flags = getInt();
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent,
-                        OP_NAMES[op], f1, f2, f3, f4, alpha, flags);
-                renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags);
-            }
-            break;
-            case Translate: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2);
-                renderer.translate(f1, f2);
-            }
-            break;
-            case Rotate: {
-                float rotation = getFloat();
-                DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation);
-                renderer.rotate(rotation);
-            }
-            break;
-            case Scale: {
-                float sx = getFloat();
-                float sy = getFloat();
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy);
-                renderer.scale(sx, sy);
-            }
-            break;
-            case Skew: {
-                float sx = getFloat();
-                float sy = getFloat();
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy);
-                renderer.skew(sx, sy);
-            }
-            break;
-            case SetMatrix: {
-                SkMatrix* matrix = getMatrix();
-                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix);
-                renderer.setMatrix(matrix);
-            }
-            break;
-            case ConcatMatrix: {
-                SkMatrix* matrix = getMatrix();
-                DISPLAY_LIST_LOGD(
-                        "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]",
-                        (char*) indent, OP_NAMES[op], matrix,
-                        matrix->get(0), matrix->get(1), matrix->get(2),
-                        matrix->get(3), matrix->get(4), matrix->get(5),
-                        matrix->get(6), matrix->get(7), matrix->get(8));
-                renderer.concatMatrix(matrix);
-            }
-            break;
-            case ClipRect: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                int32_t regionOp = getInt();
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op],
-                        f1, f2, f3, f4, regionOp);
-                renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp);
-            }
-            break;
-            case ClipPath: {
-                SkPath* path = getPath();
-                int32_t regionOp = getInt();
-                DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], regionOp);
-                renderer.clipPath(path, (SkRegion::Op) regionOp);
-            }
-            break;
-            case ClipRegion: {
-                SkRegion* region = getRegion();
-                int32_t regionOp = getInt();
-                DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], regionOp);
-                renderer.clipRegion(region, (SkRegion::Op) regionOp);
-            }
-            break;
-            case DrawDisplayList: {
-                DisplayList* displayList = getDisplayList();
-                int32_t flags = getInt();
-                DISPLAY_LIST_LOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op],
-                        displayList, mWidth, mHeight, flags, level + 1);
-                drawGlStatus |= renderer.drawDisplayList(displayList, dirty, flags, level + 1);
-            }
-            break;
-            case DrawLayer: {
-                int oldAlpha = -1;
-                Layer* layer = (Layer*) getInt();
-                float x = getFloat();
-                float y = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                if (mCaching && mMultipliedAlpha < 255) {
-                    oldAlpha = layer->getAlpha();
-                    layer->setAlpha(mMultipliedAlpha);
-                }
-                DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
-                        layer, x, y, paint);
-                drawGlStatus |= renderer.drawLayer(layer, x, y, paint);
-                if (oldAlpha >= 0) {
-                    layer->setAlpha(oldAlpha);
-                }
-            }
-            break;
-            case DrawBitmap: {
-                int oldAlpha = -1;
-                SkBitmap* bitmap = getBitmap();
-                float x = getFloat();
-                float y = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                if (mCaching && mMultipliedAlpha < 255) {
-                    oldAlpha = paint->getAlpha();
-                    paint->setAlpha(mMultipliedAlpha);
-                }
-                DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
-                        bitmap, x, y, paint);
-                drawGlStatus |= renderer.drawBitmap(bitmap, x, y, paint);
-                if (oldAlpha >= 0) {
-                    paint->setAlpha(oldAlpha);
-                }
-            }
-            break;
-            case DrawBitmapMatrix: {
-                SkBitmap* bitmap = getBitmap();
-                SkMatrix* matrix = getMatrix();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op],
-                        bitmap, matrix, paint);
-                drawGlStatus |= renderer.drawBitmap(bitmap, matrix, paint);
-            }
-            break;
-            case DrawBitmapRect: {
-                SkBitmap* bitmap = getBitmap();
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                float f5 = getFloat();
-                float f6 = getFloat();
-                float f7 = getFloat();
-                float f8 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p",
-                        (char*) indent, OP_NAMES[op], bitmap,
-                        f1, f2, f3, f4, f5, f6, f7, f8,paint);
-                drawGlStatus |= renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint);
-            }
-            break;
-            case DrawBitmapData: {
-                SkBitmap* bitmap = getBitmapData();
-                float x = getFloat();
-                float y = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
-                        bitmap, x, y, paint);
-                drawGlStatus |= renderer.drawBitmap(bitmap, x, y, paint);
-            }
-            break;
-            case DrawBitmapMesh: {
-                int32_t verticesCount = 0;
-                uint32_t colorsCount = 0;
-
-                SkBitmap* bitmap = getBitmap();
-                uint32_t meshWidth = getInt();
-                uint32_t meshHeight = getInt();
-                float* vertices = getFloats(verticesCount);
-                bool hasColors = getInt();
-                int32_t* colors = hasColors ? getInts(colorsCount) : NULL;
-                SkPaint* paint = getPaint(renderer);
-
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                drawGlStatus |= renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices,
-                        colors, paint);
-            }
-            break;
-            case DrawPatch: {
-                int32_t* xDivs = NULL;
-                int32_t* yDivs = NULL;
-                uint32_t* colors = NULL;
-                uint32_t xDivsCount = 0;
-                uint32_t yDivsCount = 0;
-                int8_t numColors = 0;
-
-                SkBitmap* bitmap = getBitmap();
-
-                xDivs = getInts(xDivsCount);
-                yDivs = getInts(yDivsCount);
-                colors = getUInts(numColors);
-
-                float left = getFloat();
-                float top = getFloat();
-                float right = getFloat();
-                float bottom = getFloat();
-
-                int alpha = getInt();
-                SkXfermode::Mode mode = (SkXfermode::Mode) getInt();
-
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                drawGlStatus |= renderer.drawPatch(bitmap, xDivs, yDivs, colors,
-                        xDivsCount, yDivsCount, numColors, left, top, right, bottom,
-                        alpha, mode);
-            }
-            break;
-            case DrawColor: {
-                int32_t color = getInt();
-                int32_t xferMode = getInt();
-                DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode);
-                drawGlStatus |= renderer.drawColor(color, (SkXfermode::Mode) xferMode);
-            }
-            break;
-            case DrawRect: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
-                        f1, f2, f3, f4, paint);
-                drawGlStatus |= renderer.drawRect(f1, f2, f3, f4, paint);
-            }
-            break;
-            case DrawRoundRect: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                float f5 = getFloat();
-                float f6 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p",
-                        (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint);
-                drawGlStatus |= renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint);
-            }
-            break;
-            case DrawCircle: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p",
-                        (char*) indent, OP_NAMES[op], f1, f2, f3, paint);
-                drawGlStatus |= renderer.drawCircle(f1, f2, f3, paint);
-            }
-            break;
-            case DrawOval: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p",
-                        (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint);
-                drawGlStatus |= renderer.drawOval(f1, f2, f3, f4, paint);
-            }
-            break;
-            case DrawArc: {
-                float f1 = getFloat();
-                float f2 = getFloat();
-                float f3 = getFloat();
-                float f4 = getFloat();
-                float f5 = getFloat();
-                float f6 = getFloat();
-                int32_t i1 = getInt();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p",
-                        (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint);
-                drawGlStatus |= renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint);
-            }
-            break;
-            case DrawPath: {
-                SkPath* path = getPath();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint);
-                drawGlStatus |= renderer.drawPath(path, paint);
-            }
-            break;
-            case DrawLines: {
-                int32_t count = 0;
-                float* points = getFloats(count);
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                drawGlStatus |= renderer.drawLines(points, count, paint);
-            }
-            break;
-            case DrawPoints: {
-                int32_t count = 0;
-                float* points = getFloats(count);
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                drawGlStatus |= renderer.drawPoints(points, count, paint);
-            }
-            break;
-            case DrawTextOnPath: {
-                getText(&text);
-                int32_t count = getInt();
-                SkPath* path = getPath();
-                float hOffset = getFloat();
-                float vOffset = getFloat();
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op],
-                    text.text(), text.length(), count, paint);
-                drawGlStatus |= renderer.drawTextOnPath(text.text(), text.length(), count, path,
-                        hOffset, vOffset, paint);
-            }
-            break;
-            case DrawPosText: {
-                getText(&text);
-                int32_t count = getInt();
-                int32_t positionsCount = 0;
-                float* positions = getFloats(positionsCount);
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent,
-                        OP_NAMES[op], text.text(), text.length(), count, paint);
-                drawGlStatus |= renderer.drawPosText(text.text(), text.length(), count,
-                        positions, paint);
-            }
-            break;
-            case DrawText: {
-                getText(&text);
-                int32_t count = getInt();
-                float x = getFloat();
-                float y = getFloat();
-                int32_t positionsCount = 0;
-                float* positions = getFloats(positionsCount);
-                SkPaint* paint = getPaint(renderer);
-                float length = getFloat();
-                DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent,
-                        OP_NAMES[op], text.text(), text.length(), count, x, y, paint, length);
-                drawGlStatus |= renderer.drawText(text.text(), text.length(), count,
-                        x, y, positions, paint, length);
-            }
-            break;
-            case DrawRects: {
-                int32_t count = 0;
-                float* rects = getFloats(count);
-                SkPaint* paint = getPaint(renderer);
-                DISPLAY_LIST_LOGD("%s%s %d, %p", (char*) indent, OP_NAMES[op], count, paint);
-                drawGlStatus |= renderer.drawRects(rects, count / 4, paint);
-            }
-            break;
-            case ResetShader: {
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                renderer.resetShader();
-            }
-            break;
-            case SetupShader: {
-                SkiaShader* shader = getShader();
-                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader);
-                renderer.setupShader(shader);
-            }
-            break;
-            case ResetColorFilter: {
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                renderer.resetColorFilter();
-            }
-            break;
-            case SetupColorFilter: {
-                SkiaColorFilter *colorFilter = getColorFilter();
-                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter);
-                renderer.setupColorFilter(colorFilter);
-            }
-            break;
-            case ResetShadow: {
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                renderer.resetShadow();
-            }
-            break;
-            case SetupShadow: {
-                float radius = getFloat();
-                float dx = getFloat();
-                float dy = getFloat();
-                int32_t color = getInt();
-                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op],
-                        radius, dx, dy, color);
-                renderer.setupShadow(radius, dx, dy, color);
-            }
-            break;
-            case ResetPaintFilter: {
-                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
-                renderer.resetPaintFilter();
-            }
-            break;
-            case SetupPaintFilter: {
-                int32_t clearBits = getInt();
-                int32_t setBits = getInt();
-                DISPLAY_LIST_LOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op],
-                        clearBits, setBits);
-                renderer.setupPaintFilter(clearBits, setBits);
-            }
-            break;
-            default:
-                DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s",
-                        (char*) indent, OP_NAMES[op]);
-                break;
-        }
+        drawGlStatus |= op->replay(renderer, dirty, flags,
+                saveCount, level, mCaching, mMultipliedAlpha);
+        logBuffer.writeCommand(level, op->name());
     }
 
-    DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo);
+    DISPLAY_LIST_LOGD("%*sRestoreToCount %d", level * 2, "", restoreTo);
     renderer.restoreToCount(restoreTo);
     renderer.endMark();
 
-    DISPLAY_LIST_LOGD("%sDone (%p, %s), returning %d", (char*) indent + 2, this, mName.string(),
+    DISPLAY_LIST_LOGD("%*sDone (%p, %s), returning %d", (level + 1) * 2, "", this, mName.string(),
             drawGlStatus);
     return drawGlStatus;
 }
@@ -1387,7 +448,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 DisplayListRenderer::DisplayListRenderer():
-        mCaches(Caches::getInstance()), mWriter(MIN_WRITER_SIZE),
+        mCaches(Caches::getInstance()), mDisplayListData(new DisplayListData),
         mTranslateX(0.0f), mTranslateY(0.0f), mHasTranslate(false),
         mHasDrawOps(false), mFunctorCount(0) {
 }
@@ -1397,8 +458,7 @@
 }
 
 void DisplayListRenderer::reset() {
-    mWriter.reset();
-
+    mDisplayListData = new DisplayListData();
     mCaches.resourceCache.lock();
 
     for (size_t i = 0; i < mBitmapResources.size(); i++) {
@@ -1493,7 +553,7 @@
 
 void DisplayListRenderer::finish() {
     insertRestoreToCount();
-    insertTranlate();
+    insertTranslate();
 }
 
 void DisplayListRenderer::interrupt() {
@@ -1504,15 +564,13 @@
 
 status_t DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) {
     // Ignore dirty during recording, it matters only when we replay
-    addOp(DisplayList::DrawGLFunction);
-    addInt((int) functor);
+    addDrawOp(new (alloc()) DrawFunctorOp(functor));
     mFunctorCount++;
     return DrawGlInfo::kStatusDone; // No invalidate needed at record-time
 }
 
 int DisplayListRenderer::save(int flags) {
-    addOp(DisplayList::Save);
-    addInt(flags);
+    addStateOp(new (alloc()) SaveOp(flags));
     return OpenGLRenderer::save(flags);
 }
 
@@ -1523,31 +581,25 @@
     }
 
     mRestoreSaveCount--;
-    insertTranlate();
+    insertTranslate();
     OpenGLRenderer::restore();
 }
 
 void DisplayListRenderer::restoreToCount(int saveCount) {
     mRestoreSaveCount = saveCount;
-    insertTranlate();
+    insertTranslate();
     OpenGLRenderer::restoreToCount(saveCount);
 }
 
 int DisplayListRenderer::saveLayer(float left, float top, float right, float bottom,
         SkPaint* p, int flags) {
-    addOp(DisplayList::SaveLayer);
-    addBounds(left, top, right, bottom);
-    addPaint(p);
-    addInt(flags);
+    addStateOp(new (alloc()) SaveLayerOp(left, top, right, bottom, p, flags));
     return OpenGLRenderer::save(flags);
 }
 
 int DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom,
         int alpha, int flags) {
-    addOp(DisplayList::SaveLayerAlpha);
-    addBounds(left, top, right, bottom);
-    addInt(alpha);
-    addInt(flags);
+    addStateOp(new (alloc()) SaveLayerAlphaOp(left, top, right, bottom, alpha, flags));
     return OpenGLRenderer::save(flags);
 }
 
@@ -1560,54 +612,47 @@
 }
 
 void DisplayListRenderer::rotate(float degrees) {
-    addOp(DisplayList::Rotate);
-    addFloat(degrees);
+    addStateOp(new (alloc()) RotateOp(degrees));
     OpenGLRenderer::rotate(degrees);
 }
 
 void DisplayListRenderer::scale(float sx, float sy) {
-    addOp(DisplayList::Scale);
-    addPoint(sx, sy);
+    addStateOp(new (alloc()) ScaleOp(sx, sy));
     OpenGLRenderer::scale(sx, sy);
 }
 
 void DisplayListRenderer::skew(float sx, float sy) {
-    addOp(DisplayList::Skew);
-    addPoint(sx, sy);
+    addStateOp(new (alloc()) SkewOp(sx, sy));
     OpenGLRenderer::skew(sx, sy);
 }
 
 void DisplayListRenderer::setMatrix(SkMatrix* matrix) {
-    addOp(DisplayList::SetMatrix);
-    addMatrix(matrix);
+    matrix = refMatrix(matrix);
+    addStateOp(new (alloc()) SetMatrixOp(matrix));
     OpenGLRenderer::setMatrix(matrix);
 }
 
 void DisplayListRenderer::concatMatrix(SkMatrix* matrix) {
-    addOp(DisplayList::ConcatMatrix);
-    addMatrix(matrix);
+    matrix = refMatrix(matrix);
+    addStateOp(new (alloc()) ConcatMatrixOp(matrix));
     OpenGLRenderer::concatMatrix(matrix);
 }
 
 bool DisplayListRenderer::clipRect(float left, float top, float right, float bottom,
         SkRegion::Op op) {
-    addOp(DisplayList::ClipRect);
-    addBounds(left, top, right, bottom);
-    addInt(op);
+    addStateOp(new (alloc()) ClipRectOp(left, top, right, bottom, op));
     return OpenGLRenderer::clipRect(left, top, right, bottom, op);
 }
 
 bool DisplayListRenderer::clipPath(SkPath* path, SkRegion::Op op) {
-    addOp(DisplayList::ClipPath);
-    addPath(path);
-    addInt(op);
+    path = refPath(path);
+    addStateOp(new (alloc()) ClipPathOp(path, op));
     return OpenGLRenderer::clipPath(path, op);
 }
 
 bool DisplayListRenderer::clipRegion(SkRegion* region, SkRegion::Op op) {
-    addOp(DisplayList::ClipRegion);
-    addRegion(region);
-    addInt(op);
+    region = refRegion(region);
+    addStateOp(new (alloc()) ClipRegionOp(region, op));
     return OpenGLRenderer::clipRegion(region, op);
 }
 
@@ -1616,84 +661,71 @@
     // dirty is an out parameter and should not be recorded,
     // it matters only when replaying the display list
 
-    addOp(DisplayList::DrawDisplayList);
-    addDisplayList(displayList);
-    addInt(flags);
+    // TODO: To be safe, the display list should be ref-counted in the
+    //       resources cache, but we rely on the caller (UI toolkit) to
+    //       do the right thing for now
+
+    addDrawOp(new (alloc()) DrawDisplayListOp(displayList, flags));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
-    addOp(DisplayList::DrawLayer);
-    addLayer(layer);
-    addPoint(x, y);
-    addPaint(paint);
+    mLayers.add(layer);
+    mCaches.resourceCache.incrementRefcount(layer);
+    paint = refPaint(paint);
+
+    addDrawOp(new (alloc()) DrawLayerOp(layer, x, y, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
-    const bool reject = quickRejectNoScissor(left, top,
-            left + bitmap->width(), top + bitmap->height());
-    uint32_t* location = addOp(DisplayList::DrawBitmap, reject);
-    addBitmap(bitmap);
-    addPoint(left, top);
-    addPaint(paint);
-    addSkip(location);
+    bitmap = refBitmap(bitmap);
+    paint = refPaint(paint);
+
+    addDrawOp(new (alloc()) DrawBitmapOp(bitmap, left, top, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) {
-    Rect r(0.0f, 0.0f, bitmap->width(), bitmap->height());
-    const mat4 transform(*matrix);
-    transform.mapRect(r);
+    bitmap = refBitmap(bitmap);
+    matrix = refMatrix(matrix);
+    paint = refPaint(paint);
 
-    const bool reject = quickRejectNoScissor(r.left, r.top, r.right, r.bottom);
-    uint32_t* location = addOp(DisplayList::DrawBitmapMatrix, reject);
-    addBitmap(bitmap);
-    addMatrix(matrix);
-    addPaint(paint);
-    addSkip(location);
+    addDrawOp(new (alloc()) DrawBitmapMatrixOp(bitmap, matrix, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
         float srcRight, float srcBottom, float dstLeft, float dstTop,
         float dstRight, float dstBottom, SkPaint* paint) {
-    const bool reject = quickRejectNoScissor(dstLeft, dstTop, dstRight, dstBottom);
-    uint32_t* location = addOp(DisplayList::DrawBitmapRect, reject);
-    addBitmap(bitmap);
-    addBounds(srcLeft, srcTop, srcRight, srcBottom);
-    addBounds(dstLeft, dstTop, dstRight, dstBottom);
-    addPaint(paint);
-    addSkip(location);
+    bitmap = refBitmap(bitmap);
+    paint = refPaint(paint);
+
+    addDrawOp(new (alloc()) DrawBitmapRectOp(bitmap,
+                    srcLeft, srcTop, srcRight, srcBottom,
+                    dstLeft, dstTop, dstRight, dstBottom, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top,
         SkPaint* paint) {
-    const bool reject = quickRejectNoScissor(left, top,
-            left + bitmap->width(), top + bitmap->height());
-    uint32_t* location = addOp(DisplayList::DrawBitmapData, reject);
-    addBitmapData(bitmap);
-    addPoint(left, top);
-    addPaint(paint);
-    addSkip(location);
+    bitmap = refBitmapData(bitmap);
+    paint = refPaint(paint);
+
+    addDrawOp(new (alloc()) DrawBitmapDataOp(bitmap, left, top, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
         float* vertices, int* colors, SkPaint* paint) {
-    addOp(DisplayList::DrawBitmapMesh);
-    addBitmap(bitmap);
-    addInt(meshWidth);
-    addInt(meshHeight);
-    addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2);
-    if (colors) {
-        addInt(1);
-        addInts(colors, (meshWidth + 1) * (meshHeight + 1));
-    } else {
-        addInt(0);
-    }
-    addPaint(paint);
+    int count = (meshWidth + 1) * (meshHeight + 1) * 2;
+    bitmap = refBitmap(bitmap);
+    vertices = refBuffer<float>(vertices, count);
+    paint = refPaint(paint);
+    colors = refBuffer<int>(colors, count);
+
+    addDrawOp(new (alloc()) DrawBitmapMeshOp(bitmap, meshWidth, meshHeight,
+                    vertices, colors, paint));
     return DrawGlInfo::kStatusDone;
 }
 
@@ -1704,132 +736,112 @@
     SkXfermode::Mode mode;
     OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode);
 
-    const bool reject = quickRejectNoScissor(left, top, right, bottom);
-    uint32_t* location = addOp(DisplayList::DrawPatch, reject);
-    addBitmap(bitmap);
-    addInts(xDivs, width);
-    addInts(yDivs, height);
-    addUInts(colors, numColors);
-    addBounds(left, top, right, bottom);
-    addInt(alpha);
-    addInt(mode);
-    addSkip(location);
+    bitmap = refBitmap(bitmap);
+    xDivs = refBuffer<int>(xDivs, width);
+    yDivs = refBuffer<int>(yDivs, height);
+    colors = refBuffer<uint32_t>(colors, numColors);
+
+    addDrawOp(new (alloc()) DrawPatchOp(bitmap, xDivs, yDivs, colors, width, height, numColors,
+                    left, top, right, bottom, alpha, mode));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) {
-    addOp(DisplayList::DrawColor);
-    addInt(color);
-    addInt(mode);
+    addDrawOp(new (alloc()) DrawColorOp(color, mode));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawRect(float left, float top, float right, float bottom,
         SkPaint* paint) {
-    const bool reject = paint->getStyle() == SkPaint::kFill_Style &&
-            quickRejectNoScissor(left, top, right, bottom);
-    uint32_t* location = addOp(DisplayList::DrawRect, reject);
-    addBounds(left, top, right, bottom);
-    addPaint(paint);
-    addSkip(location);
+    paint = refPaint(paint);
+    addDrawOp(new (alloc()) DrawRectOp(left, top, right, bottom, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom,
         float rx, float ry, SkPaint* paint) {
-    const bool reject = paint->getStyle() == SkPaint::kFill_Style &&
-            quickRejectNoScissor(left, top, right, bottom);
-    uint32_t* location = addOp(DisplayList::DrawRoundRect, reject);
-    addBounds(left, top, right, bottom);
-    addPoint(rx, ry);
-    addPaint(paint);
-    addSkip(location);
+    paint = refPaint(paint);
+    addDrawOp(new (alloc()) DrawRoundRectOp(left, top, right, bottom, rx, ry, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) {
-    addOp(DisplayList::DrawCircle);
-    addPoint(x, y);
-    addFloat(radius);
-    addPaint(paint);
+    paint = refPaint(paint);
+    addDrawOp(new (alloc()) DrawCircleOp(x, y, radius, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawOval(float left, float top, float right, float bottom,
         SkPaint* paint) {
-    addOp(DisplayList::DrawOval);
-    addBounds(left, top, right, bottom);
-    addPaint(paint);
+    paint = refPaint(paint);
+    addDrawOp(new (alloc()) DrawOvalOp(left, top, right, bottom, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawArc(float left, float top, float right, float bottom,
         float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) {
-    addOp(DisplayList::DrawArc);
-    addBounds(left, top, right, bottom);
-    addPoint(startAngle, sweepAngle);
-    addInt(useCenter ? 1 : 0);
-    addPaint(paint);
+    paint = refPaint(paint);
+    addDrawOp(new (alloc()) DrawArcOp(left, top, right, bottom,
+                    startAngle, sweepAngle, useCenter, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
-    float left, top, offset;
-    uint32_t width, height;
-    computePathBounds(path, paint, left, top, offset, width, height);
+    path = refPath(path);
+    paint = refPaint(paint);
 
-    left -= offset;
-    top -= offset;
-
-    const bool reject = quickRejectNoScissor(left, top, left + width, top + height);
-    uint32_t* location = addOp(DisplayList::DrawPath, reject);
-    addPath(path);
-    addPaint(paint);
-    addSkip(location);
+    addDrawOp(new (alloc()) DrawPathOp(path, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) {
-    addOp(DisplayList::DrawLines);
-    addFloats(points, count);
-    addPaint(paint);
+    points = refBuffer<float>(points, count);
+    paint = refPaint(paint);
+
+    addDrawOp(new (alloc()) DrawLinesOp(points, count, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) {
-    addOp(DisplayList::DrawPoints);
-    addFloats(points, count);
-    addPaint(paint);
+    points = refBuffer<float>(points, count);
+    paint = refPaint(paint);
+
+    addDrawOp(new (alloc()) DrawPointsOp(points, count, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count,
         SkPath* path, float hOffset, float vOffset, SkPaint* paint) {
     if (!text || count <= 0) return DrawGlInfo::kStatusDone;
-    addOp(DisplayList::DrawTextOnPath);
-    addText(text, bytesCount);
-    addInt(count);
-    addPath(path);
-    addFloat(hOffset);
-    addFloat(vOffset);
-    paint->setAntiAlias(true);
-    SkPaint* addedPaint = addPaint(paint);
-    FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint);
-    fontRenderer.precache(addedPaint, text, count, *mSnapshot->transform);
+
+    text = refText(text, bytesCount);
+    path = refPath(path);
+    paint = refPaint(paint);
+
+    DrawOp* op = new (alloc()) DrawTextOnPathOp(text, bytesCount, count, path,
+            hOffset, vOffset, paint);
+    if (addDrawOp(op)) {
+        // precache if draw operation is visible
+        FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(paint);
+        fontRenderer.precache(paint, text, count, *mSnapshot->transform);
+    }
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count,
         const float* positions, SkPaint* paint) {
     if (!text || count <= 0) return DrawGlInfo::kStatusDone;
-    addOp(DisplayList::DrawPosText);
-    addText(text, bytesCount);
-    addInt(count);
-    addFloats(positions, count * 2);
-    paint->setAntiAlias(true);
-    SkPaint* addedPaint = addPaint(paint);
-    FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint);
-    fontRenderer.precache(addedPaint, text, count, *mSnapshot->transform);
+
+    text = refText(text, bytesCount);
+    positions = refBuffer<float>(positions, count * 2);
+    paint = refPaint(paint);
+
+    DrawOp* op = new (alloc()) DrawPosTextOp(text, bytesCount, count, positions, paint);
+    if (addDrawOp(op)) {
+        // precache if draw operation is visible
+        FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(paint);
+        fontRenderer.precache(paint, text, count, *mSnapshot->transform);
+    }
     return DrawGlInfo::kStatusDone;
 }
 
@@ -1837,85 +849,98 @@
         float x, float y, const float* positions, SkPaint* paint, float length) {
     if (!text || count <= 0) return DrawGlInfo::kStatusDone;
 
-    // TODO: We should probably make a copy of the paint instead of modifying
-    //       it; modifying the paint will change its generationID the first
-    //       time, which might impact caches. More investigation needed to
-    //       see if it matters.
-    //       If we make a copy, then drawTextDecorations() should *not* make
-    //       its own copy as it does right now.
-    // Beware: this needs Glyph encoding (already done on the Paint constructor)
-    paint->setAntiAlias(true);
     if (length < 0.0f) length = paint->measureText(text, bytesCount);
 
-    bool reject = false;
-    if (CC_LIKELY(paint->getTextAlign() == SkPaint::kLeft_Align)) {
-        SkPaint::FontMetrics metrics;
-        paint->getFontMetrics(&metrics, 0.0f);
-        reject = quickRejectNoScissor(x, y + metrics.fTop, x + length, y + metrics.fBottom);
-    }
+    text = refText(text, bytesCount);
+    positions = refBuffer<float>(positions, count * 2);
+    paint = refPaint(paint);
 
-    uint32_t* location = addOp(DisplayList::DrawText, reject);
-    addText(text, bytesCount);
-    addInt(count);
-    addFloat(x);
-    addFloat(y);
-    addFloats(positions, count * 2);
-    SkPaint* addedPaint = addPaint(paint);
-    if (!reject) {
-        FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint);
-        fontRenderer.precache(addedPaint, text, count, *mSnapshot->transform);
+    DrawOp* op = new (alloc()) DrawTextOp(text, bytesCount, count, x, y, positions, paint, length);
+    if (addDrawOp(op)) {
+        // precache if draw operation is visible
+        FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(paint);
+        fontRenderer.precache(paint, text, count, *mSnapshot->transform);
     }
-    addFloat(length);
-    addSkip(location);
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawRects(const float* rects, int count, SkPaint* paint) {
     if (count <= 0) return DrawGlInfo::kStatusDone;
 
-    addOp(DisplayList::DrawRects);
-    addFloats(rects, count * 4);
-    addPaint(paint);
+    rects = refBuffer<float>(rects, count);
+    paint = refPaint(paint);
+    addDrawOp(new (alloc()) DrawRectsOp(rects, count, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 void DisplayListRenderer::resetShader() {
-    addOp(DisplayList::ResetShader);
+    addStateOp(new (alloc()) ResetShaderOp());
 }
 
 void DisplayListRenderer::setupShader(SkiaShader* shader) {
-    addOp(DisplayList::SetupShader);
-    addShader(shader);
+    shader = refShader(shader);
+    addStateOp(new (alloc()) SetupShaderOp(shader));
 }
 
 void DisplayListRenderer::resetColorFilter() {
-    addOp(DisplayList::ResetColorFilter);
+    addStateOp(new (alloc()) ResetColorFilterOp());
 }
 
 void DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) {
-    addOp(DisplayList::SetupColorFilter);
-    addColorFilter(filter);
+    filter = refColorFilter(filter);
+    addStateOp(new (alloc()) SetupColorFilterOp(filter));
 }
 
 void DisplayListRenderer::resetShadow() {
-    addOp(DisplayList::ResetShadow);
+    addStateOp(new (alloc()) ResetShadowOp());
 }
 
 void DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) {
-    addOp(DisplayList::SetupShadow);
-    addFloat(radius);
-    addPoint(dx, dy);
-    addInt(color);
+    addStateOp(new (alloc()) SetupShadowOp(radius, dx, dy, color));
 }
 
 void DisplayListRenderer::resetPaintFilter() {
-    addOp(DisplayList::ResetPaintFilter);
+    addStateOp(new (alloc()) ResetPaintFilterOp());
 }
 
 void DisplayListRenderer::setupPaintFilter(int clearBits, int setBits) {
-    addOp(DisplayList::SetupPaintFilter);
-    addInt(clearBits);
-    addInt(setBits);
+    addStateOp(new (alloc()) SetupPaintFilterOp(clearBits, setBits));
+}
+
+void DisplayListRenderer::insertRestoreToCount() {
+    if (mRestoreSaveCount >= 0) {
+        DisplayListOp* op = new (alloc()) RestoreToCountOp(mRestoreSaveCount);
+        mDisplayListData->displayListOps.add(op);
+        mRestoreSaveCount = -1;
+    }
+}
+
+void DisplayListRenderer::insertTranslate() {
+    if (mHasTranslate) {
+        if (mTranslateX != 0.0f || mTranslateY != 0.0f) {
+            DisplayListOp* op = new (alloc()) TranslateOp(mTranslateX, mTranslateY);
+            mDisplayListData->displayListOps.add(op);
+            mTranslateX = mTranslateY = 0.0f;
+        }
+        mHasTranslate = false;
+    }
+}
+
+void DisplayListRenderer::addStateOp(StateOp* op) {
+    addOpInternal(op);
+}
+
+bool DisplayListRenderer::addDrawOp(DrawOp* op) {
+    bool rejected = false;
+    Rect localBounds;
+    if (op->getLocalBounds(localBounds)) {
+        rejected = quickRejectNoScissor(localBounds.left, localBounds.top,
+                localBounds.right, localBounds.bottom);
+        op->setQuickRejected(rejected);
+    }
+    mHasDrawOps = true;
+    addOpInternal(op);
+    return !rejected;
 }
 
 }; // namespace uirenderer
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index f55f1f2..f3bd188 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -18,7 +18,8 @@
 #define ANDROID_HWUI_DISPLAY_LIST_RENDERER_H
 
 #include <SkChunkAlloc.h>
-#include <SkFlattenable.h>
+#include <SkReader32.h>
+#include <SkWriter32.h>
 #include <SkMatrix.h>
 #include <SkCamera.h>
 #include <SkPaint.h>
@@ -31,6 +32,7 @@
 
 #include "DisplayListLogBuffer.h"
 #include "OpenGLRenderer.h"
+#include "utils/LinearAllocator.h"
 
 namespace android {
 namespace uirenderer {
@@ -60,6 +62,18 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 class DisplayListRenderer;
+class DisplayListOp;
+class DrawOp;
+class StateOp;
+
+/**
+ * Refcounted structure that holds data used in display list stream
+ */
+class DisplayListData: public LightRefBase<DisplayListData> {
+public:
+    LinearAllocator allocator;
+    Vector<DisplayListOp*> displayListOps;
+};
 
 /**
  * Replays recorded drawing commands.
@@ -69,66 +83,13 @@
     DisplayList(const DisplayListRenderer& recorder);
     ANDROID_API ~DisplayList();
 
-    // IMPORTANT: Update the intialization of OP_NAMES in the .cpp file
-    //            when modifying this file
-    enum Op {
-        // Non-drawing operations
-        Save = 0,
-        Restore,
-        RestoreToCount,
-        SaveLayer,
-        SaveLayerAlpha,
-        Translate,
-        Rotate,
-        Scale,
-        Skew,
-        SetMatrix,
-        ConcatMatrix,
-        ClipRect,
-        ClipPath,
-        ClipRegion,
-        // Drawing operations
-        DrawDisplayList,
-        DrawLayer,
-        DrawBitmap,
-        DrawBitmapMatrix,
-        DrawBitmapRect,
-        DrawBitmapData,
-        DrawBitmapMesh,
-        DrawPatch,
-        DrawColor,
-        DrawRect,
-        DrawRoundRect,
-        DrawCircle,
-        DrawOval,
-        DrawArc,
-        DrawPath,
-        DrawLines,
-        DrawPoints,
-        DrawTextOnPath,
-        DrawPosText,
-        DrawText,
-        DrawRects,
-        ResetShader,
-        SetupShader,
-        ResetColorFilter,
-        SetupColorFilter,
-        ResetShadow,
-        SetupShadow,
-        ResetPaintFilter,
-        SetupPaintFilter,
-        DrawGLFunction,
-    };
-
     // See flags defined in DisplayList.java
     enum ReplayFlag {
         kReplayFlag_ClipChildren = 0x1
     };
 
-    static const char* OP_NAMES[];
-
     void setViewProperties(OpenGLRenderer& renderer, uint32_t level);
-    void outputViewProperties(OpenGLRenderer& renderer, char* indent);
+    void outputViewProperties(uint32_t level);
 
     ANDROID_API size_t getSize();
     ANDROID_API static void destroyDisplayListDeferred(DisplayList* displayList);
@@ -138,7 +99,7 @@
 
     status_t replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, uint32_t level = 0);
 
-    void output(OpenGLRenderer& renderer, uint32_t level = 0);
+    void output(uint32_t level = 0);
 
     ANDROID_API void reset();
 
@@ -423,78 +384,6 @@
         const char* mText;
     };
 
-    SkBitmap* getBitmap() {
-        return (SkBitmap*) getInt();
-    }
-
-    SkBitmap* getBitmapData() {
-        return (SkBitmap*) getInt();
-    }
-
-    SkiaShader* getShader() {
-        return (SkiaShader*) getInt();
-    }
-
-    SkiaColorFilter* getColorFilter() {
-        return (SkiaColorFilter*) getInt();
-    }
-
-    inline int32_t getIndex() {
-        return mReader.readInt();
-    }
-
-    inline int32_t getInt() {
-        return mReader.readInt();
-    }
-
-    inline uint32_t getUInt() {
-        return mReader.readU32();
-    }
-
-    SkMatrix* getMatrix() {
-        return (SkMatrix*) getInt();
-    }
-
-    SkPath* getPath() {
-        return (SkPath*) getInt();
-    }
-
-    SkRegion* getRegion() {
-        return (SkRegion*) getInt();
-    }
-
-    SkPaint* getPaint(OpenGLRenderer& renderer) {
-        return renderer.filterPaint((SkPaint*) getInt());
-    }
-
-    DisplayList* getDisplayList() {
-        return (DisplayList*) getInt();
-    }
-
-    inline float getFloat() {
-        return mReader.readScalar();
-    }
-
-    int32_t* getInts(uint32_t& count) {
-        count = getInt();
-        return (int32_t*) mReader.skip(count * sizeof(int32_t));
-    }
-
-    uint32_t* getUInts(int8_t& count) {
-        count = getInt();
-        return (uint32_t*) mReader.skip(count * sizeof(uint32_t));
-    }
-
-    float* getFloats(int32_t& count) {
-        count = getInt();
-        return (float*) mReader.skip(count * sizeof(float));
-    }
-
-    void getText(TextContainer* text) {
-        size_t length = text->mByteLength = getInt();
-        text->mText = (const char*) mReader.skip(length);
-    }
-
     Vector<SkBitmap*> mBitmapResources;
     Vector<SkBitmap*> mOwnedBitmapResources;
     Vector<SkiaColorFilter*> mFilterResources;
@@ -507,7 +396,7 @@
     Vector<SkiaShader*> mShaders;
     Vector<Layer*> mLayers;
 
-    mutable SkFlattenableReadBuffer mReader;
+    sp<DisplayListData> mDisplayListData;
 
     size_t mSize;
 
@@ -634,8 +523,8 @@
 
     ANDROID_API void reset();
 
-    const SkWriter32& writeStream() const {
-        return mWriter;
+    sp<DisplayListData> getDisplayListData() const {
+        return mDisplayListData;
     }
 
     const Vector<SkBitmap*>& getBitmapResources() const {
@@ -683,102 +572,32 @@
     }
 
 private:
-    void insertRestoreToCount() {
-        if (mRestoreSaveCount >= 0) {
-            mWriter.writeInt(DisplayList::RestoreToCount);
-            addInt(mRestoreSaveCount);
-            mRestoreSaveCount = -1;
-        }
-    }
+    void insertRestoreToCount();
+    void insertTranslate();
 
-    void insertTranlate() {
-        if (mHasTranslate) {
-            if (mTranslateX != 0.0f || mTranslateY != 0.0f) {
-                mWriter.writeInt(DisplayList::Translate);
-                addPoint(mTranslateX, mTranslateY);
-                mTranslateX = mTranslateY = 0.0f;
-            }
-            mHasTranslate = false;
-        }
-    }
-
-    inline void addOp(const DisplayList::Op drawOp) {
+    LinearAllocator& alloc() { return mDisplayListData->allocator; }
+    void addStateOp(StateOp* op);
+    bool addDrawOp(DrawOp* op); // returns true if op not rejected
+    void addOpInternal(DisplayListOp* op) {
         insertRestoreToCount();
-        insertTranlate();
-        mWriter.writeInt(drawOp);
-        mHasDrawOps = mHasDrawOps || drawOp >= DisplayList::DrawDisplayList;
+        insertTranslate();
+        mDisplayListData->displayListOps.add(op);
     }
 
-    uint32_t* addOp(const DisplayList::Op drawOp, const bool reject) {
-        insertRestoreToCount();
-        insertTranlate();
-        mHasDrawOps = mHasDrawOps || drawOp >= DisplayList::DrawDisplayList;
-        if (reject) {
-            mWriter.writeInt(OP_MAY_BE_SKIPPED_MASK | drawOp);
-            mWriter.writeInt(0xdeaddead);
-            mBufferSize = mWriter.size();
-            return mWriter.peek32(mBufferSize - sizeof(int32_t));
-        }
-        mWriter.writeInt(drawOp);
-        return NULL;
+    template<class T>
+    inline T* refBuffer(const T* srcBuffer, int32_t count) {
+        if (srcBuffer == NULL) return NULL;
+        T* dstBuffer = (T*) mDisplayListData->allocator.alloc(count * sizeof(T));
+        memcpy(dstBuffer, srcBuffer, count * sizeof(T));
+        return dstBuffer;
     }
 
-    inline void addSkip(uint32_t* location) {
-        if (location) {
-            *location = (int32_t) (mWriter.size() - mBufferSize);
-        }
+    inline char* refText(const char* text, size_t byteLength) {
+        return (char*) refBuffer<uint8_t>((uint8_t*)text, byteLength);
     }
 
-    inline void addInt(int32_t value) {
-        mWriter.writeInt(value);
-    }
-
-    inline void addSize(uint32_t w, uint32_t h) {
-        mWriter.writeInt(w);
-        mWriter.writeInt(h);
-    }
-
-    void addInts(const int32_t* values, uint32_t count) {
-        mWriter.writeInt(count);
-        mWriter.write(values, count * sizeof(int32_t));
-    }
-
-    void addUInts(const uint32_t* values, int8_t count) {
-        mWriter.writeInt(count);
-        mWriter.write(values, count * sizeof(uint32_t));
-    }
-
-    inline void addFloat(float value) {
-        mWriter.writeScalar(value);
-    }
-
-    void addFloats(const float* values, int32_t count) {
-        mWriter.writeInt(count);
-        mWriter.write(values, count * sizeof(float));
-    }
-
-    inline void addPoint(float x, float y) {
-        mWriter.writeScalar(x);
-        mWriter.writeScalar(y);
-    }
-
-    inline void addBounds(float left, float top, float right, float bottom) {
-        mWriter.writeScalar(left);
-        mWriter.writeScalar(top);
-        mWriter.writeScalar(right);
-        mWriter.writeScalar(bottom);
-    }
-
-    inline void addText(const void* text, size_t byteLength) {
-        mWriter.writeInt(byteLength);
-        mWriter.writePad(text, byteLength);
-    }
-
-    inline void addPath(SkPath* path) {
-        if (!path) {
-            addInt((int) NULL);
-            return;
-        }
+    inline SkPath* refPath(SkPath* path) {
+        if (!path) return NULL;
 
         SkPath* pathCopy = mPathMap.valueFor(path);
         if (pathCopy == NULL || pathCopy->getGenerationID() != path->getGenerationID()) {
@@ -792,13 +611,11 @@
             mCaches.resourceCache.incrementRefcount(path);
             mSourcePaths.add(path);
         }
-
-        addInt((int) pathCopy);
+        return pathCopy;
     }
 
-    inline SkPaint* addPaint(SkPaint* paint) {
+    inline SkPaint* refPaint(SkPaint* paint) {
         if (!paint) {
-            addInt((int) NULL);
             return paint;
         }
 
@@ -810,14 +627,11 @@
             mPaints.add(paintCopy);
         }
 
-        addInt((int) paintCopy);
-
         return paintCopy;
     }
 
-    inline SkRegion* addRegion(SkRegion* region) {
+    inline SkRegion* refRegion(SkRegion* region) {
         if (!region) {
-            addInt((int) NULL);
             return region;
         }
 
@@ -830,53 +644,35 @@
             mRegions.add(regionCopy);
         }
 
-        addInt((int) regionCopy);
-
         return regionCopy;
     }
 
-    inline void addDisplayList(DisplayList* displayList) {
-        // TODO: To be safe, the display list should be ref-counted in the
-        //       resources cache, but we rely on the caller (UI toolkit) to
-        //       do the right thing for now
-        addInt((int) displayList);
-    }
-
-    inline void addMatrix(SkMatrix* matrix) {
+    inline SkMatrix* refMatrix(SkMatrix* matrix) {
         // Copying the matrix is cheap and prevents against the user changing the original
         // matrix before the operation that uses it
         SkMatrix* copy = new SkMatrix(*matrix);
-        addInt((int) copy);
         mMatrices.add(copy);
+        return copy;
     }
 
-    inline void addLayer(Layer* layer) {
-        addInt((int) layer);
-        mLayers.add(layer);
-        mCaches.resourceCache.incrementRefcount(layer);
-    }
-
-    inline void addBitmap(SkBitmap* bitmap) {
+    inline SkBitmap* refBitmap(SkBitmap* bitmap) {
         // Note that this assumes the bitmap is immutable. There are cases this won't handle
         // correctly, such as creating the bitmap from scratch, drawing with it, changing its
         // contents, and drawing again. The only fix would be to always copy it the first time,
         // which doesn't seem worth the extra cycles for this unlikely case.
-        addInt((int) bitmap);
         mBitmapResources.add(bitmap);
         mCaches.resourceCache.incrementRefcount(bitmap);
+        return bitmap;
     }
 
-    void addBitmapData(SkBitmap* bitmap) {
-        addInt((int) bitmap);
+    inline SkBitmap* refBitmapData(SkBitmap* bitmap) {
         mOwnedBitmapResources.add(bitmap);
         mCaches.resourceCache.incrementRefcount(bitmap);
+        return bitmap;
     }
 
-    inline void addShader(SkiaShader* shader) {
-        if (!shader) {
-            addInt((int) NULL);
-            return;
-        }
+    inline SkiaShader* refShader(SkiaShader* shader) {
+        if (!shader) return NULL;
 
         SkiaShader* shaderCopy = mShaderMap.valueFor(shader);
         // TODO: We also need to handle generation ID changes in compose shaders
@@ -887,14 +683,13 @@
             mShaders.add(shaderCopy);
             mCaches.resourceCache.incrementRefcount(shaderCopy);
         }
-
-        addInt((int) shaderCopy);
+        return shaderCopy;
     }
 
-    inline void addColorFilter(SkiaColorFilter* colorFilter) {
-        addInt((int) colorFilter);
+    inline SkiaColorFilter* refColorFilter(SkiaColorFilter* colorFilter) {
         mFilterResources.add(colorFilter);
         mCaches.resourceCache.incrementRefcount(colorFilter);
+        return colorFilter;
     }
 
     Vector<SkBitmap*> mBitmapResources;
@@ -919,12 +714,10 @@
 
     Vector<Layer*> mLayers;
 
-    uint32_t mBufferSize;
-
     int mRestoreSaveCount;
 
     Caches& mCaches;
-    SkWriter32 mWriter;
+    sp<DisplayListData> mDisplayListData;
 
     float mTranslateX;
     float mTranslateY;
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 5c1eb38..d8297da 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -16,6 +16,7 @@
 
 #define LOG_TAG "OpenGLRenderer"
 
+#include <SkGlyph.h>
 #include <SkUtils.h>
 
 #include <cutils/properties.h>
@@ -218,12 +219,14 @@
         cacheTexture->allocateTexture();
     }
 
-    uint8_t* cacheBuffer = cacheTexture->getTexture();
-    uint8_t* bitmapBuffer = (uint8_t*) glyph.fImage;
-    unsigned int stride = glyph.rowBytes();
+    // Tells us whether the glyphs is B&W (1 bit per pixel)
+    // or anti-aliased (8 bits per pixel)
+    SkMask::Format format = static_cast<SkMask::Format>(glyph.fMaskFormat);
 
+    uint8_t* cacheBuffer = cacheTexture->getTexture();
     uint32_t cacheX = 0, bX = 0, cacheY = 0, bY = 0;
 
+    // Zero out the borders
     for (cacheX = startX - TEXTURE_BORDER_SIZE; cacheX < endX + TEXTURE_BORDER_SIZE; cacheX++) {
         cacheBuffer[(startY - TEXTURE_BORDER_SIZE) * cacheWidth + cacheX] = 0;
         cacheBuffer[(endY + TEXTURE_BORDER_SIZE - 1) * cacheWidth + cacheX] = 0;
@@ -235,20 +238,49 @@
         cacheBuffer[cacheY * cacheWidth + endX + TEXTURE_BORDER_SIZE - 1] = 0;
     }
 
-    if (mGammaTable) {
-        for (cacheX = startX, bX = 0; cacheX < endX; cacheX++, bX++) {
-            for (cacheY = startY, bY = 0; cacheY < endY; cacheY++, bY++) {
-                uint8_t tempCol = bitmapBuffer[bY * stride + bX];
-                cacheBuffer[cacheY * cacheWidth + cacheX] = mGammaTable[tempCol];
+    // Copy the glyph image, taking the mask format into account
+    uint8_t* bitmapBuffer = (uint8_t*) glyph.fImage;
+    int stride = glyph.rowBytes();
+
+    switch (format) {
+        case SkMask::kA8_Format: {
+            if (mGammaTable) {
+                for (cacheY = startY, bY = 0; cacheY < endY; cacheY++, bY += stride) {
+                    for (cacheX = startX, bX = 0; cacheX < endX; cacheX++, bX++) {
+                        uint8_t tempCol = bitmapBuffer[bY + bX];
+                        cacheBuffer[cacheY * cacheWidth + cacheX] = mGammaTable[tempCol];
+                    }
+                }
+            } else {
+                for (cacheY = startY, bY = 0; cacheY < endY; cacheY++, bY += stride) {
+                    memcpy(&cacheBuffer[cacheY * cacheWidth + startX], &bitmapBuffer[bY],
+                            glyph.fWidth);
+                }
             }
+            break;
         }
-    } else {
-        for (cacheX = startX, bX = 0; cacheX < endX; cacheX++, bX++) {
-            for (cacheY = startY, bY = 0; cacheY < endY; cacheY++, bY++) {
-                uint8_t tempCol = bitmapBuffer[bY * stride + bX];
-                cacheBuffer[cacheY * cacheWidth + cacheX] = tempCol;
+        case SkMask::kBW_Format: {
+            static const uint8_t COLORS[2] = { 0, 255 };
+
+            for (cacheY = startY; cacheY < endY; cacheY++) {
+                cacheX = startX;
+                int rowBytes = stride;
+                uint8_t* buffer = bitmapBuffer;
+
+                while (--rowBytes >= 0) {
+                    uint8_t b = *buffer++;
+                    for (int8_t mask = 7; mask >= 0 && cacheX < endX; mask--) {
+                        cacheBuffer[cacheY * cacheWidth + cacheX++] = COLORS[(b >> mask) & 0x1];
+                    }
+                }
+
+                bitmapBuffer += stride;
             }
+            break;
         }
+        default:
+            ALOGW("Unkown glyph format: 0x%x", format);
+            break;
     }
 
     cachedGlyph->mIsValid = true;
diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h
index a551b3f..a580d89 100644
--- a/libs/hwui/Layer.h
+++ b/libs/hwui/Layer.h
@@ -23,6 +23,7 @@
 
 #include <ui/Region.h>
 
+#include <SkPaint.h>
 #include <SkXfermode.h>
 
 #include "Rect.h"
@@ -277,6 +278,10 @@
      * Texture coordinates of the layer.
      */
     Rect texCoords;
+    /**
+     * Clipping rectangle.
+     */
+    Rect clipRect;
 
     /**
      * Dirty region indicating what parts of the layer
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index 61bedbb..c8a8ed4 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -62,6 +62,7 @@
         android::Rect r(dirty.left, dirty.top, dirty.right, dirty.bottom);
         mLayer->region.subtractSelf(r);
     }
+    mLayer->clipRect.set(dirty);
 
     return OpenGLRenderer::prepareDirty(dirty.left, dirty.top, dirty.right, dirty.bottom, opaque);
 }
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index f55bc9d..1a760a8 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -33,7 +33,7 @@
 
 #include "OpenGLRenderer.h"
 #include "DisplayListRenderer.h"
-#include "PathRenderer.h"
+#include "PathTessellator.h"
 #include "Properties.h"
 #include "Vector.h"
 
@@ -80,7 +80,7 @@
     { SkXfermode::kDstATop_Mode,  GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA },
     { SkXfermode::kXor_Mode,      GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA },
     { SkXfermode::kPlus_Mode,     GL_ONE,                 GL_ONE },
-    { SkXfermode::kMultiply_Mode, GL_ZERO,                GL_SRC_COLOR },
+    { SkXfermode::kModulate_Mode, GL_ZERO,                GL_SRC_COLOR },
     { SkXfermode::kScreen_Mode,   GL_ONE,                 GL_ONE_MINUS_SRC_COLOR }
 };
 
@@ -101,7 +101,7 @@
     { SkXfermode::kDstATop_Mode,  GL_DST_ALPHA,           GL_ONE_MINUS_SRC_ALPHA },
     { SkXfermode::kXor_Mode,      GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA },
     { SkXfermode::kPlus_Mode,     GL_ONE,                 GL_ONE },
-    { SkXfermode::kMultiply_Mode, GL_DST_COLOR,           GL_ZERO },
+    { SkXfermode::kModulate_Mode, GL_DST_COLOR,           GL_ZERO },
     { SkXfermode::kScreen_Mode,   GL_ONE_MINUS_DST_COLOR, GL_ONE }
 };
 
@@ -142,6 +142,18 @@
 // Setup
 ///////////////////////////////////////////////////////////////////////////////
 
+void OpenGLRenderer::setName(const char* name) {
+    if (name) {
+        mName.setTo(name);
+    } else {
+        mName.clear();
+    }
+}
+
+const char* OpenGLRenderer::getName() const {
+    return mName.string();
+}
+
 bool OpenGLRenderer::isDeferred() {
     return false;
 }
@@ -169,8 +181,8 @@
     return prepareDirty(0.0f, 0.0f, mWidth, mHeight, opaque);
 }
 
-status_t OpenGLRenderer::prepareDirty(float left, float top, float right, float bottom,
-        bool opaque) {
+status_t OpenGLRenderer::prepareDirty(float left, float top,
+        float right, float bottom, bool opaque) {
     mCaches.clearGarbage();
 
     mSnapshot = new Snapshot(mFirstSnapshot,
@@ -206,8 +218,10 @@
     // the back buffer for this frame.
     if (mCaches.extensions.hasDiscardFramebuffer() &&
             left <= 0.0f && top <= 0.0f && right >= mWidth && bottom >= mHeight) {
-        const GLenum attachments[] = { getTargetFbo() == 0 ? (const GLenum) GL_COLOR_EXT :
-                (const GLenum) GL_COLOR_ATTACHMENT0 };
+        const bool isFbo = getTargetFbo() == 0;
+        const GLenum attachments[] = {
+                isFbo ? (const GLenum) GL_COLOR_EXT : (const GLenum) GL_COLOR_ATTACHMENT0,
+                isFbo ? (const GLenum) GL_STENCIL_EXT : (const GLenum) GL_STENCIL_ATTACHMENT };
         glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, attachments);
     }
 }
@@ -237,12 +251,18 @@
 void OpenGLRenderer::startTiling(const sp<Snapshot>& s, bool opaque) {
     if (!mSuppressTiling) {
         Rect* clip = mTilingSnapshot->clipRect;
-        if (s->flags & Snapshot::kFlagIsFboLayer) {
-            clip = s->clipRect;
+        if (s->flags & Snapshot::kFlagFboTarget) {
+            clip = &s->layer->clipRect;
         }
 
-        mCaches.startTiling(clip->left, s->height - clip->bottom,
-                clip->right - clip->left, clip->bottom - clip->top, opaque);
+        startTiling(*clip, s->height, opaque);
+    }
+}
+
+void OpenGLRenderer::startTiling(const Rect& clip, int windowHeight, bool opaque) {
+    if (!mSuppressTiling) {
+        mCaches.startTiling(clip.left, windowHeight - clip.bottom,
+                    clip.right - clip.left, clip.bottom - clip.top, opaque);
     }
 }
 
@@ -782,18 +802,17 @@
 }
 
 bool OpenGLRenderer::createFboLayer(Layer* layer, Rect& bounds, Rect& clip, GLuint previousFbo) {
+    layer->clipRect.set(clip);
     layer->setFbo(mCaches.fboCache.get());
 
     mSnapshot->region = &mSnapshot->layer->region;
-    mSnapshot->flags |= Snapshot::kFlagFboTarget;
-
-    mSnapshot->flags |= Snapshot::kFlagIsFboLayer;
+    mSnapshot->flags |= Snapshot::kFlagFboTarget | Snapshot::kFlagIsFboLayer |
+            Snapshot::kFlagDirtyOrtho;
     mSnapshot->fbo = layer->getFbo();
     mSnapshot->resetTransform(-bounds.left, -bounds.top, 0.0f);
     mSnapshot->resetClip(clip.left, clip.top, clip.right, clip.bottom);
     mSnapshot->viewport.set(0.0f, 0.0f, bounds.getWidth(), bounds.getHeight());
     mSnapshot->height = bounds.getHeight();
-    mSnapshot->flags |= Snapshot::kFlagDirtyOrtho;
     mSnapshot->orthoMatrix.load(mOrthoMatrix);
 
     endTiling();
@@ -811,7 +830,7 @@
     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
             layer->getTexture(), 0);
 
-    startTiling(mSnapshot);
+    startTiling(mSnapshot, true);
 
     // Clear the FBO, expand the clear region by 1 to get nice bilinear filtering
     mCaches.enableScissor();
@@ -1096,7 +1115,7 @@
         rects.push(r.fTop);
         rects.push(r.fRight);
         rects.push(r.fBottom);
-        count++;
+        count += 4;
         it.next();
     }
 
@@ -1245,6 +1264,11 @@
 void OpenGLRenderer::attachStencilBufferToLayer(Layer* layer) {
     // The layer's FBO is already bound when we reach this stage
     if (!layer->getStencilRenderBuffer()) {
+        // GL_QCOM_tiled_rendering doesn't like it if a renderbuffer
+        // is attached after we initiated tiling. We must turn it off,
+        // attach the new render buffer then turn tiling back on
+        endTiling();
+
         // TODO: See Layer::removeFbo(). The stencil renderbuffer should be cached
         GLuint buffer;
         glGenRenderbuffers(1, &buffer);
@@ -1254,6 +1278,8 @@
         layer->allocateStencilRenderBuffer();
 
         glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, buffer);
+
+        startTiling(layer->clipRect, layer->layer.getHeight());
     }
 }
 
@@ -1457,10 +1483,6 @@
     mDescription.isAA = true;
 }
 
-void OpenGLRenderer::setupDrawVertexShape() {
-    mDescription.isVertexShape = true;
-}
-
 void OpenGLRenderer::setupDrawPoint(float pointSize) {
     mDescription.isPoint = true;
     mDescription.pointSize = pointSize;
@@ -1676,41 +1698,6 @@
     mCaches.unbindIndicesBuffer();
 }
 
-/**
- * Sets up the shader to draw an AA line. We draw AA lines with quads, where there is an
- * outer boundary that fades out to 0. The variables set in the shader define the proportion of
- * the width and length of the primitive occupied by the AA region. The vtxWidth and vtxLength
- * attributes (one per vertex) are values from zero to one that tells the fragment
- * shader where the fragment is in relation to the line width/length overall; these values are
- * then used to compute the proper color, based on whether the fragment lies in the fading AA
- * region of the line.
- * Note that we only pass down the width values in this setup function. The length coordinates
- * are set up for each individual segment.
- */
-void OpenGLRenderer::setupDrawAALine(GLvoid* vertices, GLvoid* widthCoords,
-        GLvoid* lengthCoords, float boundaryWidthProportion, int& widthSlot, int& lengthSlot) {
-    bool force = mCaches.unbindMeshBuffer();
-    mCaches.bindPositionVertexPointer(force, vertices, gAAVertexStride);
-    mCaches.resetTexCoordsVertexPointer();
-    mCaches.unbindIndicesBuffer();
-
-    widthSlot = mCaches.currentProgram->getAttrib("vtxWidth");
-    glEnableVertexAttribArray(widthSlot);
-    glVertexAttribPointer(widthSlot, 1, GL_FLOAT, GL_FALSE, gAAVertexStride, widthCoords);
-
-    lengthSlot = mCaches.currentProgram->getAttrib("vtxLength");
-    glEnableVertexAttribArray(lengthSlot);
-    glVertexAttribPointer(lengthSlot, 1, GL_FLOAT, GL_FALSE, gAAVertexStride, lengthCoords);
-
-    int boundaryWidthSlot = mCaches.currentProgram->getUniform("boundaryWidth");
-    glUniform1f(boundaryWidthSlot, boundaryWidthProportion);
-}
-
-void OpenGLRenderer::finishDrawAALine(const int widthSlot, const int lengthSlot) {
-    glDisableVertexAttribArray(widthSlot);
-    glDisableVertexAttribArray(lengthSlot);
-}
-
 void OpenGLRenderer::finishDrawTexture() {
 }
 
@@ -1732,7 +1719,7 @@
 
 void OpenGLRenderer::outputDisplayList(DisplayList* displayList, uint32_t level) {
     if (displayList) {
-        displayList->output(*this, level);
+        displayList->output(level);
     }
 }
 
@@ -2071,40 +2058,26 @@
     return DrawGlInfo::kStatusDrew;
 }
 
-/**
- * Renders a convex path via tessellation. For AA paths, this function uses a similar approach to
- * that of AA lines in the drawLines() function.  We expand the convex path by a half pixel in
- * screen space in all directions. However, instead of using a fragment shader to compute the
- * translucency of the color from its position, we simply use a varying parameter to define how far
- * a given pixel is from the edge. For non-AA paths, the expansion and alpha varying are not used.
- *
- * Doesn't yet support joins, caps, or path effects.
- */
-void OpenGLRenderer::drawConvexPath(const SkPath& path, SkPaint* paint) {
-    int color = paint->getColor();
-    SkPaint::Style style = paint->getStyle();
-    SkXfermode::Mode mode = getXfermode(paint->getXfermode());
-    bool isAA = paint->isAntiAlias();
-
-    VertexBuffer vertexBuffer;
-    // TODO: try clipping large paths to viewport
-    PathRenderer::convexPathVertices(path, paint, mSnapshot->transform, vertexBuffer);
-
+status_t OpenGLRenderer::drawVertexBuffer(const VertexBuffer& vertexBuffer, SkPaint* paint,
+        bool useOffset) {
     if (!vertexBuffer.getSize()) {
         // no vertices to draw
-        return;
+        return DrawGlInfo::kStatusDone;
     }
 
+    int color = paint->getColor();
+    SkXfermode::Mode mode = getXfermode(paint->getXfermode());
+    bool isAA = paint->isAntiAlias();
+
     setupDraw();
     setupDrawNoTexture();
     if (isAA) setupDrawAA();
-    setupDrawVertexShape();
     setupDrawColor(color, ((color >> 24) & 0xFF) * mSnapshot->alpha);
     setupDrawColorFilter();
     setupDrawShader();
     setupDrawBlending(isAA, mode);
     setupDrawProgram();
-    setupDrawModelViewIdentity();
+    setupDrawModelViewIdentity(useOffset);
     setupDrawColorUniforms();
     setupDrawColorFilterUniforms();
     setupDrawShaderIdentityUniforms();
@@ -2125,286 +2098,59 @@
         glVertexAttribPointer(alphaSlot, 1, GL_FLOAT, GL_FALSE, gAlphaVertexStride, alphaCoords);
     }
 
-    SkRect bounds = PathRenderer::computePathBounds(path, paint);
-    dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *mSnapshot->transform);
-
     glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexBuffer.getSize());
 
     if (isAA) {
         glDisableVertexAttribArray(alphaSlot);
     }
+
+    return DrawGlInfo::kStatusDrew;
 }
 
 /**
- * We draw lines as quads (tristrips). Using GL_LINES can be difficult because the rasterization
- * rules for those lines produces some unexpected results, and may vary between hardware devices.
- * The basics of lines-as-quads is easy; we simply find the normal to the line and position the
- * corners of the quads on either side of each line endpoint, separated by the strokeWidth
- * of the line. Hairlines are more involved because we need to account for transform scaling
- * to end up with a one-pixel-wide line in screen space..
- * Anti-aliased lines add another factor to the approach. We use a specialized fragment shader
- * in combination with values that we calculate and pass down in this method. The basic approach
- * is that the quad we create contains both the core line area plus a bounding area in which
- * the translucent/AA pixels are drawn. The values we calculate tell the shader what
- * proportion of the width and the length of a given segment is represented by the boundary
- * region. The quad ends up being exactly .5 pixel larger in all directions than the non-AA quad.
- * The bounding region is actually 1 pixel wide on all sides (half pixel on the outside, half pixel
- * on the inside). This ends up giving the result we want, with pixels that are completely
- * 'inside' the line area being filled opaquely and the other pixels being filled according to
- * how far into the boundary region they are, which is determined by shader interpolation.
+ * Renders a convex path via tessellation. For AA paths, this function uses a similar approach to
+ * that of AA lines in the drawLines() function.  We expand the convex path by a half pixel in
+ * screen space in all directions. However, instead of using a fragment shader to compute the
+ * translucency of the color from its position, we simply use a varying parameter to define how far
+ * a given pixel is from the edge. For non-AA paths, the expansion and alpha varying are not used.
+ *
+ * Doesn't yet support joins, caps, or path effects.
+ */
+status_t OpenGLRenderer::drawConvexPath(const SkPath& path, SkPaint* paint) {
+    VertexBuffer vertexBuffer;
+    // TODO: try clipping large paths to viewport
+    PathTessellator::tessellatePath(path, paint, mSnapshot->transform, vertexBuffer);
+
+    SkRect bounds = path.getBounds();
+    PathTessellator::expandBoundsForStroke(bounds, paint, false);
+    dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *mSnapshot->transform);
+
+    return drawVertexBuffer(vertexBuffer, paint);
+}
+
+/**
+ * We create tristrips for the lines much like shape stroke tessellation, using a per-vertex alpha
+ * and additional geometry for defining an alpha slope perimeter.
+ *
+ * Using GL_LINES can be difficult because the rasterization rules for those lines produces some
+ * unexpected results, and may vary between hardware devices. Previously we used a varying-base
+ * in-shader alpha region, but found it to be taxing on some GPUs.
+ *
+ * TODO: try using a fixed input buffer for non-capped lines as in text rendering. this may reduce
+ * memory transfer by removing need for degenerate vertices.
  */
 status_t OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) {
-    if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
+    if (mSnapshot->isIgnored() || count < 4) return DrawGlInfo::kStatusDone;
 
-    const bool isAA = paint->isAntiAlias();
-    // We use half the stroke width here because we're going to position the quad
-    // corner vertices half of the width away from the line endpoints
-    float halfStrokeWidth = paint->getStrokeWidth() * 0.5f;
-    // A stroke width of 0 has a special meaning in Skia:
-    // it draws a line 1 px wide regardless of current transform
-    bool isHairLine = paint->getStrokeWidth() == 0.0f;
+    count &= ~0x3; // round down to nearest four
 
-    float inverseScaleX = 1.0f;
-    float inverseScaleY = 1.0f;
-    bool scaled = false;
+    VertexBuffer buffer;
+    SkRect bounds;
+    PathTessellator::tessellateLines(points, count, paint, mSnapshot->transform, bounds, buffer);
+    dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *mSnapshot->transform);
 
-    int alpha;
-    SkXfermode::Mode mode;
-
-    int generatedVerticesCount = 0;
-    int verticesCount = count;
-    if (count > 4) {
-        // Polyline: account for extra vertices needed for continuous tri-strip
-        verticesCount += (count - 4);
-    }
-
-    if (isHairLine || isAA) {
-        // The quad that we use for AA and hairlines needs to account for scaling. For hairlines
-        // the line on the screen should always be one pixel wide regardless of scale. For
-        // AA lines, we only want one pixel of translucent boundary around the quad.
-        if (CC_UNLIKELY(!mSnapshot->transform->isPureTranslate())) {
-            Matrix4 *mat = mSnapshot->transform;
-            float m00 = mat->data[Matrix4::kScaleX];
-            float m01 = mat->data[Matrix4::kSkewY];
-            float m10 = mat->data[Matrix4::kSkewX];
-            float m11 = mat->data[Matrix4::kScaleY];
-
-            float scaleX = sqrtf(m00 * m00 + m01 * m01);
-            float scaleY = sqrtf(m10 * m10 + m11 * m11);
-
-            inverseScaleX = (scaleX != 0) ? (inverseScaleX / scaleX) : 0;
-            inverseScaleY = (scaleY != 0) ? (inverseScaleY / scaleY) : 0;
-
-            if (inverseScaleX != 1.0f || inverseScaleY != 1.0f) {
-                scaled = true;
-            }
-        }
-    }
-
-    getAlphaAndMode(paint, &alpha, &mode);
-
-    mCaches.enableScissor();
-
-    setupDraw();
-    setupDrawNoTexture();
-    if (isAA) {
-        setupDrawAA();
-    }
-    setupDrawColor(paint->getColor(), alpha);
-    setupDrawColorFilter();
-    setupDrawShader();
-    setupDrawBlending(isAA, mode);
-    setupDrawProgram();
-    setupDrawModelViewIdentity(true);
-    setupDrawColorUniforms();
-    setupDrawColorFilterUniforms();
-    setupDrawShaderIdentityUniforms();
-
-    if (isHairLine) {
-        // Set a real stroke width to be used in quad construction
-        halfStrokeWidth = isAA? 1 : .5;
-    } else if (isAA && !scaled) {
-        // Expand boundary to enable AA calculations on the quad border
-        halfStrokeWidth += .5f;
-    }
-
-    int widthSlot;
-    int lengthSlot;
-
-    Vertex lines[verticesCount];
-    Vertex* vertices = &lines[0];
-
-    AAVertex wLines[verticesCount];
-    AAVertex* aaVertices = &wLines[0];
-
-    if (CC_UNLIKELY(!isAA)) {
-        setupDrawVertices(vertices);
-    } else {
-        void* widthCoords = ((GLbyte*) aaVertices) + gVertexAAWidthOffset;
-        void* lengthCoords = ((GLbyte*) aaVertices) + gVertexAALengthOffset;
-        // innerProportion is the ratio of the inner (non-AA) part of the line to the total
-        // AA stroke width (the base stroke width expanded by a half pixel on either side).
-        // This value is used in the fragment shader to determine how to fill fragments.
-        // We will need to calculate the actual width proportion on each segment for
-        // scaled non-hairlines, since the boundary proportion may differ per-axis when scaled.
-        float boundaryWidthProportion = .5 - 1 / (2 * halfStrokeWidth);
-        setupDrawAALine((void*) aaVertices, widthCoords, lengthCoords,
-                boundaryWidthProportion, widthSlot, lengthSlot);
-    }
-
-    AAVertex* prevAAVertex = NULL;
-    Vertex* prevVertex = NULL;
-
-    int boundaryLengthSlot = -1;
-    int boundaryWidthSlot = -1;
-
-    for (int i = 0; i < count; i += 4) {
-        // a = start point, b = end point
-        vec2 a(points[i], points[i + 1]);
-        vec2 b(points[i + 2], points[i + 3]);
-
-        float length = 0;
-        float boundaryLengthProportion = 0;
-        float boundaryWidthProportion = 0;
-
-        // Find the normal to the line
-        vec2 n = (b - a).copyNormalized() * halfStrokeWidth;
-        float x = n.x;
-        n.x = -n.y;
-        n.y = x;
-
-        if (isHairLine) {
-            if (isAA) {
-                float wideningFactor;
-                if (fabs(n.x) >= fabs(n.y)) {
-                    wideningFactor = fabs(1.0f / n.x);
-                } else {
-                    wideningFactor = fabs(1.0f / n.y);
-                }
-                n *= wideningFactor;
-            }
-
-            if (scaled) {
-                n.x *= inverseScaleX;
-                n.y *= inverseScaleY;
-            }
-        } else if (scaled) {
-            // Extend n by .5 pixel on each side, post-transform
-            vec2 extendedN = n.copyNormalized();
-            extendedN /= 2;
-            extendedN.x *= inverseScaleX;
-            extendedN.y *= inverseScaleY;
-
-            float extendedNLength = extendedN.length();
-            // We need to set this value on the shader prior to drawing
-            boundaryWidthProportion = .5 - extendedNLength / (halfStrokeWidth + extendedNLength);
-            n += extendedN;
-        }
-
-        // aa lines expand the endpoint vertices to encompass the AA boundary
-        if (isAA) {
-            vec2 abVector = (b - a);
-            length = abVector.length();
-            abVector.normalize();
-
-            if (scaled) {
-                abVector.x *= inverseScaleX;
-                abVector.y *= inverseScaleY;
-                float abLength = abVector.length();
-                boundaryLengthProportion = .5 - abLength / (length + abLength);
-            } else {
-                boundaryLengthProportion = .5 - .5 / (length + 1);
-            }
-
-            abVector /= 2;
-            a -= abVector;
-            b += abVector;
-        }
-
-        // Four corners of the rectangle defining a thick line
-        vec2 p1 = a - n;
-        vec2 p2 = a + n;
-        vec2 p3 = b + n;
-        vec2 p4 = b - n;
-
-
-        const float left = fmin(p1.x, fmin(p2.x, fmin(p3.x, p4.x)));
-        const float right = fmax(p1.x, fmax(p2.x, fmax(p3.x, p4.x)));
-        const float top = fmin(p1.y, fmin(p2.y, fmin(p3.y, p4.y)));
-        const float bottom = fmax(p1.y, fmax(p2.y, fmax(p3.y, p4.y)));
-
-        if (!quickRejectNoScissor(left, top, right, bottom)) {
-            if (!isAA) {
-                if (prevVertex != NULL) {
-                    // Issue two repeat vertices to create degenerate triangles to bridge
-                    // between the previous line and the new one. This is necessary because
-                    // we are creating a single triangle_strip which will contain
-                    // potentially discontinuous line segments.
-                    Vertex::set(vertices++, prevVertex->position[0], prevVertex->position[1]);
-                    Vertex::set(vertices++, p1.x, p1.y);
-                    generatedVerticesCount += 2;
-                }
-
-                Vertex::set(vertices++, p1.x, p1.y);
-                Vertex::set(vertices++, p2.x, p2.y);
-                Vertex::set(vertices++, p4.x, p4.y);
-                Vertex::set(vertices++, p3.x, p3.y);
-
-                prevVertex = vertices - 1;
-                generatedVerticesCount += 4;
-            } else {
-                if (!isHairLine && scaled) {
-                    // Must set width proportions per-segment for scaled non-hairlines to use the
-                    // correct AA boundary dimensions
-                    if (boundaryWidthSlot < 0) {
-                        boundaryWidthSlot =
-                                mCaches.currentProgram->getUniform("boundaryWidth");
-                    }
-
-                    glUniform1f(boundaryWidthSlot, boundaryWidthProportion);
-                }
-
-                if (boundaryLengthSlot < 0) {
-                    boundaryLengthSlot = mCaches.currentProgram->getUniform("boundaryLength");
-                }
-
-                glUniform1f(boundaryLengthSlot, boundaryLengthProportion);
-
-                if (prevAAVertex != NULL) {
-                    // Issue two repeat vertices to create degenerate triangles to bridge
-                    // between the previous line and the new one. This is necessary because
-                    // we are creating a single triangle_strip which will contain
-                    // potentially discontinuous line segments.
-                    AAVertex::set(aaVertices++,prevAAVertex->position[0],
-                            prevAAVertex->position[1], prevAAVertex->width, prevAAVertex->length);
-                    AAVertex::set(aaVertices++, p4.x, p4.y, 1, 1);
-                    generatedVerticesCount += 2;
-                }
-
-                AAVertex::set(aaVertices++, p4.x, p4.y, 1, 1);
-                AAVertex::set(aaVertices++, p1.x, p1.y, 1, 0);
-                AAVertex::set(aaVertices++, p3.x, p3.y, 0, 1);
-                AAVertex::set(aaVertices++, p2.x, p2.y, 0, 0);
-
-                prevAAVertex = aaVertices - 1;
-                generatedVerticesCount += 4;
-            }
-
-            dirtyLayer(a.x == b.x ? left - 1 : left, a.y == b.y ? top - 1 : top,
-                    a.x == b.x ? right: right, a.y == b.y ? bottom: bottom,
-                    *mSnapshot->transform);
-        }
-    }
-
-    if (generatedVerticesCount > 0) {
-       glDrawArrays(GL_TRIANGLE_STRIP, 0, generatedVerticesCount);
-    }
-
-    if (isAA) {
-        finishDrawAALine(widthSlot, lengthSlot);
-    }
-
-    return DrawGlInfo::kStatusDrew;
+    bool useOffset = !paint->isAntiAlias();
+    return drawVertexBuffer(buffer, paint, useOffset);
 }
 
 status_t OpenGLRenderer::drawPoints(float* points, int count, SkPaint* paint) {
@@ -2515,9 +2261,7 @@
         ry += outset;
     }
     path.addRoundRect(rect, rx, ry);
-    drawConvexPath(path, p);
-
-    return DrawGlInfo::kStatusDrew;
+    return drawConvexPath(path, p);
 }
 
 status_t OpenGLRenderer::drawCircle(float x, float y, float radius, SkPaint* p) {
@@ -2537,9 +2281,7 @@
     } else {
         path.addCircle(x, y, radius);
     }
-    drawConvexPath(path, p);
-
-    return DrawGlInfo::kStatusDrew;
+    return drawConvexPath(path, p);
 }
 
 status_t OpenGLRenderer::drawOval(float left, float top, float right, float bottom,
@@ -2560,9 +2302,7 @@
         rect.outset(p->getStrokeWidth() / 2, p->getStrokeWidth() / 2);
     }
     path.addOval(rect);
-    drawConvexPath(path, p);
-
-    return DrawGlInfo::kStatusDrew;
+    return drawConvexPath(path, p);
 }
 
 status_t OpenGLRenderer::drawArc(float left, float top, float right, float bottom,
@@ -2576,8 +2316,7 @@
     }
 
     // TODO: support fills (accounting for concavity if useCenter && sweepAngle > 180)
-    if (p->getStyle() != SkPaint::kStroke_Style || p->getPathEffect() != 0 ||
-            p->getStrokeCap() != SkPaint::kButt_Cap || useCenter) {
+    if (p->getStyle() != SkPaint::kStroke_Style || p->getPathEffect() != 0 || useCenter) {
         mCaches.activeTexture(0);
         const PathTexture* texture = mCaches.arcShapeCache.getArc(right - left, bottom - top,
                 startAngle, sweepAngle, useCenter, p);
@@ -2597,9 +2336,7 @@
     if (useCenter) {
         path.close();
     }
-    drawConvexPath(path, p);
-
-    return DrawGlInfo::kStatusDrew;
+    return drawConvexPath(path, p);
 }
 
 // See SkPaintDefaults.h
@@ -2626,20 +2363,17 @@
             rect.outset(p->getStrokeWidth() / 2, p->getStrokeWidth() / 2);
         }
         path.addRect(rect);
-        drawConvexPath(path, p);
-
-        return DrawGlInfo::kStatusDrew;
+        return drawConvexPath(path, p);
     }
 
     if (p->isAntiAlias() && !mSnapshot->transform->isSimple()) {
         SkPath path;
         path.addRect(left, top, right, bottom);
-        drawConvexPath(path, p);
+        return drawConvexPath(path, p);
     } else {
         drawColorRect(left, top, right, bottom, p->getColor(), getXfermode(p->getXfermode()));
+        return DrawGlInfo::kStatusDrew;
     }
-
-    return DrawGlInfo::kStatusDrew;
 }
 
 void OpenGLRenderer::drawTextShadow(SkPaint* paint, const char* text, int bytesCount, int count,
@@ -3193,8 +2927,7 @@
     Vertex mesh[count * 6];
     Vertex* vertex = mesh;
 
-    for (int i = 0; i < count; i++) {
-        int index = i * 4;
+    for (int index = 0; index < count; index += 4) {
         float l = rects[index + 0];
         float t = rects[index + 1];
         float r = rects[index + 2];
@@ -3217,7 +2950,9 @@
         }
     }
 
-    if (count == 0) return DrawGlInfo::kStatusDone;
+    if (count == 0 || quickReject(left, top, right, bottom)) {
+        return DrawGlInfo::kStatusDone;
+    }
 
     setupDraw();
     setupDrawNoTexture();
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index d4e1eb5..ee205a4 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -53,6 +53,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 class DisplayList;
+class VertexBuffer;
 
 /**
  * OpenGL renderer used to draw accelerated 2D graphics. The API is a
@@ -64,6 +65,19 @@
     virtual ~OpenGLRenderer();
 
     /**
+     * Sets the name of this renderer. The name is optional and
+     * empty by default. If the pointer is null the name is set
+     * to the empty string.
+     */
+    ANDROID_API void setName(const char* name);
+
+    /**
+     * Returns the name of this renderer as UTF8 string.
+     * The returned pointer is never null.
+     */
+    ANDROID_API const char* getName() const;
+
+    /**
      * Read externally defined properties to control the behavior
      * of the renderer.
      */
@@ -400,12 +414,21 @@
 
     /**
      * Tells the GPU what part of the screen is about to be redrawn.
+     * This method will use the clip rect that we started drawing the
+     * frame with.
      * This method needs to be invoked every time getTargetFbo() is
      * bound again.
      */
     void startTiling(const sp<Snapshot>& snapshot, bool opaque = false);
 
     /**
+     * Tells the GPU what part of the screen is about to be redrawn.
+     * This method needs to be invoked every time getTargetFbo() is
+     * bound again.
+     */
+    void startTiling(const Rect& clip, int windowHeight, bool opaque = false);
+
+    /**
      * Tells the GPU that we are done drawing the frame or that we
      * are switching to another render target.
      */
@@ -573,12 +596,22 @@
     void drawAlphaBitmap(Texture* texture, float left, float top, SkPaint* paint);
 
     /**
+     * Renders a strip of polygons with the specified paint, used for tessellated geometry.
+     *
+     * @param vertexBuffer The VertexBuffer to be drawn
+     * @param paint The paint to render with
+     * @param useOffset Offset the vertexBuffer (used in drawing non-AA lines)
+     */
+    status_t drawVertexBuffer(const VertexBuffer& vertexBuffer, SkPaint* paint,
+            bool useOffset = false);
+
+    /**
      * Renders the convex hull defined by the specified path as a strip of polygons.
      *
      * @param path The hull of the path to draw
      * @param paint The paint to render with
      */
-    void drawConvexPath(const SkPath& path, SkPaint* paint);
+    status_t drawConvexPath(const SkPath& path, SkPaint* paint);
 
     /**
      * Draws a textured rectangle with the specified texture. The specified coordinates
@@ -745,7 +778,6 @@
     void setupDrawWithExternalTexture();
     void setupDrawNoTexture();
     void setupDrawAA();
-    void setupDrawVertexShape();
     void setupDrawPoint(float pointSize);
     void setupDrawColor(int color, int alpha);
     void setupDrawColor(float r, float g, float b, float a);
@@ -779,9 +811,6 @@
     void setupDrawMesh(GLvoid* vertices, GLvoid* texCoords = NULL, GLuint vbo = 0);
     void setupDrawMeshIndices(GLvoid* vertices, GLvoid* texCoords);
     void setupDrawVertices(GLvoid* vertices);
-    void setupDrawAALine(GLvoid* vertices, GLvoid* distanceCoords, GLvoid* lengthCoords,
-            float strokeWidth, int& widthSlot, int& lengthSlot);
-    void finishDrawAALine(const int widthSlot, const int lengthSlot);
     void finishDrawTexture();
     void accountForClear(SkXfermode::Mode mode);
 
@@ -895,6 +924,9 @@
     // No-ops start/endTiling when set
     bool mSuppressTiling;
 
+    // Optional name of the renderer
+    String8 mName;
+
     friend class DisplayListRenderer;
 
 }; // class OpenGLRenderer
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index e490151..45c619e 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -122,8 +122,6 @@
     float rescaleX = 1.0f;
     float rescaleY = 1.0f;
 
-    const float meshWidth = right - left;
-
     if (xStretchCount > 0) {
         uint32_t stretchSize = 0;
         for (uint32_t i = 1; i < mXCount; i += 2) {
diff --git a/libs/hwui/PathRenderer.cpp b/libs/hwui/PathRenderer.cpp
deleted file mode 100644
index dd13d79..0000000
--- a/libs/hwui/PathRenderer.cpp
+++ /dev/null
@@ -1,721 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-#define LOG_TAG "PathRenderer"
-#define LOG_NDEBUG 1
-#define ATRACE_TAG ATRACE_TAG_GRAPHICS
-
-#define VERTEX_DEBUG 0
-
-#include <SkPath.h>
-#include <SkPaint.h>
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <utils/Log.h>
-#include <utils/Trace.h>
-
-#include "PathRenderer.h"
-#include "Matrix.h"
-#include "Vector.h"
-#include "Vertex.h"
-
-namespace android {
-namespace uirenderer {
-
-#define THRESHOLD 0.5f
-
-SkRect PathRenderer::computePathBounds(const SkPath& path, const SkPaint* paint) {
-    SkRect bounds = path.getBounds();
-    if (paint->getStyle() != SkPaint::kFill_Style) {
-        float outset = paint->getStrokeWidth() * 0.5f;
-        bounds.outset(outset, outset);
-    }
-    return bounds;
-}
-
-void computeInverseScales(const mat4 *transform, float &inverseScaleX, float& inverseScaleY) {
-    if (CC_UNLIKELY(!transform->isPureTranslate())) {
-        float m00 = transform->data[Matrix4::kScaleX];
-        float m01 = transform->data[Matrix4::kSkewY];
-        float m10 = transform->data[Matrix4::kSkewX];
-        float m11 = transform->data[Matrix4::kScaleY];
-        float scaleX = sqrt(m00 * m00 + m01 * m01);
-        float scaleY = sqrt(m10 * m10 + m11 * m11);
-        inverseScaleX = (scaleX != 0) ? (1.0f / scaleX) : 1.0f;
-        inverseScaleY = (scaleY != 0) ? (1.0f / scaleY) : 1.0f;
-    } else {
-        inverseScaleX = 1.0f;
-        inverseScaleY = 1.0f;
-    }
-}
-
-inline void copyVertex(Vertex* destPtr, const Vertex* srcPtr) {
-    Vertex::set(destPtr, srcPtr->position[0], srcPtr->position[1]);
-}
-
-inline void copyAlphaVertex(AlphaVertex* destPtr, const AlphaVertex* srcPtr) {
-    AlphaVertex::set(destPtr, srcPtr->position[0], srcPtr->position[1], srcPtr->alpha);
-}
-
-/**
- * Produces a pseudo-normal for a vertex, given the normals of the two incoming lines. If the offset
- * from each vertex in a perimeter is calculated, the resultant lines connecting the offset vertices
- * will be offset by 1.0
- *
- * Note that we can't add and normalize the two vectors, that would result in a rectangle having an
- * offset of (sqrt(2)/2, sqrt(2)/2) at each corner, instead of (1, 1)
- *
- * NOTE: assumes angles between normals 90 degrees or less
- */
-inline vec2 totalOffsetFromNormals(const vec2& normalA, const vec2& normalB) {
-    return (normalA + normalB) / (1 + fabs(normalA.dot(normalB)));
-}
-
-inline void scaleOffsetForStrokeWidth(vec2& offset, float halfStrokeWidth,
-        float inverseScaleX, float inverseScaleY) {
-    if (halfStrokeWidth == 0.0f) {
-        // hairline - compensate for scale
-        offset.x *= 0.5f * inverseScaleX;
-        offset.y *= 0.5f * inverseScaleY;
-    } else {
-        offset *= halfStrokeWidth;
-    }
-}
-
-void getFillVerticesFromPerimeter(const Vector<Vertex>& perimeter, VertexBuffer& vertexBuffer) {
-    Vertex* buffer = vertexBuffer.alloc<Vertex>(perimeter.size());
-
-    int currentIndex = 0;
-    // zig zag between all previous points on the inside of the hull to create a
-    // triangle strip that fills the hull
-    int srcAindex = 0;
-    int srcBindex = perimeter.size() - 1;
-    while (srcAindex <= srcBindex) {
-        copyVertex(&buffer[currentIndex++], &perimeter[srcAindex]);
-        if (srcAindex == srcBindex) break;
-        copyVertex(&buffer[currentIndex++], &perimeter[srcBindex]);
-        srcAindex++;
-        srcBindex--;
-    }
-}
-
-void getStrokeVerticesFromPerimeter(const Vector<Vertex>& perimeter, float halfStrokeWidth,
-        VertexBuffer& vertexBuffer, float inverseScaleX, float inverseScaleY) {
-    Vertex* buffer = vertexBuffer.alloc<Vertex>(perimeter.size() * 2 + 2);
-
-    int currentIndex = 0;
-    const Vertex* last = &(perimeter[perimeter.size() - 1]);
-    const Vertex* current = &(perimeter[0]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-            last->position[0] - current->position[0]);
-    lastNormal.normalize();
-    for (unsigned int i = 0; i < perimeter.size(); i++) {
-        const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
-        nextNormal.normalize();
-
-        vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
-        scaleOffsetForStrokeWidth(totalOffset, halfStrokeWidth, inverseScaleX, inverseScaleY);
-
-        Vertex::set(&buffer[currentIndex++],
-                current->position[0] + totalOffset.x,
-                current->position[1] + totalOffset.y);
-
-        Vertex::set(&buffer[currentIndex++],
-                current->position[0] - totalOffset.x,
-                current->position[1] - totalOffset.y);
-
-        last = current;
-        current = next;
-        lastNormal = nextNormal;
-    }
-
-    // wrap around to beginning
-    copyVertex(&buffer[currentIndex++], &buffer[0]);
-    copyVertex(&buffer[currentIndex++], &buffer[1]);
-}
-
-void getStrokeVerticesFromUnclosedVertices(const Vector<Vertex>& vertices, float halfStrokeWidth,
-        VertexBuffer& vertexBuffer, float inverseScaleX, float inverseScaleY) {
-    Vertex* buffer = vertexBuffer.alloc<Vertex>(vertices.size() * 2);
-
-    int currentIndex = 0;
-    const Vertex* current = &(vertices[0]);
-    vec2 lastNormal;
-    for (unsigned int i = 0; i < vertices.size() - 1; i++) {
-        const Vertex* next = &(vertices[i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
-        nextNormal.normalize();
-
-        vec2 totalOffset;
-        if (i == 0) {
-            totalOffset = nextNormal;
-        } else {
-            totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
-        }
-        scaleOffsetForStrokeWidth(totalOffset, halfStrokeWidth, inverseScaleX, inverseScaleY);
-
-        Vertex::set(&buffer[currentIndex++],
-                current->position[0] + totalOffset.x,
-                current->position[1] + totalOffset.y);
-
-        Vertex::set(&buffer[currentIndex++],
-                current->position[0] - totalOffset.x,
-                current->position[1] - totalOffset.y);
-
-        current = next;
-        lastNormal = nextNormal;
-    }
-
-    vec2 totalOffset = lastNormal;
-    scaleOffsetForStrokeWidth(totalOffset, halfStrokeWidth, inverseScaleX, inverseScaleY);
-
-    Vertex::set(&buffer[currentIndex++],
-            current->position[0] + totalOffset.x,
-            current->position[1] + totalOffset.y);
-    Vertex::set(&buffer[currentIndex++],
-            current->position[0] - totalOffset.x,
-            current->position[1] - totalOffset.y);
-#if VERTEX_DEBUG
-    for (unsigned int i = 0; i < vertexBuffer.getSize(); i++) {
-        ALOGD("point at %f %f", buffer[i].position[0], buffer[i].position[1]);
-    }
-#endif
-}
-
-void getFillVerticesFromPerimeterAA(const Vector<Vertex>& perimeter, VertexBuffer& vertexBuffer,
-         float inverseScaleX, float inverseScaleY) {
-    AlphaVertex* buffer = vertexBuffer.alloc<AlphaVertex>(perimeter.size() * 3 + 2);
-
-    // generate alpha points - fill Alpha vertex gaps in between each point with
-    // alpha 0 vertex, offset by a scaled normal.
-    int currentIndex = 0;
-    const Vertex* last = &(perimeter[perimeter.size() - 1]);
-    const Vertex* current = &(perimeter[0]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-            last->position[0] - current->position[0]);
-    lastNormal.normalize();
-    for (unsigned int i = 0; i < perimeter.size(); i++) {
-        const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
-        nextNormal.normalize();
-
-        // AA point offset from original point is that point's normal, such that each side is offset
-        // by .5 pixels
-        vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
-        totalOffset.x *= 0.5f * inverseScaleX;
-        totalOffset.y *= 0.5f * inverseScaleY;
-
-        AlphaVertex::set(&buffer[currentIndex++],
-                current->position[0] + totalOffset.x,
-                current->position[1] + totalOffset.y,
-                0.0f);
-        AlphaVertex::set(&buffer[currentIndex++],
-                current->position[0] - totalOffset.x,
-                current->position[1] - totalOffset.y,
-                1.0f);
-
-        last = current;
-        current = next;
-        lastNormal = nextNormal;
-    }
-
-    // wrap around to beginning
-    copyAlphaVertex(&buffer[currentIndex++], &buffer[0]);
-    copyAlphaVertex(&buffer[currentIndex++], &buffer[1]);
-
-    // zig zag between all previous points on the inside of the hull to create a
-    // triangle strip that fills the hull, repeating the first inner point to
-    // create degenerate tris to start inside path
-    int srcAindex = 0;
-    int srcBindex = perimeter.size() - 1;
-    while (srcAindex <= srcBindex) {
-        copyAlphaVertex(&buffer[currentIndex++], &buffer[srcAindex * 2 + 1]);
-        if (srcAindex == srcBindex) break;
-        copyAlphaVertex(&buffer[currentIndex++], &buffer[srcBindex * 2 + 1]);
-        srcAindex++;
-        srcBindex--;
-    }
-
-#if VERTEX_DEBUG
-    for (unsigned int i = 0; i < vertexBuffer.getSize(); i++) {
-        ALOGD("point at %f %f, alpha %f", buffer[i].position[0], buffer[i].position[1], buffer[i].alpha);
-    }
-#endif
-}
-
-
-void getStrokeVerticesFromUnclosedVerticesAA(const Vector<Vertex>& vertices, float halfStrokeWidth,
-        VertexBuffer& vertexBuffer, float inverseScaleX, float inverseScaleY) {
-    AlphaVertex* buffer = vertexBuffer.alloc<AlphaVertex>(6 * vertices.size() + 2);
-
-    // avoid lines smaller than hairline since they break triangle based sampling. instead reducing
-    // alpha value (TODO: support different X/Y scale)
-    float maxAlpha = 1.0f;
-    if (halfStrokeWidth != 0 && inverseScaleX == inverseScaleY &&
-            halfStrokeWidth * inverseScaleX < 0.5f) {
-        maxAlpha *= (2 * halfStrokeWidth) / inverseScaleX;
-        halfStrokeWidth = 0.0f;
-    }
-
-    // there is no outer/inner here, using them for consistency with below approach
-    int offset = 2 * (vertices.size() - 2);
-    int currentAAOuterIndex = 2;
-    int currentAAInnerIndex = 2 * offset + 5; // reversed
-    int currentStrokeIndex = currentAAInnerIndex + 7;
-
-    const Vertex* last = &(vertices[0]);
-    const Vertex* current = &(vertices[1]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-            last->position[0] - current->position[0]);
-    lastNormal.normalize();
-
-    {
-        // start cap
-        vec2 totalOffset = lastNormal;
-        vec2 AAOffset = totalOffset;
-        AAOffset.x *= 0.5f * inverseScaleX;
-        AAOffset.y *= 0.5f * inverseScaleY;
-
-        vec2 innerOffset = totalOffset;
-        scaleOffsetForStrokeWidth(innerOffset, halfStrokeWidth, inverseScaleX, inverseScaleY);
-        vec2 outerOffset = innerOffset + AAOffset;
-        innerOffset -= AAOffset;
-
-        // TODO: support square cap by changing this offset to incorporate halfStrokeWidth
-        vec2 capAAOffset(AAOffset.y, -AAOffset.x);
-        AlphaVertex::set(&buffer[0],
-                last->position[0] + outerOffset.x + capAAOffset.x,
-                last->position[1] + outerOffset.y + capAAOffset.y,
-                0.0f);
-        AlphaVertex::set(&buffer[1],
-                last->position[0] + innerOffset.x - capAAOffset.x,
-                last->position[1] + innerOffset.y - capAAOffset.y,
-                maxAlpha);
-
-        AlphaVertex::set(&buffer[2 * offset + 6],
-                last->position[0] - outerOffset.x + capAAOffset.x,
-                last->position[1] - outerOffset.y + capAAOffset.y,
-                0.0f);
-        AlphaVertex::set(&buffer[2 * offset + 7],
-                last->position[0] - innerOffset.x - capAAOffset.x,
-                last->position[1] - innerOffset.y - capAAOffset.y,
-                maxAlpha);
-        copyAlphaVertex(&buffer[2 * offset + 8], &buffer[0]);
-        copyAlphaVertex(&buffer[2 * offset + 9], &buffer[1]);
-        copyAlphaVertex(&buffer[2 * offset + 10], &buffer[1]); // degenerate tris (the only two!)
-        copyAlphaVertex(&buffer[2 * offset + 11], &buffer[2 * offset + 7]);
-    }
-
-    for (unsigned int i = 1; i < vertices.size() - 1; i++) {
-        const Vertex* next = &(vertices[i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
-        nextNormal.normalize();
-
-        vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
-        vec2 AAOffset = totalOffset;
-        AAOffset.x *= 0.5f * inverseScaleX;
-        AAOffset.y *= 0.5f * inverseScaleY;
-
-        vec2 innerOffset = totalOffset;
-        scaleOffsetForStrokeWidth(innerOffset, halfStrokeWidth, inverseScaleX, inverseScaleY);
-        vec2 outerOffset = innerOffset + AAOffset;
-        innerOffset -= AAOffset;
-
-        AlphaVertex::set(&buffer[currentAAOuterIndex++],
-                current->position[0] + outerOffset.x,
-                current->position[1] + outerOffset.y,
-                0.0f);
-        AlphaVertex::set(&buffer[currentAAOuterIndex++],
-                current->position[0] + innerOffset.x,
-                current->position[1] + innerOffset.y,
-                maxAlpha);
-
-        AlphaVertex::set(&buffer[currentStrokeIndex++],
-                current->position[0] + innerOffset.x,
-                current->position[1] + innerOffset.y,
-                maxAlpha);
-        AlphaVertex::set(&buffer[currentStrokeIndex++],
-                current->position[0] - innerOffset.x,
-                current->position[1] - innerOffset.y,
-                maxAlpha);
-
-        AlphaVertex::set(&buffer[currentAAInnerIndex--],
-                current->position[0] - innerOffset.x,
-                current->position[1] - innerOffset.y,
-                maxAlpha);
-        AlphaVertex::set(&buffer[currentAAInnerIndex--],
-                current->position[0] - outerOffset.x,
-                current->position[1] - outerOffset.y,
-                0.0f);
-
-        last = current;
-        current = next;
-        lastNormal = nextNormal;
-    }
-
-    {
-        // end cap
-        vec2 totalOffset = lastNormal;
-        vec2 AAOffset = totalOffset;
-        AAOffset.x *= 0.5f * inverseScaleX;
-        AAOffset.y *= 0.5f * inverseScaleY;
-
-        vec2 innerOffset = totalOffset;
-        scaleOffsetForStrokeWidth(innerOffset, halfStrokeWidth, inverseScaleX, inverseScaleY);
-        vec2 outerOffset = innerOffset + AAOffset;
-        innerOffset -= AAOffset;
-
-        // TODO: support square cap by changing this offset to incorporate halfStrokeWidth
-        vec2 capAAOffset(-AAOffset.y, AAOffset.x);
-
-        AlphaVertex::set(&buffer[offset + 2],
-                current->position[0] + outerOffset.x + capAAOffset.x,
-                current->position[1] + outerOffset.y + capAAOffset.y,
-                0.0f);
-        AlphaVertex::set(&buffer[offset + 3],
-                current->position[0] + innerOffset.x - capAAOffset.x,
-                current->position[1] + innerOffset.y - capAAOffset.y,
-                maxAlpha);
-
-        AlphaVertex::set(&buffer[offset + 4],
-                current->position[0] - outerOffset.x + capAAOffset.x,
-                current->position[1] - outerOffset.y + capAAOffset.y,
-                0.0f);
-        AlphaVertex::set(&buffer[offset + 5],
-                current->position[0] - innerOffset.x - capAAOffset.x,
-                current->position[1] - innerOffset.y - capAAOffset.y,
-                maxAlpha);
-
-        copyAlphaVertex(&buffer[vertexBuffer.getSize() - 2], &buffer[offset + 3]);
-        copyAlphaVertex(&buffer[vertexBuffer.getSize() - 1], &buffer[offset + 5]);
-    }
-
-#if VERTEX_DEBUG
-    for (unsigned int i = 0; i < vertexBuffer.getSize(); i++) {
-        ALOGD("point at %f %f, alpha %f", buffer[i].position[0], buffer[i].position[1], buffer[i].alpha);
-    }
-#endif
-}
-
-
-void getStrokeVerticesFromPerimeterAA(const Vector<Vertex>& perimeter, float halfStrokeWidth,
-        VertexBuffer& vertexBuffer, float inverseScaleX, float inverseScaleY) {
-    AlphaVertex* buffer = vertexBuffer.alloc<AlphaVertex>(6 * perimeter.size() + 8);
-
-    // avoid lines smaller than hairline since they break triangle based sampling. instead reducing
-    // alpha value (TODO: support different X/Y scale)
-    float maxAlpha = 1.0f;
-    if (halfStrokeWidth != 0 && inverseScaleX == inverseScaleY &&
-            halfStrokeWidth * inverseScaleX < 0.5f) {
-        maxAlpha *= (2 * halfStrokeWidth) / inverseScaleX;
-        halfStrokeWidth = 0.0f;
-    }
-
-    int offset = 2 * perimeter.size() + 3;
-    int currentAAOuterIndex = 0;
-    int currentStrokeIndex = offset;
-    int currentAAInnerIndex = offset * 2;
-
-    const Vertex* last = &(perimeter[perimeter.size() - 1]);
-    const Vertex* current = &(perimeter[0]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-            last->position[0] - current->position[0]);
-    lastNormal.normalize();
-    for (unsigned int i = 0; i < perimeter.size(); i++) {
-        const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
-        nextNormal.normalize();
-
-        vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
-        vec2 AAOffset = totalOffset;
-        AAOffset.x *= 0.5f * inverseScaleX;
-        AAOffset.y *= 0.5f * inverseScaleY;
-
-        vec2 innerOffset = totalOffset;
-        scaleOffsetForStrokeWidth(innerOffset, halfStrokeWidth, inverseScaleX, inverseScaleY);
-        vec2 outerOffset = innerOffset + AAOffset;
-        innerOffset -= AAOffset;
-
-        AlphaVertex::set(&buffer[currentAAOuterIndex++],
-                current->position[0] + outerOffset.x,
-                current->position[1] + outerOffset.y,
-                0.0f);
-        AlphaVertex::set(&buffer[currentAAOuterIndex++],
-                current->position[0] + innerOffset.x,
-                current->position[1] + innerOffset.y,
-                maxAlpha);
-
-        AlphaVertex::set(&buffer[currentStrokeIndex++],
-                current->position[0] + innerOffset.x,
-                current->position[1] + innerOffset.y,
-                maxAlpha);
-        AlphaVertex::set(&buffer[currentStrokeIndex++],
-                current->position[0] - innerOffset.x,
-                current->position[1] - innerOffset.y,
-                maxAlpha);
-
-        AlphaVertex::set(&buffer[currentAAInnerIndex++],
-                current->position[0] - innerOffset.x,
-                current->position[1] - innerOffset.y,
-                maxAlpha);
-        AlphaVertex::set(&buffer[currentAAInnerIndex++],
-                current->position[0] - outerOffset.x,
-                current->position[1] - outerOffset.y,
-                0.0f);
-
-        last = current;
-        current = next;
-        lastNormal = nextNormal;
-    }
-
-    // wrap each strip around to beginning, creating degenerate tris to bridge strips
-    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[0]);
-    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[1]);
-    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[1]);
-
-    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset]);
-    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset + 1]);
-    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset + 1]);
-
-    copyAlphaVertex(&buffer[currentAAInnerIndex++], &buffer[2 * offset]);
-    copyAlphaVertex(&buffer[currentAAInnerIndex++], &buffer[2 * offset + 1]);
-    // don't need to create last degenerate tri
-
-#if VERTEX_DEBUG
-    for (unsigned int i = 0; i < vertexBuffer.getSize(); i++) {
-        ALOGD("point at %f %f, alpha %f", buffer[i].position[0], buffer[i].position[1], buffer[i].alpha);
-    }
-#endif
-}
-
-void PathRenderer::convexPathVertices(const SkPath &path, const SkPaint* paint,
-        const mat4 *transform, VertexBuffer& vertexBuffer) {
-    ATRACE_CALL();
-
-    SkPaint::Style style = paint->getStyle();
-    bool isAA = paint->isAntiAlias();
-
-    float inverseScaleX, inverseScaleY;
-    computeInverseScales(transform, inverseScaleX, inverseScaleY);
-
-    Vector<Vertex> tempVertices;
-    float threshInvScaleX = inverseScaleX;
-    float threshInvScaleY = inverseScaleY;
-    if (style == SkPaint::kStroke_Style) {
-        // alter the bezier recursion threshold values we calculate in order to compensate for
-        // expansion done after the path vertices are found
-        SkRect bounds = path.getBounds();
-        if (!bounds.isEmpty()) {
-            threshInvScaleX *= bounds.width() / (bounds.width() + paint->getStrokeWidth());
-            threshInvScaleY *= bounds.height() / (bounds.height() + paint->getStrokeWidth());
-        }
-    }
-
-    // force close if we're filling the path, since fill path expects closed perimeter.
-    bool forceClose = style != SkPaint::kStroke_Style;
-    bool wasClosed = convexPathPerimeterVertices(path, forceClose, threshInvScaleX * threshInvScaleX,
-            threshInvScaleY * threshInvScaleY, tempVertices);
-
-    if (!tempVertices.size()) {
-        // path was empty, return without allocating vertex buffer
-        return;
-    }
-
-#if VERTEX_DEBUG
-    for (unsigned int i = 0; i < tempVertices.size(); i++) {
-        ALOGD("orig path: point at %f %f", tempVertices[i].position[0], tempVertices[i].position[1]);
-    }
-#endif
-
-    if (style == SkPaint::kStroke_Style) {
-        float halfStrokeWidth = paint->getStrokeWidth() * 0.5f;
-        if (!isAA) {
-            if (wasClosed) {
-                getStrokeVerticesFromPerimeter(tempVertices, halfStrokeWidth, vertexBuffer,
-                        inverseScaleX, inverseScaleY);
-            } else {
-                getStrokeVerticesFromUnclosedVertices(tempVertices, halfStrokeWidth, vertexBuffer,
-                        inverseScaleX, inverseScaleY);
-            }
-
-        } else {
-            if (wasClosed) {
-                getStrokeVerticesFromPerimeterAA(tempVertices, halfStrokeWidth, vertexBuffer,
-                        inverseScaleX, inverseScaleY);
-            } else {
-                getStrokeVerticesFromUnclosedVerticesAA(tempVertices, halfStrokeWidth, vertexBuffer,
-                        inverseScaleX, inverseScaleY);
-            }
-        }
-    } else {
-        // For kStrokeAndFill style, the path should be adjusted externally, as it will be treated as a fill here.
-        if (!isAA) {
-            getFillVerticesFromPerimeter(tempVertices, vertexBuffer);
-        } else {
-            getFillVerticesFromPerimeterAA(tempVertices, vertexBuffer, inverseScaleX, inverseScaleY);
-        }
-    }
-}
-
-
-void pushToVector(Vector<Vertex>& vertices, float x, float y) {
-    // TODO: make this not yuck
-    vertices.push();
-    Vertex* newVertex = &(vertices.editArray()[vertices.size() - 1]);
-    Vertex::set(newVertex, x, y);
-}
-
-bool PathRenderer::convexPathPerimeterVertices(const SkPath& path, bool forceClose,
-        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
-    ATRACE_CALL();
-
-    // TODO: to support joins other than sharp miter, join vertices should be labelled in the
-    // perimeter, or resolved into more vertices. Reconsider forceClose-ing in that case.
-    SkPath::Iter iter(path, forceClose);
-    SkPoint pts[4];
-    SkPath::Verb v;
-    Vertex* newVertex = 0;
-    while (SkPath::kDone_Verb != (v = iter.next(pts))) {
-            switch (v) {
-                case SkPath::kMove_Verb:
-                    pushToVector(outputVertices, pts[0].x(), pts[0].y());
-                    ALOGV("Move to pos %f %f", pts[0].x(), pts[0].y());
-                    break;
-                case SkPath::kClose_Verb:
-                    ALOGV("Close at pos %f %f", pts[0].x(), pts[0].y());
-                    break;
-                case SkPath::kLine_Verb:
-                    ALOGV("kLine_Verb %f %f -> %f %f",
-                            pts[0].x(), pts[0].y(),
-                            pts[1].x(), pts[1].y());
-
-                    pushToVector(outputVertices, pts[1].x(), pts[1].y());
-                    break;
-                case SkPath::kQuad_Verb:
-                    ALOGV("kQuad_Verb");
-                    recursiveQuadraticBezierVertices(
-                            pts[0].x(), pts[0].y(),
-                            pts[2].x(), pts[2].y(),
-                            pts[1].x(), pts[1].y(),
-                            sqrInvScaleX, sqrInvScaleY, outputVertices);
-                    break;
-                case SkPath::kCubic_Verb:
-                    ALOGV("kCubic_Verb");
-                    recursiveCubicBezierVertices(
-                            pts[0].x(), pts[0].y(),
-                            pts[1].x(), pts[1].y(),
-                            pts[3].x(), pts[3].y(),
-                            pts[2].x(), pts[2].y(),
-                        sqrInvScaleX, sqrInvScaleY, outputVertices);
-                    break;
-                default:
-                    break;
-            }
-    }
-
-    int size = outputVertices.size();
-    if (size >= 2 && outputVertices[0].position[0] == outputVertices[size - 1].position[0] &&
-            outputVertices[0].position[1] == outputVertices[size - 1].position[1]) {
-        outputVertices.pop();
-        return true;
-    }
-    return false;
-}
-
-void PathRenderer::recursiveCubicBezierVertices(
-        float p1x, float p1y, float c1x, float c1y,
-        float p2x, float p2y, float c2x, float c2y,
-        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
-    float dx = p2x - p1x;
-    float dy = p2y - p1y;
-    float d1 = fabs((c1x - p2x) * dy - (c1y - p2y) * dx);
-    float d2 = fabs((c2x - p2x) * dy - (c2y - p2y) * dx);
-    float d = d1 + d2;
-
-    // multiplying by sqrInvScaleY/X equivalent to multiplying in dimensional scale factors
-
-    if (d * d < THRESHOLD * THRESHOLD * (dx * dx * sqrInvScaleY + dy * dy * sqrInvScaleX)) {
-        // below thresh, draw line by adding endpoint
-        pushToVector(outputVertices, p2x, p2y);
-    } else {
-        float p1c1x = (p1x + c1x) * 0.5f;
-        float p1c1y = (p1y + c1y) * 0.5f;
-        float p2c2x = (p2x + c2x) * 0.5f;
-        float p2c2y = (p2y + c2y) * 0.5f;
-
-        float c1c2x = (c1x + c2x) * 0.5f;
-        float c1c2y = (c1y + c2y) * 0.5f;
-
-        float p1c1c2x = (p1c1x + c1c2x) * 0.5f;
-        float p1c1c2y = (p1c1y + c1c2y) * 0.5f;
-
-        float p2c1c2x = (p2c2x + c1c2x) * 0.5f;
-        float p2c1c2y = (p2c2y + c1c2y) * 0.5f;
-
-        float mx = (p1c1c2x + p2c1c2x) * 0.5f;
-        float my = (p1c1c2y + p2c1c2y) * 0.5f;
-
-        recursiveCubicBezierVertices(
-                p1x, p1y, p1c1x, p1c1y,
-                mx, my, p1c1c2x, p1c1c2y,
-                sqrInvScaleX, sqrInvScaleY, outputVertices);
-        recursiveCubicBezierVertices(
-                mx, my, p2c1c2x, p2c1c2y,
-                p2x, p2y, p2c2x, p2c2y,
-                sqrInvScaleX, sqrInvScaleY, outputVertices);
-    }
-}
-
-void PathRenderer::recursiveQuadraticBezierVertices(
-        float ax, float ay,
-        float bx, float by,
-        float cx, float cy,
-        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
-    float dx = bx - ax;
-    float dy = by - ay;
-    float d = (cx - bx) * dy - (cy - by) * dx;
-
-    if (d * d < THRESHOLD * THRESHOLD * (dx * dx * sqrInvScaleY + dy * dy * sqrInvScaleX)) {
-        // below thresh, draw line by adding endpoint
-        pushToVector(outputVertices, bx, by);
-    } else {
-        float acx = (ax + cx) * 0.5f;
-        float bcx = (bx + cx) * 0.5f;
-        float acy = (ay + cy) * 0.5f;
-        float bcy = (by + cy) * 0.5f;
-
-        // midpoint
-        float mx = (acx + bcx) * 0.5f;
-        float my = (acy + bcy) * 0.5f;
-
-        recursiveQuadraticBezierVertices(ax, ay, mx, my, acx, acy,
-                sqrInvScaleX, sqrInvScaleY, outputVertices);
-        recursiveQuadraticBezierVertices(mx, my, bx, by, bcx, bcy,
-                sqrInvScaleX, sqrInvScaleY, outputVertices);
-    }
-}
-
-}; // namespace uirenderer
-}; // namespace android
diff --git a/libs/hwui/PathRenderer.h b/libs/hwui/PathRenderer.h
deleted file mode 100644
index e9f347b..0000000
--- a/libs/hwui/PathRenderer.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-#ifndef ANDROID_HWUI_PATH_RENDERER_H
-#define ANDROID_HWUI_PATH_RENDERER_H
-
-#include <utils/Vector.h>
-
-#include "Vertex.h"
-
-namespace android {
-namespace uirenderer {
-
-class Matrix4;
-typedef Matrix4 mat4;
-
-class VertexBuffer {
-public:
-    VertexBuffer():
-        mBuffer(0),
-        mSize(0),
-        mCleanupMethod(0)
-    {}
-
-    ~VertexBuffer() {
-        if (mCleanupMethod)
-            mCleanupMethod(mBuffer);
-    }
-
-    template <class TYPE>
-    TYPE* alloc(int size) {
-        mSize = size;
-        mBuffer = (void*)new TYPE[size];
-        mCleanupMethod = &(cleanup<TYPE>);
-
-        return (TYPE*)mBuffer;
-    }
-
-    void* getBuffer() { return mBuffer; }
-    unsigned int getSize() { return mSize; }
-
-private:
-    template <class TYPE>
-    static void cleanup(void* buffer) {
-        delete[] (TYPE*)buffer;
-    }
-
-    void* mBuffer;
-    unsigned int mSize;
-    void (*mCleanupMethod)(void*);
-};
-
-class PathRenderer {
-public:
-    static SkRect computePathBounds(const SkPath& path, const SkPaint* paint);
-
-    static void convexPathVertices(const SkPath& path, const SkPaint* paint,
-            const mat4 *transform, VertexBuffer& vertexBuffer);
-
-private:
-    static bool convexPathPerimeterVertices(const SkPath &path, bool forceClose,
-        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex> &outputVertices);
-
-/*
-  endpoints a & b,
-  control c
- */
-    static void recursiveQuadraticBezierVertices(
-            float ax, float ay,
-            float bx, float by,
-            float cx, float cy,
-            float sqrInvScaleX, float sqrInvScaleY,
-            Vector<Vertex> &outputVertices);
-
-/*
-  endpoints p1, p2
-  control c1, c2
- */
-    static void recursiveCubicBezierVertices(
-            float p1x, float p1y,
-            float c1x, float c1y,
-            float p2x, float p2y,
-            float c2x, float c2y,
-            float sqrInvScaleX, float sqrInvScaleY,
-            Vector<Vertex> &outputVertices);
-};
-
-}; // namespace uirenderer
-}; // namespace android
-
-#endif // ANDROID_HWUI_PATH_RENDERER_H
diff --git a/libs/hwui/PathTessellator.cpp b/libs/hwui/PathTessellator.cpp
new file mode 100644
index 0000000..69ccdfa
--- /dev/null
+++ b/libs/hwui/PathTessellator.cpp
@@ -0,0 +1,970 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+#define LOG_TAG "PathTessellator"
+#define LOG_NDEBUG 1
+#define ATRACE_TAG ATRACE_TAG_GRAPHICS
+
+#define VERTEX_DEBUG 0
+
+#if VERTEX_DEBUG
+#define DEBUG_DUMP_ALPHA_BUFFER() \
+    for (unsigned int i = 0; i < vertexBuffer.getSize(); i++) { \
+        ALOGD("point %d at %f %f, alpha %f", \
+        i, buffer[i].position[0], buffer[i].position[1], buffer[i].alpha); \
+    }
+#define DEBUG_DUMP_BUFFER() \
+    for (unsigned int i = 0; i < vertexBuffer.getSize(); i++) { \
+        ALOGD("point %d at %f %f", i, buffer[i].position[0], buffer[i].position[1]); \
+    }
+#else
+#define DEBUG_DUMP_ALPHA_BUFFER()
+#define DEBUG_DUMP_BUFFER()
+#endif
+
+#include <SkPath.h>
+#include <SkPaint.h>
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+#include <utils/Log.h>
+#include <utils/Trace.h>
+
+#include "PathTessellator.h"
+#include "Matrix.h"
+#include "Vector.h"
+#include "Vertex.h"
+
+namespace android {
+namespace uirenderer {
+
+#define THRESHOLD 0.5f
+#define ROUND_CAP_THRESH 0.25f
+#define PI 3.1415926535897932f
+
+void PathTessellator::expandBoundsForStroke(SkRect& bounds, const SkPaint* paint,
+        bool forceExpand) {
+    if (forceExpand || paint->getStyle() != SkPaint::kFill_Style) {
+        float outset = paint->getStrokeWidth() * 0.5f;
+        bounds.outset(outset, outset);
+    }
+}
+
+inline void copyVertex(Vertex* destPtr, const Vertex* srcPtr) {
+    Vertex::set(destPtr, srcPtr->position[0], srcPtr->position[1]);
+}
+
+inline void copyAlphaVertex(AlphaVertex* destPtr, const AlphaVertex* srcPtr) {
+    AlphaVertex::set(destPtr, srcPtr->position[0], srcPtr->position[1], srcPtr->alpha);
+}
+
+/**
+ * Produces a pseudo-normal for a vertex, given the normals of the two incoming lines. If the offset
+ * from each vertex in a perimeter is calculated, the resultant lines connecting the offset vertices
+ * will be offset by 1.0
+ *
+ * Note that we can't add and normalize the two vectors, that would result in a rectangle having an
+ * offset of (sqrt(2)/2, sqrt(2)/2) at each corner, instead of (1, 1)
+ *
+ * NOTE: assumes angles between normals 90 degrees or less
+ */
+inline vec2 totalOffsetFromNormals(const vec2& normalA, const vec2& normalB) {
+    return (normalA + normalB) / (1 + fabs(normalA.dot(normalB)));
+}
+
+/**
+ * Structure used for storing useful information about the SkPaint and scale used for tessellating
+ */
+struct PaintInfo {
+public:
+    PaintInfo(const SkPaint* paint, const mat4 *transform) :
+            style(paint->getStyle()), cap(paint->getStrokeCap()), isAA(paint->isAntiAlias()),
+            inverseScaleX(1.0f), inverseScaleY(1.0f),
+            halfStrokeWidth(paint->getStrokeWidth() * 0.5f), maxAlpha(1.0f) {
+        // compute inverse scales
+        if (CC_UNLIKELY(!transform->isPureTranslate())) {
+            float m00 = transform->data[Matrix4::kScaleX];
+            float m01 = transform->data[Matrix4::kSkewY];
+            float m10 = transform->data[Matrix4::kSkewX];
+            float m11 = transform->data[Matrix4::kScaleY];
+            float scaleX = sqrt(m00 * m00 + m01 * m01);
+            float scaleY = sqrt(m10 * m10 + m11 * m11);
+            inverseScaleX = (scaleX != 0) ? (1.0f / scaleX) : 1.0f;
+            inverseScaleY = (scaleY != 0) ? (1.0f / scaleY) : 1.0f;
+        }
+
+        if (isAA && halfStrokeWidth != 0 && inverseScaleX == inverseScaleY &&
+                halfStrokeWidth * inverseScaleX < 0.5f) {
+            maxAlpha *= (2 * halfStrokeWidth) / inverseScaleX;
+            halfStrokeWidth = 0.0f;
+        }
+    }
+
+    SkPaint::Style style;
+    SkPaint::Cap cap;
+    bool isAA;
+    float inverseScaleX;
+    float inverseScaleY;
+    float halfStrokeWidth;
+    float maxAlpha;
+
+    inline void scaleOffsetForStrokeWidth(vec2& offset) const {
+        if (halfStrokeWidth == 0.0f) {
+            // hairline - compensate for scale
+            offset.x *= 0.5f * inverseScaleX;
+            offset.y *= 0.5f * inverseScaleY;
+        } else {
+            offset *= halfStrokeWidth;
+        }
+    }
+
+    /**
+     * NOTE: the input will not always be a normal, especially for sharp edges - it should be the
+     * result of totalOffsetFromNormals (see documentation there)
+     */
+    inline vec2 deriveAAOffset(const vec2& offset) const {
+        return vec2(offset.x * 0.5f * inverseScaleX,
+            offset.y * 0.5f * inverseScaleY);
+    }
+
+    /**
+     * Returns the number of cap divisions beyond the minimum 2 (kButt_Cap/kSquareCap will return 0)
+     * Should only be used when stroking and drawing caps
+     */
+    inline int capExtraDivisions() const {
+        if (cap == SkPaint::kRound_Cap) {
+            if (halfStrokeWidth == 0.0f) return 2;
+
+            // ROUND_CAP_THRESH is the maximum error for polygonal approximation of the round cap
+            const float errConst = (-ROUND_CAP_THRESH / halfStrokeWidth + 1);
+            const float targetCosVal = 2 * errConst * errConst - 1;
+            int neededDivisions = (int)(ceilf(PI / acos(targetCosVal)/2)) * 2;
+            return neededDivisions;
+        }
+        return 0;
+    }
+};
+
+void getFillVerticesFromPerimeter(const Vector<Vertex>& perimeter, VertexBuffer& vertexBuffer) {
+    Vertex* buffer = vertexBuffer.alloc<Vertex>(perimeter.size());
+
+    int currentIndex = 0;
+    // zig zag between all previous points on the inside of the hull to create a
+    // triangle strip that fills the hull
+    int srcAindex = 0;
+    int srcBindex = perimeter.size() - 1;
+    while (srcAindex <= srcBindex) {
+        copyVertex(&buffer[currentIndex++], &perimeter[srcAindex]);
+        if (srcAindex == srcBindex) break;
+        copyVertex(&buffer[currentIndex++], &perimeter[srcBindex]);
+        srcAindex++;
+        srcBindex--;
+    }
+}
+
+/*
+ * Fills a vertexBuffer with non-alpha vertices, zig-zagging at each perimeter point to create a
+ * tri-strip as wide as the stroke.
+ *
+ * Uses an additional 2 vertices at the end to wrap around, closing the tri-strip
+ * (for a total of perimeter.size() * 2 + 2 vertices)
+ */
+void getStrokeVerticesFromPerimeter(const PaintInfo& paintInfo, const Vector<Vertex>& perimeter,
+        VertexBuffer& vertexBuffer) {
+    Vertex* buffer = vertexBuffer.alloc<Vertex>(perimeter.size() * 2 + 2);
+
+    int currentIndex = 0;
+    const Vertex* last = &(perimeter[perimeter.size() - 1]);
+    const Vertex* current = &(perimeter[0]);
+    vec2 lastNormal(current->position[1] - last->position[1],
+            last->position[0] - current->position[0]);
+    lastNormal.normalize();
+    for (unsigned int i = 0; i < perimeter.size(); i++) {
+        const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
+        vec2 nextNormal(next->position[1] - current->position[1],
+                current->position[0] - next->position[0]);
+        nextNormal.normalize();
+
+        vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
+        paintInfo.scaleOffsetForStrokeWidth(totalOffset);
+
+        Vertex::set(&buffer[currentIndex++],
+                current->position[0] + totalOffset.x,
+                current->position[1] + totalOffset.y);
+
+        Vertex::set(&buffer[currentIndex++],
+                current->position[0] - totalOffset.x,
+                current->position[1] - totalOffset.y);
+
+        last = current;
+        current = next;
+        lastNormal = nextNormal;
+    }
+
+    // wrap around to beginning
+    copyVertex(&buffer[currentIndex++], &buffer[0]);
+    copyVertex(&buffer[currentIndex++], &buffer[1]);
+
+    DEBUG_DUMP_BUFFER();
+}
+
+/**
+ * Fills a vertexBuffer with non-alpha vertices similar to getStrokeVerticesFromPerimeter, except:
+ *
+ * 1 - Doesn't need to wrap around, since the input vertices are unclosed
+ *
+ * 2 - can zig-zag across 'extra' vertices at either end, to create round caps
+ */
+void getStrokeVerticesFromUnclosedVertices(const PaintInfo& paintInfo,
+        const Vector<Vertex>& vertices, VertexBuffer& vertexBuffer) {
+    const int extra = paintInfo.capExtraDivisions();
+    const int allocSize = (vertices.size() + extra) * 2;
+
+    Vertex* buffer = vertexBuffer.alloc<Vertex>(allocSize);
+
+    if (extra > 0) {
+        // tessellate both round caps
+        const int last = vertices.size() - 1;
+        float beginTheta = atan2(
+                - (vertices[0].position[0] - vertices[1].position[0]),
+                vertices[0].position[1] - vertices[1].position[1]);
+        float endTheta = atan2(
+                - (vertices[last].position[0] - vertices[last - 1].position[0]),
+                vertices[last].position[1] - vertices[last - 1].position[1]);
+
+        const float dTheta = PI / (extra + 1);
+        const float radialScale = 2.0f / (1 + cos(dTheta));
+
+        int capOffset;
+        for (int i = 0; i < extra; i++) {
+            if (i < extra / 2) {
+                capOffset = extra - 2 * i - 1;
+            } else {
+                capOffset = 2 * i - extra;
+            }
+
+            beginTheta += dTheta;
+            vec2 beginRadialOffset(cos(beginTheta), sin(beginTheta));
+            paintInfo.scaleOffsetForStrokeWidth(beginRadialOffset);
+            Vertex::set(&buffer[capOffset],
+                    vertices[0].position[0] + beginRadialOffset.x,
+                    vertices[0].position[1] + beginRadialOffset.y);
+
+            endTheta += dTheta;
+            vec2 endRadialOffset(cos(endTheta), sin(endTheta));
+            paintInfo.scaleOffsetForStrokeWidth(endRadialOffset);
+            Vertex::set(&buffer[allocSize - 1 - capOffset],
+                    vertices[last].position[0] + endRadialOffset.x,
+                    vertices[last].position[1] + endRadialOffset.y);
+        }
+    }
+
+    int currentIndex = extra;
+    const Vertex* current = &(vertices[0]);
+    vec2 lastNormal;
+    for (unsigned int i = 0; i < vertices.size() - 1; i++) {
+        const Vertex* next = &(vertices[i + 1]);
+        vec2 nextNormal(next->position[1] - current->position[1],
+                current->position[0] - next->position[0]);
+        nextNormal.normalize();
+
+        vec2 totalOffset;
+        if (i == 0) {
+            totalOffset = nextNormal;
+        } else {
+            totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
+        }
+        paintInfo.scaleOffsetForStrokeWidth(totalOffset);
+
+        Vertex::set(&buffer[currentIndex++],
+                current->position[0] + totalOffset.x,
+                current->position[1] + totalOffset.y);
+
+        Vertex::set(&buffer[currentIndex++],
+                current->position[0] - totalOffset.x,
+                current->position[1] - totalOffset.y);
+
+        current = next;
+        lastNormal = nextNormal;
+    }
+
+    vec2 totalOffset = lastNormal;
+    paintInfo.scaleOffsetForStrokeWidth(totalOffset);
+
+    Vertex::set(&buffer[currentIndex++],
+            current->position[0] + totalOffset.x,
+            current->position[1] + totalOffset.y);
+    Vertex::set(&buffer[currentIndex++],
+            current->position[0] - totalOffset.x,
+            current->position[1] - totalOffset.y);
+
+    DEBUG_DUMP_BUFFER();
+}
+
+/**
+ * Populates a vertexBuffer with AlphaVertices to create an anti-aliased fill shape tessellation
+ * 
+ * 1 - create the AA perimeter of unit width, by zig-zagging at each point around the perimeter of
+ * the shape (using 2 * perimeter.size() vertices)
+ *
+ * 2 - wrap around to the beginning to complete the perimeter (2 vertices)
+ *
+ * 3 - zig zag back and forth inside the shape to fill it (using perimeter.size() vertices)
+ */
+void getFillVerticesFromPerimeterAA(const PaintInfo& paintInfo, const Vector<Vertex>& perimeter,
+        VertexBuffer& vertexBuffer) {
+    AlphaVertex* buffer = vertexBuffer.alloc<AlphaVertex>(perimeter.size() * 3 + 2);
+
+    // generate alpha points - fill Alpha vertex gaps in between each point with
+    // alpha 0 vertex, offset by a scaled normal.
+    int currentIndex = 0;
+    const Vertex* last = &(perimeter[perimeter.size() - 1]);
+    const Vertex* current = &(perimeter[0]);
+    vec2 lastNormal(current->position[1] - last->position[1],
+            last->position[0] - current->position[0]);
+    lastNormal.normalize();
+    for (unsigned int i = 0; i < perimeter.size(); i++) {
+        const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
+        vec2 nextNormal(next->position[1] - current->position[1],
+                current->position[0] - next->position[0]);
+        nextNormal.normalize();
+
+        // AA point offset from original point is that point's normal, such that each side is offset
+        // by .5 pixels
+        vec2 totalOffset = paintInfo.deriveAAOffset(totalOffsetFromNormals(lastNormal, nextNormal));
+
+        AlphaVertex::set(&buffer[currentIndex++],
+                current->position[0] + totalOffset.x,
+                current->position[1] + totalOffset.y,
+                0.0f);
+        AlphaVertex::set(&buffer[currentIndex++],
+                current->position[0] - totalOffset.x,
+                current->position[1] - totalOffset.y,
+                1.0f);
+
+        last = current;
+        current = next;
+        lastNormal = nextNormal;
+    }
+
+    // wrap around to beginning
+    copyAlphaVertex(&buffer[currentIndex++], &buffer[0]);
+    copyAlphaVertex(&buffer[currentIndex++], &buffer[1]);
+
+    // zig zag between all previous points on the inside of the hull to create a
+    // triangle strip that fills the hull, repeating the first inner point to
+    // create degenerate tris to start inside path
+    int srcAindex = 0;
+    int srcBindex = perimeter.size() - 1;
+    while (srcAindex <= srcBindex) {
+        copyAlphaVertex(&buffer[currentIndex++], &buffer[srcAindex * 2 + 1]);
+        if (srcAindex == srcBindex) break;
+        copyAlphaVertex(&buffer[currentIndex++], &buffer[srcBindex * 2 + 1]);
+        srcAindex++;
+        srcBindex--;
+    }
+
+    DEBUG_DUMP_BUFFER();
+}
+
+/**
+ * Stores geometry for a single, AA-perimeter (potentially rounded) cap
+ *
+ * For explanation of constants and general methodoloyg, see comments for
+ * getStrokeVerticesFromUnclosedVerticesAA() below.
+ */
+inline void storeCapAA(const PaintInfo& paintInfo, const Vector<Vertex>& vertices,
+        AlphaVertex* buffer, bool isFirst, vec2 normal, int offset) {
+    const int extra = paintInfo.capExtraDivisions();
+    const int extraOffset = (extra + 1) / 2;
+    const int capIndex = isFirst
+            ? 2 * offset + 6 + 2 * (extra + extraOffset)
+            : offset + 2 + 2 * extraOffset;
+    if (isFirst) normal *= -1;
+
+    // TODO: this normal should be scaled by radialScale if extra != 0, see totalOffsetFromNormals()
+    vec2 AAOffset = paintInfo.deriveAAOffset(normal);
+
+    vec2 strokeOffset = normal;
+    paintInfo.scaleOffsetForStrokeWidth(strokeOffset);
+    vec2 outerOffset = strokeOffset + AAOffset;
+    vec2 innerOffset = strokeOffset - AAOffset;
+
+    vec2 capAAOffset;
+    if (paintInfo.cap != SkPaint::kRound_Cap) {
+        // if the cap is square or butt, the inside primary cap vertices will be inset in two
+        // directions - both normal to the stroke, and parallel to it.
+        capAAOffset = vec2(-AAOffset.y, AAOffset.x);
+    }
+
+    // determine referencePoint, the center point for the 4 primary cap vertices
+    const Vertex* point = isFirst ? vertices.begin() : (vertices.end() - 1);
+    vec2 referencePoint(point->position[0], point->position[1]);
+    if (paintInfo.cap == SkPaint::kSquare_Cap) {
+        // To account for square cap, move the primary cap vertices (that create the AA edge) by the
+        // stroke offset vector (rotated to be parallel to the stroke)
+        referencePoint += vec2(-strokeOffset.y, strokeOffset.x);
+    }
+
+    AlphaVertex::set(&buffer[capIndex + 0],
+            referencePoint.x + outerOffset.x + capAAOffset.x,
+            referencePoint.y + outerOffset.y + capAAOffset.y,
+            0.0f);
+    AlphaVertex::set(&buffer[capIndex + 1],
+            referencePoint.x + innerOffset.x - capAAOffset.x,
+            referencePoint.y + innerOffset.y - capAAOffset.y,
+            paintInfo.maxAlpha);
+
+    bool isRound = paintInfo.cap == SkPaint::kRound_Cap;
+
+    const int postCapIndex = (isRound && isFirst) ? (2 * extraOffset - 2) : capIndex + (2 * extra);
+    AlphaVertex::set(&buffer[postCapIndex + 2],
+            referencePoint.x - outerOffset.x + capAAOffset.x,
+            referencePoint.y - outerOffset.y + capAAOffset.y,
+            0.0f);
+    AlphaVertex::set(&buffer[postCapIndex + 3],
+            referencePoint.x - innerOffset.x - capAAOffset.x,
+            referencePoint.y - innerOffset.y - capAAOffset.y,
+            paintInfo.maxAlpha);
+
+    if (isRound) {
+        const float dTheta = PI / (extra + 1);
+        const float radialScale = 2.0f / (1 + cos(dTheta));
+        float theta = atan2(normal.y, normal.x);
+        int capPerimIndex = capIndex + 2;
+
+        for (int i = 0; i < extra; i++) {
+            theta += dTheta;
+
+            vec2 radialOffset(cos(theta), sin(theta));
+
+            // scale to compensate for pinching at sharp angles, see totalOffsetFromNormals()
+            radialOffset *= radialScale;
+
+            AAOffset = paintInfo.deriveAAOffset(radialOffset);
+            paintInfo.scaleOffsetForStrokeWidth(radialOffset);
+            AlphaVertex::set(&buffer[capPerimIndex++],
+                    referencePoint.x + radialOffset.x + AAOffset.x,
+                    referencePoint.y + radialOffset.y + AAOffset.y,
+                    0.0f);
+            AlphaVertex::set(&buffer[capPerimIndex++],
+                    referencePoint.x + radialOffset.x - AAOffset.x,
+                    referencePoint.y + radialOffset.y - AAOffset.y,
+                    paintInfo.maxAlpha);
+
+            if (isFirst && i == extra - extraOffset) {
+                //copy most recent two points to first two points
+                copyAlphaVertex(&buffer[0], &buffer[capPerimIndex - 2]);
+                copyAlphaVertex(&buffer[1], &buffer[capPerimIndex - 1]);
+
+                capPerimIndex = 2; // start writing the rest of the round cap at index 2
+            }
+        }
+
+        if (isFirst) {
+            const int startCapFillIndex = capIndex + 2 * (extra - extraOffset) + 4;
+            int capFillIndex = startCapFillIndex;
+            for (int i = 0; i < extra + 2; i += 2) {
+                copyAlphaVertex(&buffer[capFillIndex++], &buffer[1 + i]);
+                // TODO: to support odd numbers of divisions, break here on the last iteration
+                copyAlphaVertex(&buffer[capFillIndex++], &buffer[startCapFillIndex - 3 - i]);
+            }
+        } else {
+            int capFillIndex = 6 * vertices.size() + 2 + 6 * extra - (extra + 2);
+            for (int i = 0; i < extra + 2; i += 2) {
+                copyAlphaVertex(&buffer[capFillIndex++], &buffer[capIndex + 1 + i]);
+                // TODO: to support odd numbers of divisions, break here on the last iteration
+                copyAlphaVertex(&buffer[capFillIndex++], &buffer[capIndex + 3 + 2 * extra - i]);
+            }
+        }
+        return;
+    }
+    if (isFirst) {
+        copyAlphaVertex(&buffer[0], &buffer[postCapIndex + 2]);
+        copyAlphaVertex(&buffer[1], &buffer[postCapIndex + 3]);
+        copyAlphaVertex(&buffer[postCapIndex + 4], &buffer[1]); // degenerate tris (the only two!)
+        copyAlphaVertex(&buffer[postCapIndex + 5], &buffer[postCapIndex + 1]);
+    } else {
+        copyAlphaVertex(&buffer[6 * vertices.size()], &buffer[postCapIndex + 1]);
+        copyAlphaVertex(&buffer[6 * vertices.size() + 1], &buffer[postCapIndex + 3]);
+    }
+}
+
+/*
+the geometry for an aa, capped stroke consists of the following:
+
+       # vertices       |    function
+----------------------------------------------------------------------
+a) 2                    | Start AA perimeter
+b) 2, 2 * roundDivOff   | First half of begin cap's perimeter
+                        |
+   2 * middlePts        | 'Outer' or 'Top' AA perimeter half (between caps)
+                        |
+a) 4                    | End cap's
+b) 2, 2 * roundDivs, 2  |    AA perimeter
+                        |
+   2 * middlePts        | 'Inner' or 'bottom' AA perimeter half
+                        |
+a) 6                    | Begin cap's perimeter
+b) 2, 2*(rD - rDO + 1), | Last half of begin cap's perimeter
+       roundDivs, 2     |
+                        |
+   2 * middlePts        | Stroke's full opacity center strip
+                        |
+a) 2                    | end stroke
+b) 2, roundDivs         |    (and end cap fill, for round)
+
+Notes:
+* rows starting with 'a)' denote the Butt or Square cap vertex use, 'b)' denote Round
+
+* 'middlePts' is (number of points in the unclosed input vertex list, minus 2) times two
+
+* 'roundDivs' or 'rD' is the number of extra vertices (beyond the minimum of 2) that define the
+        round cap's shape, and is at least two. This will increase with cap size to sufficiently
+        define the cap's level of tessellation.
+
+* 'roundDivOffset' or 'rDO' is the point about halfway along the start cap's round perimeter, where
+        the stream of vertices for the AA perimeter starts. By starting and ending the perimeter at
+        this offset, the fill of the stroke is drawn from this point with minimal extra vertices.
+
+This means the outer perimeter starts at:
+    outerIndex = (2) OR (2 + 2 * roundDivOff)
+the inner perimeter (since it is filled in reverse) starts at:
+    innerIndex = outerIndex + (4 * middlePts) + ((4) OR (4 + 2 * roundDivs)) - 1
+the stroke starts at:
+    strokeIndex = innerIndex + 1 + ((6) OR (6 + 3 * roundDivs - 2 * roundDivOffset))
+
+The total needed allocated space is either:
+    2 + 4 + 6 + 2 + 3 * (2 * middlePts) = 14 + 6 * middlePts = 2 + 6 * pts
+or, for rounded caps:
+    (2 + 2 * rDO) + (4 + 2 * rD) + (2 * (rD - rDO + 1)
+            + roundDivs + 4) + (2 + roundDivs) + 3 * (2 * middlePts)
+    = 14 + 6 * middlePts + 6 * roundDivs
+    = 2 + 6 * pts + 6 * roundDivs
+ */
+void getStrokeVerticesFromUnclosedVerticesAA(const PaintInfo& paintInfo,
+        const Vector<Vertex>& vertices, VertexBuffer& vertexBuffer) {
+
+    const int extra = paintInfo.capExtraDivisions();
+    const int allocSize = 6 * vertices.size() + 2 + 6 * extra;
+
+    AlphaVertex* buffer = vertexBuffer.alloc<AlphaVertex>(allocSize);
+
+    const int extraOffset = (extra + 1) / 2;
+    int offset = 2 * (vertices.size() - 2);
+    // there is no outer/inner here, using them for consistency with below approach
+    int currentAAOuterIndex = 2 + 2 * extraOffset;
+    int currentAAInnerIndex = currentAAOuterIndex + (2 * offset) + 3 + (2 * extra);
+    int currentStrokeIndex = currentAAInnerIndex + 7 + (3 * extra - 2 * extraOffset);
+
+    const Vertex* last = &(vertices[0]);
+    const Vertex* current = &(vertices[1]);
+    vec2 lastNormal(current->position[1] - last->position[1],
+            last->position[0] - current->position[0]);
+    lastNormal.normalize();
+
+    // TODO: use normal from bezier traversal for cap, instead of from vertices
+    storeCapAA(paintInfo, vertices, buffer, true, lastNormal, offset);
+
+    for (unsigned int i = 1; i < vertices.size() - 1; i++) {
+        const Vertex* next = &(vertices[i + 1]);
+        vec2 nextNormal(next->position[1] - current->position[1],
+                current->position[0] - next->position[0]);
+        nextNormal.normalize();
+
+        vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
+        vec2 AAOffset = paintInfo.deriveAAOffset(totalOffset);
+
+        vec2 innerOffset = totalOffset;
+        paintInfo.scaleOffsetForStrokeWidth(innerOffset);
+        vec2 outerOffset = innerOffset + AAOffset;
+        innerOffset -= AAOffset;
+
+        AlphaVertex::set(&buffer[currentAAOuterIndex++],
+                current->position[0] + outerOffset.x,
+                current->position[1] + outerOffset.y,
+                0.0f);
+        AlphaVertex::set(&buffer[currentAAOuterIndex++],
+                current->position[0] + innerOffset.x,
+                current->position[1] + innerOffset.y,
+                paintInfo.maxAlpha);
+
+        AlphaVertex::set(&buffer[currentStrokeIndex++],
+                current->position[0] + innerOffset.x,
+                current->position[1] + innerOffset.y,
+                paintInfo.maxAlpha);
+        AlphaVertex::set(&buffer[currentStrokeIndex++],
+                current->position[0] - innerOffset.x,
+                current->position[1] - innerOffset.y,
+                paintInfo.maxAlpha);
+
+        AlphaVertex::set(&buffer[currentAAInnerIndex--],
+                current->position[0] - innerOffset.x,
+                current->position[1] - innerOffset.y,
+                paintInfo.maxAlpha);
+        AlphaVertex::set(&buffer[currentAAInnerIndex--],
+                current->position[0] - outerOffset.x,
+                current->position[1] - outerOffset.y,
+                0.0f);
+
+        current = next;
+        lastNormal = nextNormal;
+    }
+
+    // TODO: use normal from bezier traversal for cap, instead of from vertices
+    storeCapAA(paintInfo, vertices, buffer, false, lastNormal, offset);
+
+    DEBUG_DUMP_ALPHA_BUFFER();
+}
+
+
+void getStrokeVerticesFromPerimeterAA(const PaintInfo& paintInfo, const Vector<Vertex>& perimeter,
+        VertexBuffer& vertexBuffer) {
+    AlphaVertex* buffer = vertexBuffer.alloc<AlphaVertex>(6 * perimeter.size() + 8);
+
+    int offset = 2 * perimeter.size() + 3;
+    int currentAAOuterIndex = 0;
+    int currentStrokeIndex = offset;
+    int currentAAInnerIndex = offset * 2;
+
+    const Vertex* last = &(perimeter[perimeter.size() - 1]);
+    const Vertex* current = &(perimeter[0]);
+    vec2 lastNormal(current->position[1] - last->position[1],
+            last->position[0] - current->position[0]);
+    lastNormal.normalize();
+    for (unsigned int i = 0; i < perimeter.size(); i++) {
+        const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
+        vec2 nextNormal(next->position[1] - current->position[1],
+                current->position[0] - next->position[0]);
+        nextNormal.normalize();
+
+        vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
+        vec2 AAOffset = paintInfo.deriveAAOffset(totalOffset);
+
+        vec2 innerOffset = totalOffset;
+        paintInfo.scaleOffsetForStrokeWidth(innerOffset);
+        vec2 outerOffset = innerOffset + AAOffset;
+        innerOffset -= AAOffset;
+
+        AlphaVertex::set(&buffer[currentAAOuterIndex++],
+                current->position[0] + outerOffset.x,
+                current->position[1] + outerOffset.y,
+                0.0f);
+        AlphaVertex::set(&buffer[currentAAOuterIndex++],
+                current->position[0] + innerOffset.x,
+                current->position[1] + innerOffset.y,
+                paintInfo.maxAlpha);
+
+        AlphaVertex::set(&buffer[currentStrokeIndex++],
+                current->position[0] + innerOffset.x,
+                current->position[1] + innerOffset.y,
+                paintInfo.maxAlpha);
+        AlphaVertex::set(&buffer[currentStrokeIndex++],
+                current->position[0] - innerOffset.x,
+                current->position[1] - innerOffset.y,
+                paintInfo.maxAlpha);
+
+        AlphaVertex::set(&buffer[currentAAInnerIndex++],
+                current->position[0] - innerOffset.x,
+                current->position[1] - innerOffset.y,
+                paintInfo.maxAlpha);
+        AlphaVertex::set(&buffer[currentAAInnerIndex++],
+                current->position[0] - outerOffset.x,
+                current->position[1] - outerOffset.y,
+                0.0f);
+
+        last = current;
+        current = next;
+        lastNormal = nextNormal;
+    }
+
+    // wrap each strip around to beginning, creating degenerate tris to bridge strips
+    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[0]);
+    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[1]);
+    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[1]);
+
+    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset]);
+    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset + 1]);
+    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset + 1]);
+
+    copyAlphaVertex(&buffer[currentAAInnerIndex++], &buffer[2 * offset]);
+    copyAlphaVertex(&buffer[currentAAInnerIndex++], &buffer[2 * offset + 1]);
+    // don't need to create last degenerate tri
+
+    DEBUG_DUMP_ALPHA_BUFFER();
+}
+
+void PathTessellator::tessellatePath(const SkPath &path, const SkPaint* paint,
+        const mat4 *transform, VertexBuffer& vertexBuffer) {
+    ATRACE_CALL();
+
+    const PaintInfo paintInfo(paint, transform);
+
+    Vector<Vertex> tempVertices;
+    float threshInvScaleX = paintInfo.inverseScaleX;
+    float threshInvScaleY = paintInfo.inverseScaleY;
+    if (paintInfo.style == SkPaint::kStroke_Style) {
+        // alter the bezier recursion threshold values we calculate in order to compensate for
+        // expansion done after the path vertices are found
+        SkRect bounds = path.getBounds();
+        if (!bounds.isEmpty()) {
+            threshInvScaleX *= bounds.width() / (bounds.width() + paint->getStrokeWidth());
+            threshInvScaleY *= bounds.height() / (bounds.height() + paint->getStrokeWidth());
+        }
+    }
+
+    // force close if we're filling the path, since fill path expects closed perimeter.
+    bool forceClose = paintInfo.style != SkPaint::kStroke_Style;
+    bool wasClosed = approximatePathOutlineVertices(path, forceClose,
+            threshInvScaleX * threshInvScaleX, threshInvScaleY * threshInvScaleY, tempVertices);
+
+    if (!tempVertices.size()) {
+        // path was empty, return without allocating vertex buffer
+        return;
+    }
+
+#if VERTEX_DEBUG
+    for (unsigned int i = 0; i < tempVertices.size(); i++) {
+        ALOGD("orig path: point at %f %f",
+                tempVertices[i].position[0], tempVertices[i].position[1]);
+    }
+#endif
+
+    if (paintInfo.style == SkPaint::kStroke_Style) {
+        if (!paintInfo.isAA) {
+            if (wasClosed) {
+                getStrokeVerticesFromPerimeter(paintInfo, tempVertices, vertexBuffer);
+            } else {
+                getStrokeVerticesFromUnclosedVertices(paintInfo, tempVertices, vertexBuffer);
+            }
+
+        } else {
+            if (wasClosed) {
+                getStrokeVerticesFromPerimeterAA(paintInfo, tempVertices, vertexBuffer);
+            } else {
+                getStrokeVerticesFromUnclosedVerticesAA(paintInfo, tempVertices, vertexBuffer);
+            }
+        }
+    } else {
+        // For kStrokeAndFill style, the path should be adjusted externally.
+        // It will be treated as a fill here.
+        if (!paintInfo.isAA) {
+            getFillVerticesFromPerimeter(tempVertices, vertexBuffer);
+        } else {
+            getFillVerticesFromPerimeterAA(paintInfo, tempVertices, vertexBuffer);
+        }
+    }
+}
+
+static void expandRectToCoverVertex(SkRect& rect, const Vertex& vertex) {
+    rect.fLeft = fminf(rect.fLeft, vertex.position[0]);
+    rect.fTop = fminf(rect.fTop, vertex.position[1]);
+    rect.fRight = fmaxf(rect.fRight, vertex.position[0]);
+    rect.fBottom = fmaxf(rect.fBottom, vertex.position[1]);
+}
+
+void PathTessellator::tessellateLines(const float* points, int count, SkPaint* paint,
+        const mat4* transform, SkRect& bounds, VertexBuffer& vertexBuffer) {
+    ATRACE_CALL();
+    const PaintInfo paintInfo(paint, transform);
+
+    const int extra = paintInfo.capExtraDivisions();
+    int numLines = count / 4;
+    int lineAllocSize;
+    // pre-allocate space for lines in the buffer, and degenerate tris in between
+    if (paintInfo.isAA) {
+        lineAllocSize = 6 * (2) + 2 + 6 * extra;
+        vertexBuffer.alloc<AlphaVertex>(numLines * lineAllocSize + (numLines - 1) * 2);
+    } else {
+        lineAllocSize = 2 * ((2) + extra);
+        vertexBuffer.alloc<Vertex>(numLines * lineAllocSize + (numLines - 1) * 2);
+    }
+
+    Vector<Vertex> tempVertices;
+    tempVertices.push();
+    tempVertices.push();
+    Vertex* tempVerticesData = tempVertices.editArray();
+    bounds.set(points[0], points[1], points[0], points[1]);
+    for (int i = 0; i < count; i += 4) {
+        Vertex::set(&(tempVerticesData[0]), points[i + 0], points[i + 1]);
+        Vertex::set(&(tempVerticesData[1]), points[i + 2], points[i + 3]);
+
+        if (paintInfo.isAA) {
+            getStrokeVerticesFromUnclosedVerticesAA(paintInfo, tempVertices, vertexBuffer);
+        } else {
+            getStrokeVerticesFromUnclosedVertices(paintInfo, tempVertices, vertexBuffer);
+        }
+
+        // calculate bounds
+        expandRectToCoverVertex(bounds, tempVerticesData[0]);
+        expandRectToCoverVertex(bounds, tempVerticesData[1]);
+    }
+
+    expandBoundsForStroke(bounds, paint, true); // force-expand bounds to incorporate stroke
+
+    // since multiple objects tessellated into buffer, separate them with degen tris
+    if (paintInfo.isAA) {
+        vertexBuffer.createDegenerateSeparators<AlphaVertex>(lineAllocSize);
+    } else {
+        vertexBuffer.createDegenerateSeparators<Vertex>(lineAllocSize);
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Simple path line approximation
+///////////////////////////////////////////////////////////////////////////////
+
+void pushToVector(Vector<Vertex>& vertices, float x, float y) {
+    // TODO: make this not yuck
+    vertices.push();
+    Vertex* newVertex = &(vertices.editArray()[vertices.size() - 1]);
+    Vertex::set(newVertex, x, y);
+}
+
+bool PathTessellator::approximatePathOutlineVertices(const SkPath& path, bool forceClose,
+        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
+    ATRACE_CALL();
+
+    // TODO: to support joins other than sharp miter, join vertices should be labelled in the
+    // perimeter, or resolved into more vertices. Reconsider forceClose-ing in that case.
+    SkPath::Iter iter(path, forceClose);
+    SkPoint pts[4];
+    SkPath::Verb v;
+    while (SkPath::kDone_Verb != (v = iter.next(pts))) {
+            switch (v) {
+            case SkPath::kMove_Verb:
+                pushToVector(outputVertices, pts[0].x(), pts[0].y());
+                ALOGV("Move to pos %f %f", pts[0].x(), pts[0].y());
+                break;
+            case SkPath::kClose_Verb:
+                ALOGV("Close at pos %f %f", pts[0].x(), pts[0].y());
+                break;
+            case SkPath::kLine_Verb:
+                ALOGV("kLine_Verb %f %f -> %f %f", pts[0].x(), pts[0].y(), pts[1].x(), pts[1].y());
+                pushToVector(outputVertices, pts[1].x(), pts[1].y());
+                break;
+            case SkPath::kQuad_Verb:
+                ALOGV("kQuad_Verb");
+                recursiveQuadraticBezierVertices(
+                        pts[0].x(), pts[0].y(),
+                        pts[2].x(), pts[2].y(),
+                        pts[1].x(), pts[1].y(),
+                        sqrInvScaleX, sqrInvScaleY, outputVertices);
+                break;
+            case SkPath::kCubic_Verb:
+                ALOGV("kCubic_Verb");
+                recursiveCubicBezierVertices(
+                        pts[0].x(), pts[0].y(),
+                        pts[1].x(), pts[1].y(),
+                        pts[3].x(), pts[3].y(),
+                        pts[2].x(), pts[2].y(),
+                        sqrInvScaleX, sqrInvScaleY, outputVertices);
+                break;
+            default:
+                break;
+            }
+    }
+
+    int size = outputVertices.size();
+    if (size >= 2 && outputVertices[0].position[0] == outputVertices[size - 1].position[0] &&
+            outputVertices[0].position[1] == outputVertices[size - 1].position[1]) {
+        outputVertices.pop();
+        return true;
+    }
+    return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Bezier approximation
+///////////////////////////////////////////////////////////////////////////////
+
+void PathTessellator::recursiveCubicBezierVertices(
+        float p1x, float p1y, float c1x, float c1y,
+        float p2x, float p2y, float c2x, float c2y,
+        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
+    float dx = p2x - p1x;
+    float dy = p2y - p1y;
+    float d1 = fabs((c1x - p2x) * dy - (c1y - p2y) * dx);
+    float d2 = fabs((c2x - p2x) * dy - (c2y - p2y) * dx);
+    float d = d1 + d2;
+
+    // multiplying by sqrInvScaleY/X equivalent to multiplying in dimensional scale factors
+
+    if (d * d < THRESHOLD * THRESHOLD * (dx * dx * sqrInvScaleY + dy * dy * sqrInvScaleX)) {
+        // below thresh, draw line by adding endpoint
+        pushToVector(outputVertices, p2x, p2y);
+    } else {
+        float p1c1x = (p1x + c1x) * 0.5f;
+        float p1c1y = (p1y + c1y) * 0.5f;
+        float p2c2x = (p2x + c2x) * 0.5f;
+        float p2c2y = (p2y + c2y) * 0.5f;
+
+        float c1c2x = (c1x + c2x) * 0.5f;
+        float c1c2y = (c1y + c2y) * 0.5f;
+
+        float p1c1c2x = (p1c1x + c1c2x) * 0.5f;
+        float p1c1c2y = (p1c1y + c1c2y) * 0.5f;
+
+        float p2c1c2x = (p2c2x + c1c2x) * 0.5f;
+        float p2c1c2y = (p2c2y + c1c2y) * 0.5f;
+
+        float mx = (p1c1c2x + p2c1c2x) * 0.5f;
+        float my = (p1c1c2y + p2c1c2y) * 0.5f;
+
+        recursiveCubicBezierVertices(
+                p1x, p1y, p1c1x, p1c1y,
+                mx, my, p1c1c2x, p1c1c2y,
+                sqrInvScaleX, sqrInvScaleY, outputVertices);
+        recursiveCubicBezierVertices(
+                mx, my, p2c1c2x, p2c1c2y,
+                p2x, p2y, p2c2x, p2c2y,
+                sqrInvScaleX, sqrInvScaleY, outputVertices);
+    }
+}
+
+void PathTessellator::recursiveQuadraticBezierVertices(
+        float ax, float ay,
+        float bx, float by,
+        float cx, float cy,
+        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
+    float dx = bx - ax;
+    float dy = by - ay;
+    float d = (cx - bx) * dy - (cy - by) * dx;
+
+    if (d * d < THRESHOLD * THRESHOLD * (dx * dx * sqrInvScaleY + dy * dy * sqrInvScaleX)) {
+        // below thresh, draw line by adding endpoint
+        pushToVector(outputVertices, bx, by);
+    } else {
+        float acx = (ax + cx) * 0.5f;
+        float bcx = (bx + cx) * 0.5f;
+        float acy = (ay + cy) * 0.5f;
+        float bcy = (by + cy) * 0.5f;
+
+        // midpoint
+        float mx = (acx + bcx) * 0.5f;
+        float my = (acy + bcy) * 0.5f;
+
+        recursiveQuadraticBezierVertices(ax, ay, mx, my, acx, acy,
+                sqrInvScaleX, sqrInvScaleY, outputVertices);
+        recursiveQuadraticBezierVertices(mx, my, bx, by, bcx, bcy,
+                sqrInvScaleX, sqrInvScaleY, outputVertices);
+    }
+}
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/PathTessellator.h b/libs/hwui/PathTessellator.h
new file mode 100644
index 0000000..596d49d
--- /dev/null
+++ b/libs/hwui/PathTessellator.h
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+#ifndef ANDROID_HWUI_PATH_TESSELLATOR_H
+#define ANDROID_HWUI_PATH_TESSELLATOR_H
+
+#include <utils/Vector.h>
+
+#include "Matrix.h"
+#include "Rect.h"
+#include "Vertex.h"
+
+namespace android {
+namespace uirenderer {
+
+class VertexBuffer {
+public:
+    VertexBuffer():
+        mBuffer(0),
+        mSize(0),
+        mCleanupMethod(NULL)
+    {}
+
+    ~VertexBuffer() {
+        if (mCleanupMethod) mCleanupMethod(mBuffer);
+    }
+
+    /**
+       This should be the only method used by the PathTessellator. Subsequent calls to alloc will
+       allocate space within the first allocation (useful if you want to eventually allocate
+       multiple regions within a single VertexBuffer, such as with PathTessellator::tesselateLines()
+     */
+    template <class TYPE>
+    TYPE* alloc(int size) {
+        if (mSize) {
+            TYPE* reallocBuffer = (TYPE*)mReallocBuffer;
+            // already have allocated the buffer, re-allocate space within
+            if (mReallocBuffer != mBuffer) {
+                // not first re-allocation, leave space for degenerate triangles to separate strips
+                reallocBuffer += 2;
+            }
+            mReallocBuffer = reallocBuffer + size;
+            return reallocBuffer;
+        }
+        mSize = size;
+        mReallocBuffer = mBuffer = (void*)new TYPE[size];
+        mCleanupMethod = &(cleanup<TYPE>);
+
+        return (TYPE*)mBuffer;
+    }
+
+    void* getBuffer() const { return mBuffer; }
+    unsigned int getSize() const { return mSize; }
+
+    template <class TYPE>
+    void createDegenerateSeparators(int allocSize) {
+        TYPE* end = (TYPE*)mBuffer + mSize;
+        for (TYPE* degen = (TYPE*)mBuffer + allocSize; degen < end; degen += 2 + allocSize) {
+            memcpy(degen, degen - 1, sizeof(TYPE));
+            memcpy(degen + 1, degen + 2, sizeof(TYPE));
+        }
+    }
+
+private:
+    template <class TYPE>
+    static void cleanup(void* buffer) {
+        delete[] (TYPE*)buffer;
+    }
+
+    void* mBuffer;
+    unsigned int mSize;
+
+    void* mReallocBuffer; // used for multi-allocation
+
+    void (*mCleanupMethod)(void*);
+};
+
+class PathTessellator {
+public:
+    static void expandBoundsForStroke(SkRect& bounds, const SkPaint* paint, bool forceExpand);
+
+    static void tessellatePath(const SkPath& path, const SkPaint* paint,
+            const mat4 *transform, VertexBuffer& vertexBuffer);
+
+    static void tessellateLines(const float* points, int count, SkPaint* paint,
+            const mat4* transform, SkRect& bounds, VertexBuffer& vertexBuffer);
+
+private:
+    static bool approximatePathOutlineVertices(const SkPath &path, bool forceClose,
+        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex> &outputVertices);
+
+/*
+  endpoints a & b,
+  control c
+ */
+    static void recursiveQuadraticBezierVertices(
+            float ax, float ay,
+            float bx, float by,
+            float cx, float cy,
+            float sqrInvScaleX, float sqrInvScaleY,
+            Vector<Vertex> &outputVertices);
+
+/*
+  endpoints p1, p2
+  control c1, c2
+ */
+    static void recursiveCubicBezierVertices(
+            float p1x, float p1y,
+            float c1x, float c1y,
+            float p2x, float p2y,
+            float c2x, float c2y,
+            float sqrInvScaleX, float sqrInvScaleY,
+            Vector<Vertex> &outputVertices);
+};
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_PATH_TESSELLATOR_H
diff --git a/libs/hwui/Program.h b/libs/hwui/Program.h
index 7e3aacf..b1df980 100644
--- a/libs/hwui/Program.h
+++ b/libs/hwui/Program.h
@@ -81,8 +81,6 @@
 
 #define PROGRAM_IS_SIMPLE_GRADIENT 41
 
-#define PROGRAM_IS_VERTEX_SHAPE_SHIFT 42
-
 ///////////////////////////////////////////////////////////////////////////////
 // Types
 ///////////////////////////////////////////////////////////////////////////////
@@ -129,8 +127,7 @@
     bool hasBitmap;
     bool isBitmapNpot;
 
-    bool isAA;
-    bool isVertexShape;
+    bool isAA; // drawing with a per-vertex alpha
 
     bool hasGradient;
     Gradient gradientType;
@@ -168,7 +165,6 @@
         hasTextureTransform = false;
 
         isAA = false;
-        isVertexShape = false;
 
         modulate = false;
 
@@ -263,7 +259,6 @@
         if (hasTextureTransform) key |= programid(0x1) << PROGRAM_HAS_TEXTURE_TRANSFORM_SHIFT;
         if (hasGammaCorrection) key |= programid(0x1) << PROGRAM_HAS_GAMMA_CORRECTION;
         if (isSimpleGradient) key |= programid(0x1) << PROGRAM_IS_SIMPLE_GRADIENT;
-        if (isVertexShape) key |= programid(0x1) << PROGRAM_IS_VERTEX_SHAPE_SHIFT;
         return key;
     }
 
diff --git a/libs/hwui/ProgramCache.cpp b/libs/hwui/ProgramCache.cpp
index f536ade..fb00335 100644
--- a/libs/hwui/ProgramCache.cpp
+++ b/libs/hwui/ProgramCache.cpp
@@ -40,9 +40,6 @@
         "attribute vec4 position;\n";
 const char* gVS_Header_Attributes_TexCoords =
         "attribute vec2 texCoords;\n";
-const char* gVS_Header_Attributes_AALineParameters =
-        "attribute float vtxWidth;\n"
-        "attribute float vtxLength;\n";
 const char* gVS_Header_Attributes_AAVertexShapeParameters =
         "attribute float vtxAlpha;\n";
 const char* gVS_Header_Uniforms_TextureTransform =
@@ -68,9 +65,6 @@
         "uniform mediump vec2 textureDimension;\n";
 const char* gVS_Header_Varyings_HasTexture =
         "varying vec2 outTexCoords;\n";
-const char* gVS_Header_Varyings_IsAALine =
-        "varying float widthProportion;\n"
-        "varying float lengthProportion;\n";
 const char* gVS_Header_Varyings_IsAAVertexShape =
         "varying float alpha;\n";
 const char* gVS_Header_Varyings_HasBitmap =
@@ -129,9 +123,6 @@
         "    gl_Position = projection * transform * position;\n";
 const char* gVS_Main_PointSize =
         "    gl_PointSize = pointSize;\n";
-const char* gVS_Main_AALine =
-        "    widthProportion = vtxWidth;\n"
-        "    lengthProportion = vtxLength;\n";
 const char* gVS_Main_AAVertexShape =
         "    alpha = vtxAlpha;\n";
 const char* gVS_Footer =
@@ -149,9 +140,6 @@
         "precision mediump float;\n\n";
 const char* gFS_Uniforms_Color =
         "uniform vec4 color;\n";
-const char* gFS_Uniforms_AALine =
-        "uniform float boundaryWidth;\n"
-        "uniform float boundaryLength;\n";
 const char* gFS_Header_Uniforms_PointHasBitmap =
         "uniform vec2 textureDimension;\n"
         "uniform float pointSize;\n";
@@ -259,9 +247,6 @@
         "    fragColor = color;\n";
 const char* gFS_Main_ModulateColor =
         "    fragColor *= color.a;\n";
-const char* gFS_Main_AccountForAALine =
-        "    fragColor *= (1.0 - smoothstep(boundaryWidth, 0.5, abs(0.5 - widthProportion)))\n"
-        "               * (1.0 - smoothstep(boundaryLength, 0.5, abs(0.5 - lengthProportion)));\n";
 const char* gFS_Main_AccountForAAVertexShape =
         "    fragColor *= alpha;\n";
 
@@ -472,11 +457,7 @@
         shader.append(gVS_Header_Attributes_TexCoords);
     }
     if (description.isAA) {
-        if (description.isVertexShape) {
-            shader.append(gVS_Header_Attributes_AAVertexShapeParameters);
-        } else {
-            shader.append(gVS_Header_Attributes_AALineParameters);
-        }
+        shader.append(gVS_Header_Attributes_AAVertexShapeParameters);
     }
     // Uniforms
     shader.append(gVS_Header_Uniforms);
@@ -497,11 +478,7 @@
         shader.append(gVS_Header_Varyings_HasTexture);
     }
     if (description.isAA) {
-        if (description.isVertexShape) {
-            shader.append(gVS_Header_Varyings_IsAAVertexShape);
-        } else {
-            shader.append(gVS_Header_Varyings_IsAALine);
-        }
+        shader.append(gVS_Header_Varyings_IsAAVertexShape);
     }
     if (description.hasGradient) {
         shader.append(gVS_Header_Varyings_HasGradient[gradientIndex(description)]);
@@ -520,11 +497,7 @@
             shader.append(gVS_Main_OutTexCoords);
         }
         if (description.isAA) {
-            if (description.isVertexShape) {
-                shader.append(gVS_Main_AAVertexShape);
-            } else {
-                shader.append(gVS_Main_AALine);
-            }
+            shader.append(gVS_Main_AAVertexShape);
         }
         if (description.hasBitmap) {
             shader.append(description.isPoint ?
@@ -574,11 +547,7 @@
         shader.append(gVS_Header_Varyings_HasTexture);
     }
     if (description.isAA) {
-        if (description.isVertexShape) {
-            shader.append(gVS_Header_Varyings_IsAAVertexShape);
-        } else {
-            shader.append(gVS_Header_Varyings_IsAALine);
-        }
+        shader.append(gVS_Header_Varyings_IsAAVertexShape);
     }
     if (description.hasGradient) {
         shader.append(gVS_Header_Varyings_HasGradient[gradientIndex(description)]);
@@ -603,9 +572,6 @@
     } else if (description.hasExternalTexture) {
         shader.append(gFS_Uniforms_ExternalTextureSampler);
     }
-    if (description.isAA && !description.isVertexShape) {
-        shader.append(gFS_Uniforms_AALine);
-    }
     if (description.hasGradient) {
         shader.append(gFS_Uniforms_GradientSampler[gradientIndex(description)]);
     }
@@ -618,8 +584,7 @@
 
     // Optimization for common cases
     if (!description.isAA && !blendFramebuffer &&
-            description.colorOp == ProgramDescription::kColorNone &&
-            !description.isPoint && !description.isVertexShape) {
+            description.colorOp == ProgramDescription::kColorNone && !description.isPoint) {
         bool fast = false;
 
         const bool noShader = !description.hasGradient && !description.hasBitmap;
@@ -754,11 +719,7 @@
         shader.append(gFS_Main_ApplyColorOp[description.colorOp]);
 
         if (description.isAA) {
-            if (description.isVertexShape) {
-                shader.append(gFS_Main_AccountForAAVertexShape);
-            } else {
-                shader.append(gFS_Main_AccountForAALine);
-            }
+            shader.append(gFS_Main_AccountForAAVertexShape);
         }
 
         // Output the fragment
diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h
index 80f39ff..5f4bb5a 100644
--- a/libs/hwui/Rect.h
+++ b/libs/hwui/Rect.h
@@ -171,22 +171,19 @@
     }
 
 private:
-    static inline float min(float a, float b) { return (a < b) ? a : b; }
-    static inline float max(float a, float b) { return (a > b) ? a : b; }
-
     void intersectWith(Rect& tmp) const {
-        tmp.left = max(left, tmp.left);
-        tmp.top = max(top, tmp.top);
-        tmp.right = min(right, tmp.right);
-        tmp.bottom = min(bottom, tmp.bottom);
+        tmp.left = fmaxf(left, tmp.left);
+        tmp.top = fmaxf(top, tmp.top);
+        tmp.right = fminf(right, tmp.right);
+        tmp.bottom = fminf(bottom, tmp.bottom);
     }
 
     Rect intersectWith(float l, float t, float r, float b) const {
         Rect tmp;
-        tmp.left = max(left, l);
-        tmp.top = max(top, t);
-        tmp.right = min(right, r);
-        tmp.bottom = min(bottom, b);
+        tmp.left = fmaxf(left, l);
+        tmp.top = fmaxf(top, t);
+        tmp.right = fminf(right, r);
+        tmp.bottom = fminf(bottom, b);
         return tmp;
     }
 
diff --git a/libs/hwui/Snapshot.cpp b/libs/hwui/Snapshot.cpp
index 22c7dde..87ed825 100644
--- a/libs/hwui/Snapshot.cpp
+++ b/libs/hwui/Snapshot.cpp
@@ -184,6 +184,7 @@
 
 void Snapshot::resetClip(float left, float top, float right, float bottom) {
     clipRect = &mClipRectRoot;
+    clipRegion = &mClipRegionRoot;
     setClip(left, top, right, bottom);
 }
 
diff --git a/libs/hwui/Vertex.h b/libs/hwui/Vertex.h
index 38455dc..c120428 100644
--- a/libs/hwui/Vertex.h
+++ b/libs/hwui/Vertex.h
@@ -68,25 +68,6 @@
     }
 }; // struct AlphaVertex
 
-/**
- * Simple structure to describe a vertex with a position and an alpha value.
- */
-struct AAVertex : Vertex {
-    float width;
-    float length;
-
-    static inline void set(AAVertex* vertex, float x, float y, float width, float length) {
-        Vertex::set(vertex, x, y);
-        vertex[0].width = width;
-        vertex[0].length = length;
-    }
-
-    static inline void setColor(AAVertex* vertex, float width, float length) {
-        vertex[0].width = width;
-        vertex[0].length = length;
-    }
-}; // struct AlphaVertex
-
 }; // namespace uirenderer
 }; // namespace android
 
diff --git a/libs/hwui/font/CacheTexture.cpp b/libs/hwui/font/CacheTexture.cpp
index f653592..24b0523 100644
--- a/libs/hwui/font/CacheTexture.cpp
+++ b/libs/hwui/font/CacheTexture.cpp
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <SkGlyph.h>
 #include <utils/Log.h>
 
 #include "Debug.h"
diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp
index 34afe97..1afcb46 100644
--- a/libs/hwui/font/Font.cpp
+++ b/libs/hwui/font/Font.cpp
@@ -20,6 +20,7 @@
 
 #include <utils/JenkinsHash.h>
 
+#include <SkGlyph.h>
 #include <SkUtils.h>
 
 #include "Debug.h"
@@ -50,6 +51,7 @@
     mScaleX = paint->getTextScaleX();
     mStyle = paint->getStyle();
     mStrokeWidth = paint->getStrokeWidth();
+    mAntiAliasing = paint->isAntiAlias();
 }
 
 Font::~Font() {
@@ -68,6 +70,7 @@
     hash = JenkinsHashMix(hash, android::hash_type(mScaleX));
     hash = JenkinsHashMix(hash, android::hash_type(mStyle));
     hash = JenkinsHashMix(hash, android::hash_type(mStrokeWidth));
+    hash = JenkinsHashMix(hash, int(mAntiAliasing));
     return JenkinsHashWhiten(hash);
 }
 
@@ -94,6 +97,9 @@
     if (lhs.mStrokeWidth < rhs.mStrokeWidth) return -1;
     if (lhs.mStrokeWidth > rhs.mStrokeWidth) return +1;
 
+    deltaInt = int(lhs.mAntiAliasing) - int(rhs.mAntiAliasing);
+    if (deltaInt != 0) return deltaInt;
+
     return 0;
 }
 
@@ -384,7 +390,9 @@
     uint32_t startY = 0;
 
     // Get the bitmap for the glyph
-    paint->findImage(skiaGlyph, NULL);
+    if (!skiaGlyph.fImage) {
+        paint->findImage(skiaGlyph, NULL);
+    }
     mState->cacheBitmap(skiaGlyph, glyph, &startX, &startY, precaching);
 
     if (!glyph->mIsValid) {
diff --git a/libs/hwui/font/Font.h b/libs/hwui/font/Font.h
index 6ddf162..7a64a67 100644
--- a/libs/hwui/font/Font.h
+++ b/libs/hwui/font/Font.h
@@ -68,6 +68,7 @@
         float mScaleX;
         uint8_t mStyle;
         float mStrokeWidth;
+        bool mAntiAliasing;
     };
 
     ~Font();
diff --git a/location/java/android/location/Location.java b/location/java/android/location/Location.java
index 9b32667..f70110c 100644
--- a/location/java/android/location/Location.java
+++ b/location/java/android/location/Location.java
@@ -91,6 +91,7 @@
     private boolean mHasAccuracy = false;
     private float mAccuracy = 0.0f;
     private Bundle mExtras = null;
+    private boolean mIsFromMockProvider = false;
 
     // Cache the inputs and outputs of computeDistanceAndBearing
     // so calls to distanceTo() and bearingTo() can share work
@@ -140,6 +141,7 @@
         mHasAccuracy = l.mHasAccuracy;
         mAccuracy = l.mAccuracy;
         mExtras = (l.mExtras == null) ? null : new Bundle(l.mExtras);
+        mIsFromMockProvider = l.mIsFromMockProvider;
     }
 
     /**
@@ -160,6 +162,7 @@
         mHasAccuracy = false;
         mAccuracy = 0;
         mExtras = null;
+        mIsFromMockProvider = false;
     }
 
     /**
@@ -840,6 +843,7 @@
         if (mHasAltitude) s.append(" alt=").append(mAltitude);
         if (mHasSpeed) s.append(" vel=").append(mSpeed);
         if (mHasBearing) s.append(" bear=").append(mBearing);
+        if (mIsFromMockProvider) s.append(" mock");
 
         if (mExtras != null) {
             s.append(" {").append(mExtras).append('}');
@@ -871,6 +875,7 @@
             l.mHasAccuracy = in.readInt() != 0;
             l.mAccuracy = in.readFloat();
             l.mExtras = in.readBundle();
+            l.mIsFromMockProvider = in.readInt() != 0;
             return l;
         }
 
@@ -901,6 +906,7 @@
         parcel.writeInt(mHasAccuracy ? 1 : 0);
         parcel.writeFloat(mAccuracy);
         parcel.writeBundle(mExtras);
+        parcel.writeInt(mIsFromMockProvider? 1 : 0);
     }
 
     /**
@@ -934,4 +940,23 @@
         }
         mExtras.putParcelable(key, value);
     }
+
+    /**
+     * Returns true if the Location came from a mock provider.
+     *
+     * @return true if this Location came from a mock provider, false otherwise
+     */
+    public boolean isFromMockProvider() {
+        return mIsFromMockProvider;
+    }
+
+    /**
+     * Flag this Location as having come from a mock provider or not.
+     *
+     * @param isFromMockProvider true if this Location came from a mock provider, false otherwise
+     * @hide
+     */
+    public void setIsFromMockProvider(boolean isFromMockProvider) {
+        mIsFromMockProvider = isFromMockProvider;
+    }
 }
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 0b9286e..989178a 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -1549,9 +1549,9 @@
     public GpsStatus getGpsStatus(GpsStatus status) {
         if (status == null) {
             status = new GpsStatus();
-       }
-       status.setStatus(mGpsStatus);
-       return status;
+        }
+        status.setStatus(mGpsStatus);
+        return status;
     }
 
     /**
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index 772cb4c..5383d08 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -290,6 +290,10 @@
             mChannelCount = 2;
             mChannels = AudioFormat.CHANNEL_IN_STEREO;
             break;
+        case (AudioFormat.CHANNEL_IN_FRONT | AudioFormat.CHANNEL_IN_BACK):
+            mChannelCount = 2;
+            mChannels = channelConfig;
+            break;
         default:
             mChannelCount = 0;
             mChannels = AudioFormat.CHANNEL_INVALID;
@@ -464,6 +468,7 @@
             break;
         case AudioFormat.CHANNEL_IN_STEREO:
         case AudioFormat.CHANNEL_CONFIGURATION_STEREO:
+        case (AudioFormat.CHANNEL_IN_FRONT | AudioFormat.CHANNEL_IN_BACK):
             channelCount = 2;
             break;
         case AudioFormat.CHANNEL_INVALID:
diff --git a/media/java/android/mtp/MtpStorage.java b/media/java/android/mtp/MtpStorage.java
index 9cf65a3..e20eabc 100644
--- a/media/java/android/mtp/MtpStorage.java
+++ b/media/java/android/mtp/MtpStorage.java
@@ -39,7 +39,7 @@
         mStorageId = volume.getStorageId();
         mPath = volume.getPath();
         mDescription = context.getResources().getString(volume.getDescriptionId());
-        mReserveSpace = volume.getMtpReserveSpace() * 1024 * 1024;
+        mReserveSpace = volume.getMtpReserveSpace() * 1024L * 1024L;
         mRemovable = volume.isRemovable();
         mMaxFileSize = volume.getMaxFileSize();
     }
diff --git a/media/tests/omxjpegdecoder/SkOmxPixelRef.h b/media/tests/omxjpegdecoder/SkOmxPixelRef.h
index afedcbd..374604c 100644
--- a/media/tests/omxjpegdecoder/SkOmxPixelRef.h
+++ b/media/tests/omxjpegdecoder/SkOmxPixelRef.h
@@ -33,6 +33,7 @@
      //! Return the allocation size for the pixels
     size_t getSize() const { return mSize; }
 
+    SK_DECLARE_UNFLATTENABLE_OBJECT()
 protected:
     // overrides from SkPixelRef
     virtual void* onLockPixels(SkColorTable**);
diff --git a/packages/FusedLocation/Android.mk b/packages/FusedLocation/Android.mk
index a81b9f1..318782f 100644
--- a/packages/FusedLocation/Android.mk
+++ b/packages/FusedLocation/Android.mk
@@ -23,6 +23,5 @@
 
 LOCAL_PACKAGE_NAME := FusedLocation
 LOCAL_CERTIFICATE := platform
-LOCAL_SDK_VERSION := current
 
 include $(BUILD_PACKAGE)
diff --git a/packages/FusedLocation/AndroidManifest.xml b/packages/FusedLocation/AndroidManifest.xml
index 779428e..6a4d4bf 100644
--- a/packages/FusedLocation/AndroidManifest.xml
+++ b/packages/FusedLocation/AndroidManifest.xml
@@ -18,14 +18,17 @@
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.location.fused"
-        coreApp="true">
+        coreApp="true"
+        android:sharedUserId="android.uid.system">
 
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" />
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
 
     <application
-            android:label="@string/app_label">
+            android:label="@string/app_label"
+            android:process="system">
 
         <uses-library android:name="com.android.location.provider" />
 
@@ -39,6 +42,7 @@
                <action android:name="com.android.location.service.FusedLocationProvider" />
            </intent-filter>
            <meta-data android:name="serviceVersion" android:value="0" />
+           <meta-data android:name="serviceIsMultiuser" android:value="true" />
         </service>
     </application>
 </manifest>
diff --git a/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java b/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java
index 7918882..56feb47 100644
--- a/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java
+++ b/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java
@@ -24,13 +24,17 @@
 import com.android.location.provider.ProviderPropertiesUnbundled;
 import com.android.location.provider.ProviderRequestUnbundled;
 
+import android.content.BroadcastReceiver;
 import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.location.Criteria;
 import android.location.LocationProvider;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
+import android.os.UserHandle;
 import android.os.WorkSource;
 
 public class FusedLocationProvider extends LocationProviderBase implements FusionEngine.Callback {
@@ -60,6 +64,19 @@
         super(TAG, PROPERTIES);
         mContext = context;
         mEngine = new FusionEngine(context, Looper.myLooper());
+
+        // listen for user change
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
+        mContext.registerReceiverAsUser(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                String action = intent.getAction();
+                if (Intent.ACTION_USER_SWITCHED.equals(action)) {
+                    mEngine.switchUser();
+                }
+            }
+        }, UserHandle.ALL, intentFilter, null, mHandler);
     }
 
     /**
diff --git a/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java b/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
index f909158..4ba6c34 100644
--- a/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
+++ b/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java
@@ -300,4 +300,12 @@
         s.append("    ").append(mStats.get(NETWORK)).append('\n');
         pw.append(s);
     }
+
+    /** Called on mLooper thread */
+    public void switchUser() {
+        // reset state to prevent location data leakage
+        mFusedLocation = null;
+        mGpsLocation = null;
+        mNetworkLocation = null;
+    }
 }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index fc0ff55..5838526 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -71,7 +71,7 @@
     // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
     // is properly propagated through your change.  Not doing so will result in a loss of user
     // settings.
-    private static final int DATABASE_VERSION = 96;
+    private static final int DATABASE_VERSION = 97;
 
     private Context mContext;
     private int mUserHandle;
@@ -112,7 +112,6 @@
         super(context, dbNameForUser(userHandle), null, DATABASE_VERSION);
         mContext = context;
         mUserHandle = userHandle;
-        setWriteAheadLoggingEnabled(true);
     }
 
     public static boolean isValidTable(String name) {
@@ -1536,6 +1535,11 @@
             upgradeVersion = 96;
         }
 
+        if (upgradeVersion == 96) {
+            // NOP bump due to a reverted change that some people got on upgrade.
+            upgradeVersion = 97;
+        }
+
         // *** Remember to update DATABASE_VERSION above!
 
         if (upgradeVersion != currentVersion) {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index f18338a..45319a8 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -23,6 +23,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import android.app.ActivityManager;
+import android.app.AppOpsManager;
 import android.app.backup.BackupManager;
 import android.content.BroadcastReceiver;
 import android.content.ContentProvider;
@@ -323,6 +324,7 @@
         mBackupManager = new BackupManager(getContext());
         mUserManager = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
 
+        setAppOps(AppOpsManager.OP_NONE, AppOpsManager.OP_WRITE_SETTINGS);
         establishDbTracking(UserHandle.USER_OWNER);
 
         IntentFilter userFilter = new IntentFilter();
@@ -544,7 +546,8 @@
      * Fast path that avoids the use of chatty remoted Cursors.
      */
     @Override
-    public Bundle call(String method, String request, Bundle args) {
+    public Bundle callFromPackage(String callingPackage, String method, String request,
+            Bundle args) {
         int callingUser = UserHandle.getCallingUserId();
         if (args != null) {
             int reqUser = args.getInt(Settings.CALL_METHOD_USER_KEY, callingUser);
@@ -586,7 +589,22 @@
         // Put methods - new value is in the args bundle under the key named by
         // the Settings.NameValueTable.VALUE static.
         final String newValue = (args == null)
-        ? null : args.getString(Settings.NameValueTable.VALUE);
+                ? null : args.getString(Settings.NameValueTable.VALUE);
+
+        // Framework can't do automatic permission checking for calls, so we need
+        // to do it here.
+        if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SETTINGS)
+                != PackageManager.PERMISSION_GRANTED) {
+            throw new SecurityException(
+                    String.format("Permission denial: writing to settings requires %1$s",
+                                  android.Manifest.permission.WRITE_SETTINGS));
+        }
+
+        // Also need to take care of app op.
+        if (getAppOpsManager().noteOp(AppOpsManager.OP_WRITE_SETTINGS, Binder.getCallingUid(),
+                callingPackage) != AppOpsManager.MODE_ALLOWED) {
+            return null;
+        }
 
         final ContentValues values = new ContentValues();
         values.put(Settings.NameValueTable.NAME, request);
@@ -757,7 +775,7 @@
      * @returns whether the database needs to be updated or not, also modifying
      *     'initialValues' if needed.
      */
-    private boolean parseProviderList(Uri url, ContentValues initialValues) {
+    private boolean parseProviderList(Uri url, ContentValues initialValues, int desiredUser) {
         String value = initialValues.getAsString(Settings.Secure.VALUE);
         String newProviders = null;
         if (value != null && value.length() > 1) {
@@ -770,7 +788,7 @@
                 String providers = "";
                 String[] columns = {Settings.Secure.VALUE};
                 String where = Settings.Secure.NAME + "=\'" + Settings.Secure.LOCATION_PROVIDERS_ALLOWED + "\'";
-                Cursor cursor = query(url, columns, where, null, null);
+                Cursor cursor = queryForUser(url, columns, where, null, null, desiredUser);
                 if (cursor != null && cursor.getCount() == 1) {
                     try {
                         cursor.moveToFirst();
@@ -847,7 +865,7 @@
         // Support enabling/disabling a single provider (using "+" or "-" prefix)
         String name = initialValues.getAsString(Settings.Secure.NAME);
         if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) {
-            if (!parseProviderList(url, initialValues)) return null;
+            if (!parseProviderList(url, initialValues, desiredUserHandle)) return null;
         }
 
         // If this is an insert() of a key that has been migrated to the global store,
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 14fe6af..b85121e 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -49,7 +49,8 @@
     <uses-permission android:name="android.permission.SET_SCREEN_COMPATIBILITY" />
     <uses-permission android:name="android.permission.START_ANY_ACTIVITY" />
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
-
+    <uses-permission android:name="android.permission.GET_TOP_ACTIVITY_INFO" />
+    
     <!-- WindowManager -->
     <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
diff --git a/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml b/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml
new file mode 100644
index 0000000..03ca729
--- /dev/null
+++ b/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* apps/common/assets/default/default/skins/StatusBar.xml
+**
+** Copyright 2011, 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.
+*/
+-->
+
+<com.android.systemui.statusbar.phone.NavigationBarView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent"
+    android:background="#FF000000"
+    >
+
+    <FrameLayout android:id="@+id/rot0"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        >
+
+        <LinearLayout
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:orientation="horizontal"
+            android:clipChildren="false"
+            android:clipToPadding="false"
+            android:id="@+id/nav_buttons"
+            android:animateLayoutChanges="true"
+            >
+
+            <!-- navigation controls -->
+            <View
+                android:layout_width="40dp"
+                android:layout_height="match_parent"
+                android:layout_weight="0"
+                android:visibility="invisible"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
+                android:layout_width="@dimen/navigation_key_width"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_back"
+                systemui:keyCode="4"
+                android:layout_weight="0"
+                android:scaleType="center"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_back"
+                />
+            <View 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:visibility="invisible"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
+                android:layout_width="@dimen/navigation_key_width"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_home"
+                systemui:keyCode="3"
+                systemui:keyRepeat="false"
+                android:layout_weight="0"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_home"
+                />
+            <View 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:visibility="invisible"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
+                android:layout_width="@dimen/navigation_key_width"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_recent"
+                android:layout_weight="0"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                android:contentDescription="@string/accessibility_recent"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+                android:layout_width="@dimen/navigation_menu_key_width"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_menu"
+                systemui:keyCode="82"
+                android:layout_weight="0"
+                android:visibility="invisible"
+                android:contentDescription="@string/accessibility_menu"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                />
+        </LinearLayout>
+
+        <!-- lights out layout to match exactly -->
+        <LinearLayout
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:orientation="horizontal"
+            android:id="@+id/lights_out"
+            android:visibility="gone"
+            >
+            <ImageView
+                android:layout_width="80dp"
+                android:layout_height="match_parent"
+                android:layout_marginStart="40dp"
+                android:src="@drawable/ic_sysbar_lights_out_dot_small"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <View 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:visibility="invisible"
+                />
+            <ImageView
+                android:layout_width="80dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_large"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <View 
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:visibility="invisible"
+                />
+            <ImageView
+                android:layout_width="80dp"
+                android:layout_marginEnd="40dp"
+                android:layout_height="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_small"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+        </LinearLayout>
+
+        <com.android.systemui.statusbar.policy.KeyButtonView
+            android:layout_width="80dp"
+            android:id="@+id/search_light"
+            android:layout_height="match_parent"
+            android:layout_gravity="center_horizontal"
+            android:src="@drawable/search_light"
+            android:scaleType="center"
+            android:visibility="gone"
+            />
+
+        <com.android.systemui.statusbar.policy.DeadZone
+            android:id="@+id/deadzone"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            systemui:minSize="@dimen/navigation_bar_deadzone_size"
+            systemui:maxSize="@dimen/navigation_bar_deadzone_size_max"
+            systemui:holdTime="@integer/navigation_bar_deadzone_hold"
+            systemui:decayTime="@integer/navigation_bar_deadzone_decay"
+            systemui:orientation="horizontal"
+            android:layout_gravity="top"
+            />
+    </FrameLayout>
+
+    <FrameLayout android:id="@+id/rot90"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:visibility="gone"
+        android:paddingTop="0dp"
+        >
+
+        <LinearLayout 
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:orientation="vertical"
+            android:clipChildren="false"
+            android:clipToPadding="false"
+            android:id="@+id/nav_buttons"
+            android:animateLayoutChanges="true"
+            >
+            
+            <!-- navigation controls -->
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+                android:layout_height="40dp"
+                android:layout_width="match_parent"
+                android:src="@drawable/ic_sysbar_menu_land"
+                systemui:keyCode="82"
+                android:layout_weight="0"
+                android:visibility="invisible"
+                android:contentDescription="@string/accessibility_menu"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
+                android:layout_height="80dp"
+                android:layout_width="match_parent"
+                android:src="@drawable/ic_sysbar_back_land"
+                android:scaleType="center"
+                systemui:keyCode="4"
+                android:layout_weight="0"
+                android:contentDescription="@string/accessibility_back"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
+                />
+            <View
+                android:layout_height="match_parent"
+                android:layout_width="match_parent"
+                android:layout_weight="1"
+                android:visibility="invisible"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
+                android:layout_height="80dp"
+                android:layout_width="match_parent"
+                android:src="@drawable/ic_sysbar_home_land"
+                systemui:keyCode="3"
+                systemui:keyRepeat="false"
+                android:layout_weight="0"
+                android:contentDescription="@string/accessibility_home"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
+                />
+            <View 
+                android:layout_height="match_parent"
+                android:layout_width="match_parent"
+                android:layout_weight="1"
+                android:visibility="invisible"
+                />
+            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
+                android:layout_height="80dp"
+                android:layout_width="match_parent"
+                android:src="@drawable/ic_sysbar_recent_land"
+                android:layout_weight="0"
+                android:contentDescription="@string/accessibility_recent"
+                systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
+                />
+            <View
+                android:layout_height="40dp"
+                android:layout_width="match_parent"
+                android:layout_weight="0"
+                android:visibility="invisible"
+                />
+        </LinearLayout>
+
+        <!-- lights out layout to match exactly -->
+        <LinearLayout 
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:orientation="vertical"
+            android:id="@+id/lights_out"
+            android:visibility="gone"
+            >
+            <ImageView
+                android:layout_height="80dp"
+                android:layout_marginTop="40dp"
+                android:layout_width="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_small"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <View 
+                android:layout_height="match_parent"
+                android:layout_width="match_parent"
+                android:layout_weight="1"
+                android:visibility="invisible"
+                />
+            <ImageView
+                android:layout_height="80dp"
+                android:layout_width="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_large"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+            <View 
+                android:layout_height="match_parent"
+                android:layout_width="match_parent"
+                android:layout_weight="1"
+                android:visibility="invisible"
+                />
+            <ImageView
+                android:layout_height="80dp"
+                android:layout_marginBottom="40dp"
+                android:layout_width="match_parent"
+                android:src="@drawable/ic_sysbar_lights_out_dot_small"
+                android:scaleType="center"
+                android:layout_weight="0"
+                />
+        </LinearLayout>
+
+        <com.android.systemui.statusbar.policy.KeyButtonView
+            android:id="@+id/search_light"
+            android:layout_height="80dp"
+            android:layout_width="match_parent"
+            android:layout_gravity="center_vertical"
+            android:src="@drawable/search_light"
+            android:scaleType="center"
+            android:visibility="gone"
+            />
+
+        <com.android.systemui.statusbar.policy.DeadZone
+            android:id="@+id/deadzone"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            systemui:minSize="@dimen/navigation_bar_deadzone_size"
+            systemui:maxSize="@dimen/navigation_bar_deadzone_size_max"
+            systemui:holdTime="@integer/navigation_bar_deadzone_hold"
+            systemui:decayTime="@integer/navigation_bar_deadzone_decay"
+            systemui:orientation="vertical"
+            android:layout_gravity="top"
+            />
+    </FrameLayout>
+
+    <!-- not used -->
+    <View android:id="@+id/rot270"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:visibility="gone"
+        />
+
+</com.android.systemui.statusbar.phone.NavigationBarView>
diff --git a/packages/SystemUI/res/layout/status_bar_recent_item.xml b/packages/SystemUI/res/layout/status_bar_recent_item.xml
index 7ce3a09..6290bb3 100644
--- a/packages/SystemUI/res/layout/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout/status_bar_recent_item.xml
@@ -48,6 +48,7 @@
             android:ellipsize="marquee"
             android:textColor="@color/status_bar_recents_app_label_color"
             android:importantForAccessibility="no"
+            android:textAlignment="viewStart"
         />
         <FrameLayout android:id="@+id/app_thumbnail"
             android:layout_width="wrap_content"
@@ -101,6 +102,7 @@
             android:layout_marginTop="3dip"
             android:singleLine="true"
             android:ellipsize="marquee"
+            android:textAlignment="viewStart"
         />
 
     </RelativeLayout>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 580bfe7..8c2dd8e 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -147,7 +147,7 @@
     <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mode silenci."</string>
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"S\'ha omès <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificació omesa."</string>
-    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Àrea de notificacions"</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Capa de notificació."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configuració ràpida."</string>
     <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Aplicacions recents."</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Usuari <xliff:g id="USER">%s</xliff:g>."</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 0789b29..d619de1 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -133,7 +133,7 @@
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"No hay tarjeta SIM."</string>
     <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conexión mediante Bluetooth"</string>
-    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avión"</string>
     <!-- String.format failed for translation -->
     <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
     <skip />
@@ -154,7 +154,7 @@
     <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Móvil <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batería <xliff:g id="STATE">%s</xliff:g>"</string>
-    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avión <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo de avión <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarma: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos de 2G-3G inhabilitados"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index fff1aa0..c454bb1 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -157,14 +157,14 @@
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm ustawiony na <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Wyłączono transmisję danych 2G/3G"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Wyłączono transmisję danych 4G"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Transmisja danych została wyłączona"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Wyłączono komórkową transmisję danych"</string>
     <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Wyłączono transmisję danych"</string>
-    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Ustawiony limit transmisji danych został osiągnięty."\n\n"Jeśli ponownie włączysz przesyłanie danych, operator może naliczyć dodatkowe opłaty."</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Osiągnięto określony limit wykorzystania transmisji danych."\n\n"Jeśli ponownie włączysz przesyłanie danych, operator może naliczyć opłaty."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Włącz transmisję danych"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Brak internetu"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Wyszukiwanie sygnału GPS"</string>
-    <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokalizacja z GPSa"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokalizacja ustawiona według GPS"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Usuń wszystkie powiadomienia."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"O aplikacji"</string>
     <string name="close_universe" msgid="3736513750241754348">"Zamknij"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 81ac841..ccf4fd48 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -77,7 +77,7 @@
     <string name="use_ptp_button_title" msgid="7517127540301625751">"Установить как камеру (PTP)"</string>
     <string name="installer_cd_button_title" msgid="2312667578562201583">"Установить приложение"</string>
     <string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
-    <string name="accessibility_home" msgid="8217216074895377641">"Домой"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Главная страница"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Недавние приложения"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка переключения способа ввода."</string>
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index a1c5650..79f9650 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -564,7 +564,7 @@
     
             return program;
         }
-        
+
         private int buildShader(String source, int type) {
             int shader = glCreateShader(type);
     
@@ -585,27 +585,28 @@
             
             return shader;
         }
-    
+
         private void checkEglError() {
             int error = mEgl.eglGetError();
             if (error != EGL_SUCCESS) {
                 Log.w(GL_LOG_TAG, "EGL error = " + GLUtils.getEGLErrorString(error));
             }
         }
-    
+
         private void checkGlError() {
             int error = glGetError();
             if (error != GL_NO_ERROR) {
                 Log.w(GL_LOG_TAG, "GL error = 0x" + Integer.toHexString(error), new Throwable());
             }
         }
-    
+
         private void finishGL() {
             mEgl.eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
             mEgl.eglDestroySurface(mEglDisplay, mEglSurface);
             mEgl.eglDestroyContext(mEglDisplay, mEglContext);
+            mEgl.eglTerminate(mEglDisplay);
         }
-        
+
         private boolean initGL(SurfaceHolder surfaceHolder) {
             mEgl = (EGL10) EGLContext.getEGL();
     
diff --git a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
index c0a6f56..1f29990 100644
--- a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
@@ -103,7 +103,7 @@
         } else {
             // Otherwise, keyguard isn't showing so launch it from here.
             Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                    .getAssistIntent(mContext, UserHandle.USER_CURRENT);
+                    .getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
             if (intent == null) return;
 
             try {
@@ -180,7 +180,7 @@
 
     private void maybeSwapSearchIcon() {
         Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                .getAssistIntent(mContext, UserHandle.USER_CURRENT);
+                .getAssistIntent(mContext, false, UserHandle.USER_CURRENT);
         if (intent != null) {
             ComponentName component = intent.getComponent();
             if (component == null || !mGlowPadView.replaceTargetDrawablesIfPresent(component,
@@ -329,6 +329,6 @@
 
     public boolean isAssistantAvailable() {
         return ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                .getAssistIntent(mContext, UserHandle.USER_CURRENT) != null;
+                .getAssistIntent(mContext, false, UserHandle.USER_CURRENT) != null;
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 17b0b50..280b368 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -72,6 +72,13 @@
     Runnable finisher;
     int iconSize;
     int result;
+
+    void clearImage() {
+        context = null;
+        image = null;
+        imageUri = null;
+        iconSize = 0;
+    }
 }
 
 /**
@@ -165,6 +172,10 @@
     @Override
     protected SaveImageInBackgroundData doInBackground(SaveImageInBackgroundData... params) {
         if (params.length != 1) return null;
+        if (isCancelled()) {
+            params[0].clearImage();
+            return null;
+        }
 
         // By default, AsyncTask sets the worker thread to have background thread priority, so bump
         // it back up so that we save a little quicker.
@@ -225,8 +236,7 @@
         } catch (Exception e) {
             // IOException/UnsupportedOperationException may be thrown if external storage is not
             // mounted
-            params[0].imageUri = null;
-            params[0].image = null;
+            params[0].clearImage();
             params[0].result = 1;
         }
 
@@ -240,6 +250,12 @@
 
     @Override
     protected void onPostExecute(SaveImageInBackgroundData params) {
+        if (isCancelled()) {
+            params.finisher.run();
+            params.clearImage();
+            return;
+        }
+
         if (params.result > 0) {
             // Show a message that we've failed to save the image to disk
             GlobalScreenshot.notifyScreenshotError(params.context, mNotificationManager);
@@ -308,6 +324,8 @@
     private float mBgPadding;
     private float mBgPaddingScale;
 
+    private AsyncTask<SaveImageInBackgroundData, Void, SaveImageInBackgroundData> mSaveInBgTask;
+
     private MediaActionSound mCameraSound;
 
 
@@ -374,7 +392,10 @@
         data.image = mScreenBitmap;
         data.iconSize = mNotificationIconSize;
         data.finisher = finisher;
-        new SaveImageInBackgroundTask(mContext, data, mNotificationManager,
+        if (mSaveInBgTask != null) {
+            mSaveInBgTask.cancel(false);
+        }
+        mSaveInBgTask = new SaveImageInBackgroundTask(mContext, data, mNotificationManager,
                 SCREENSHOT_NOTIFICATION_ID).execute(data);
     }
 
@@ -455,6 +476,7 @@
         // Setup the animation with the screenshot just taken
         if (mScreenshotAnimation != null) {
             mScreenshotAnimation.end();
+            mScreenshotAnimation.removeAllListeners();
         }
 
         mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
index 4b07b00..565a3f2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
@@ -96,14 +96,21 @@
     @Override
     public boolean onTouchEvent(MotionEvent event) {
         // Allow subclasses to implement enable/disable semantics
-        if (!panelsEnabled()) return false;
+        if (!panelsEnabled()) {
+            if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                Slog.v(TAG, String.format("onTouch: all panels disabled, ignoring touch at (%d,%d)",
+                        (int) event.getX(), (int) event.getY()));
+            }
+            return false;
+        }
 
         // figure out which panel needs to be talked to here
         if (event.getAction() == MotionEvent.ACTION_DOWN) {
             final PanelView panel = selectPanelForTouch(event);
             if (panel == null) {
                 // panel is not there, so we'll eat the gesture
-                if (DEBUG) LOG("PanelBar.onTouch: no panel for x=%d, bailing", event.getX());
+                Slog.v(TAG, String.format("onTouch: no panel for touch at (%d,%d)",
+                        (int) event.getX(), (int) event.getY()));
                 mTouchingPanel = null;
                 return true;
             }
@@ -112,6 +119,9 @@
                     (enabled ? "" : " (disabled)"));
             if (!enabled) {
                 // panel is disabled, so we'll eat the gesture
+                Slog.v(TAG, String.format(
+                        "onTouch: panel (%s) is disabled, ignoring touch at (%d,%d)",
+                        panel, (int) event.getX(), (int) event.getY()));
                 mTouchingPanel = null;
                 return true;
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
index cbe296d..27a3a15 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
@@ -46,7 +46,8 @@
             final String action = intent.getAction();
             if (Intent.ACTION_TIME_TICK.equals(action)
                     || Intent.ACTION_TIME_CHANGED.equals(action)
-                    || Intent.ACTION_TIMEZONE_CHANGED.equals(action)) {
+                    || Intent.ACTION_TIMEZONE_CHANGED.equals(action)
+                    || Intent.ACTION_LOCALE_CHANGED.equals(action)) {
                 updateClock();
             }
         }
@@ -122,6 +123,7 @@
                 filter.addAction(Intent.ACTION_TIME_TICK);
                 filter.addAction(Intent.ACTION_TIME_CHANGED);
                 filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
+                filter.addAction(Intent.ACTION_LOCALE_CHANGED);
                 mContext.registerReceiver(mIntentReceiver, filter, null, null);
                 updateClock();
             } else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
index 776cf36..0944b40 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
@@ -120,7 +120,7 @@
 
                 int[] idOut = new int[1];
                 mNotificationService.enqueueNotificationWithTag(
-                        mContext.getPackageName(),
+                        mContext.getPackageName(), mContext.getBasePackageName(),
                         null, 
                         GPS_NOTIFICATION_ID, 
                         n,
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 41d67bc..88a0ef3 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -2266,8 +2266,6 @@
                         mActionModeView = new ActionBarContextView(mContext);
                         mActionModePopup = new PopupWindow(mContext, null,
                                 com.android.internal.R.attr.actionModePopupWindowStyle);
-                        mActionModePopup.setLayoutInScreenEnabled(true);
-                        mActionModePopup.setLayoutInsetDecor(true);
                         mActionModePopup.setWindowLayoutType(
                                 WindowManager.LayoutParams.TYPE_APPLICATION);
                         mActionModePopup.setContentView(mActionModeView);
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index b5cbdd1..9d0903c 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -17,6 +17,7 @@
 
 import android.app.ActivityManager;
 import android.app.ActivityManagerNative;
+import android.app.AppOpsManager;
 import android.app.ProgressDialog;
 import android.app.SearchManager;
 import android.app.UiModeManager;
@@ -179,8 +180,7 @@
     // These need to match the documentation/constant in
     // core/res/res/values/config.xml
     static final int LONG_PRESS_HOME_NOTHING = 0;
-    static final int LONG_PRESS_HOME_RECENT_DIALOG = 1;
-    static final int LONG_PRESS_HOME_RECENT_SYSTEM_UI = 2;
+    static final int LONG_PRESS_HOME_RECENT_SYSTEM_UI = 1;
 
     static final int APPLICATION_MEDIA_SUBLAYER = -2;
     static final int APPLICATION_MEDIA_OVERLAY_SUBLAYER = -1;
@@ -782,11 +782,6 @@
             // Eat the longpress so it won't dismiss the recent apps dialog when
             // the user lets go of the home key
             mHomeLongPressed = true;
-        }
-
-        if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_DIALOG) {
-            showOrHideRecentAppsDialog(RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS);
-        } else if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
             try {
                 IStatusBarService statusbar = getStatusBarService();
                 if (statusbar != null) {
@@ -1191,9 +1186,11 @@
 
     /** {@inheritDoc} */
     @Override
-    public int checkAddPermission(WindowManager.LayoutParams attrs) {
+    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) {
         int type = attrs.type;
-        
+
+        outAppOp[0] = AppOpsManager.OP_NONE;
+
         if (type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW
                 || type > WindowManager.LayoutParams.LAST_SYSTEM_WINDOW) {
             return WindowManagerGlobal.ADD_OKAY;
@@ -1216,6 +1213,7 @@
             case TYPE_SYSTEM_ERROR:
             case TYPE_SYSTEM_OVERLAY:
                 permission = android.Manifest.permission.SYSTEM_ALERT_WINDOW;
+                outAppOp[0] = AppOpsManager.OP_SYSTEM_ALERT_WINDOW;
                 break;
             default:
                 permission = android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
@@ -1842,7 +1840,7 @@
                 mHomePressed = false;
                 mHomeLongPressed = false;
                 if (!homeWasLongPressed) {
-                    if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
+                    if (mLongPressOnHomeBehavior != LONG_PRESS_HOME_NOTHING) {
                         try {
                             IStatusBarService statusbar = getStatusBarService();
                             if (statusbar != null) {
@@ -1964,8 +1962,21 @@
             }
             return 0;
         } else if (keyCode == KeyEvent.KEYCODE_APP_SWITCH) {
-            if (down && repeatCount == 0 && !keyguardOn) {
-                showOrHideRecentAppsDialog(RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS);
+            if (!keyguardOn) {
+                try {
+                    IStatusBarService statusbar = getStatusBarService();
+                    if (statusbar != null) {
+                        if (down && repeatCount == 0) {
+                            statusbar.preloadRecentApps();
+                        } else if (!down) {
+                            statusbar.toggleRecentApps();
+                        }
+                    }
+                } catch (RemoteException e) {
+                    Slog.e(TAG, "RemoteException when preloading recent apps", e);
+                    // re-acquire status bar service next time it is needed.
+                    mStatusBarService = null;
+                }
             }
             return -1;
         } else if (keyCode == KeyEvent.KEYCODE_ASSIST) {
@@ -2206,7 +2217,7 @@
     private void launchAssistAction() {
         sendCloseSystemWindows(SYSTEM_DIALOG_REASON_ASSIST);
         Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                .getAssistIntent(mContext, UserHandle.USER_CURRENT);
+                .getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
         if (intent != null) {
             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                     | Intent.FLAG_ACTIVITY_SINGLE_TOP
@@ -4134,6 +4145,11 @@
         return rotation == mPortraitRotation || rotation == mUpsideDownRotation;
     }
 
+    public int getUserRotationMode() {
+        return Settings.System.getIntForUser(mContext.getContentResolver(),
+                Settings.System.USER_ROTATION, WindowManagerPolicy.USER_ROTATION_FREE,
+                UserHandle.USER_CURRENT);
+    }
 
     // User rotation: to be used when all else fails in assigning an orientation to the device
     public void setUserRotationMode(int mode, int rot) {
@@ -4396,7 +4412,7 @@
                     sendCloseSystemWindows();
                 }
                 int result = ActivityManagerNative.getDefault()
-                        .startActivityAsUser(null, mHomeIntent,
+                        .startActivityAsUser(null, null, mHomeIntent,
                                 mHomeIntent.resolveTypeIfNeeded(mContext.getContentResolver()),
                                 null, null, 0,
                                 ActivityManager.START_FLAG_ONLY_IF_NEEDED,
@@ -4468,12 +4484,21 @@
             default:
                 return false;
         }
+        int owningUid;
+        String owningPackage;
+        if (win != null) {
+            owningUid = win.getOwningUid();
+            owningPackage = win.getOwningPackage();
+        } else {
+            owningUid = android.os.Process.myUid();
+            owningPackage = mContext.getBasePackageName();
+        }
         if (pattern.length == 1) {
             // One-shot vibration
-            mVibrator.vibrate(pattern[0]);
+            mVibrator.vibrate(owningUid, owningPackage, pattern[0]);
         } else {
             // Pattern vibration
-            mVibrator.vibrate(pattern, -1);
+            mVibrator.vibrate(owningUid, owningPackage, pattern, -1);
         }
         return true;
     }
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardActivityLauncher.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardActivityLauncher.java
index 4c19caa..6539db3 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardActivityLauncher.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardActivityLauncher.java
@@ -219,6 +219,7 @@
                 try {
                     WaitResult result = ActivityManagerNative.getDefault().startActivityAndWait(
                             null /*caller*/,
+                            null /*caller pkg*/,
                             intent,
                             intent.resolveTypeIfNeeded(getContext().getContentResolver()),
                             null /*resultTo*/,
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
index 217e5d7..27d808b 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
@@ -1567,7 +1567,7 @@
 
     public void showAssistant() {
         final Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-          .getAssistIntent(mContext, UserHandle.USER_CURRENT);
+          .getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
 
         if (intent == null) return;
 
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
index 76cbbd5..6859042 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
@@ -61,7 +61,7 @@
                 case com.android.internal.R.drawable.ic_action_assist_generic:
                     Intent assistIntent =
                             ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                            .getAssistIntent(mContext, UserHandle.USER_CURRENT);
+                            .getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
                     if (assistIntent != null) {
                         mActivityLauncher.launchActivity(assistIntent, false, true, null, null);
                     } else {
@@ -195,7 +195,7 @@
                 currentUserHandle);
         boolean searchActionAvailable =
                 ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                .getAssistIntent(mContext, UserHandle.USER_CURRENT) != null;
+                .getAssistIntent(mContext, false, UserHandle.USER_CURRENT) != null;
         mCameraDisabled = cameraDisabledByAdmin || disabledBySimState || !cameraTargetPresent
                 || !currentUserSetup;
         mSearchDisabled = disabledBySimState || !searchActionAvailable || !searchTargetPresent
@@ -207,7 +207,7 @@
         // Update the search icon with drawable from the search .apk
         if (!mSearchDisabled) {
             Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                    .getAssistIntent(mContext, UserHandle.USER_CURRENT);
+                    .getAssistIntent(mContext, false, UserHandle.USER_CURRENT);
             if (intent != null) {
                 // XXX Hack. We need to substitute the icon here but haven't formalized
                 // the public API. The "_google" metadata will be going away, so
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
index fef0613..8e10528 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
@@ -1428,6 +1428,6 @@
 
     private boolean isAssistantAvailable() {
         return mSearchManager != null
-                && mSearchManager.getAssistIntent(mContext, UserHandle.USER_CURRENT) != null;
+                && mSearchManager.getAssistIntent(mContext, false, UserHandle.USER_CURRENT) != null;
     }
 }
diff --git a/services/input/SpriteController.cpp b/services/input/SpriteController.cpp
index 1f3d2cf..8163ea0 100644
--- a/services/input/SpriteController.cpp
+++ b/services/input/SpriteController.cpp
@@ -208,8 +208,7 @@
                         surfaceInfo.w, surfaceInfo.h, bpr);
                 surfaceBitmap.setPixels(surfaceInfo.bits);
 
-                SkCanvas surfaceCanvas;
-                surfaceCanvas.setBitmapDevice(surfaceBitmap);
+                SkCanvas surfaceCanvas(surfaceBitmap);
 
                 SkPaint paint;
                 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
diff --git a/services/java/com/android/server/AppOpsService.java b/services/java/com/android/server/AppOpsService.java
index 3d9ddae..e94d03c 100644
--- a/services/java/com/android/server/AppOpsService.java
+++ b/services/java/com/android/server/AppOpsService.java
@@ -25,6 +25,7 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 
 import android.app.AppOpsManager;
@@ -34,16 +35,20 @@
 import android.os.AsyncTask;
 import android.os.Binder;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.Process;
+import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.util.AtomicFile;
+import android.util.Log;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.TimeUtils;
 import android.util.Xml;
 
 import com.android.internal.app.IAppOpsService;
+import com.android.internal.app.IAppOpsCallback;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.XmlUtils;
 
@@ -81,7 +86,7 @@
     final SparseArray<HashMap<String, Ops>> mUidOps
             = new SparseArray<HashMap<String, Ops>>();
 
-    final static class Ops extends SparseArray<Op> {
+    public final static class Ops extends SparseArray<Op> {
         public final String packageName;
         public final int uid;
 
@@ -91,14 +96,45 @@
         }
     }
 
-    final static class Op {
+    public final static class Op {
         public final int op;
+        public int mode;
         public int duration;
         public long time;
+        public long rejectTime;
         public int nesting;
 
         public Op(int _op) {
             op = _op;
+            mode = AppOpsManager.MODE_ALLOWED;
+        }
+    }
+
+    final SparseArray<ArrayList<Callback>> mOpModeWatchers
+            = new SparseArray<ArrayList<Callback>>();
+    final HashMap<String, ArrayList<Callback>> mPackageModeWatchers
+            = new HashMap<String, ArrayList<Callback>>();
+    final HashMap<IBinder, Callback> mModeWatchers
+            = new HashMap<IBinder, Callback>();
+
+    public final class Callback implements DeathRecipient {
+        final IAppOpsCallback mCallback;
+
+        public Callback(IAppOpsCallback callback) {
+            mCallback = callback;
+            try {
+                mCallback.asBinder().linkToDeath(this, 0);
+            } catch (RemoteException e) {
+            }
+        }
+
+        public void unlinkToDeath() {
+            mCallback.asBinder().unlinkToDeath(this, 0);
+        }
+
+        @Override
+        public void binderDied() {
+            stopWatchingMode(mCallback);
         }
     }
 
@@ -133,8 +169,8 @@
             resOps = new ArrayList<AppOpsManager.OpEntry>();
             for (int j=0; j<pkgOps.size(); j++) {
                 Op curOp = pkgOps.valueAt(j);
-                resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.time,
-                        curOp.duration));
+                resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.mode, curOp.time,
+                        curOp.rejectTime, curOp.duration));
             }
         } else {
             for (int j=0; j<ops.length; j++) {
@@ -143,8 +179,8 @@
                     if (resOps == null) {
                         resOps = new ArrayList<AppOpsManager.OpEntry>();
                     }
-                    resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.time,
-                            curOp.duration));
+                    resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.mode, curOp.time,
+                            curOp.rejectTime, curOp.duration));
                 }
             }
         }
@@ -198,55 +234,179 @@
     }
 
     @Override
-    public int checkOperation(int code, int uid, String packageName) {
-        uid = handleIncomingUid(uid);
+    public void setMode(int code, int uid, String packageName, int mode) {
+        verifyIncomingUid(uid);
+        verifyIncomingOp(code);
+        ArrayList<Callback> repCbs = null;
+        code = AppOpsManager.opToSwitch(code);
         synchronized (this) {
-            Op op = getOpLocked(code, uid, packageName, false);
+            Op op = getOpLocked(code, uid, packageName, true);
+            if (op != null) {
+                if (op.mode != mode) {
+                    op.mode = mode;
+                    ArrayList<Callback> cbs = mOpModeWatchers.get(code);
+                    if (cbs != null) {
+                        if (repCbs == null) {
+                            repCbs = new ArrayList<Callback>();
+                        }
+                        repCbs.addAll(cbs);
+                    }
+                    cbs = mPackageModeWatchers.get(packageName);
+                    if (cbs != null) {
+                        if (repCbs == null) {
+                            repCbs = new ArrayList<Callback>();
+                        }
+                        repCbs.addAll(cbs);
+                    }
+                    scheduleWriteNowLocked();
+                }
+            }
+        }
+        if (repCbs != null) {
+            for (int i=0; i<repCbs.size(); i++) {
+                try {
+                    repCbs.get(i).mCallback.opChanged(code, packageName);
+                } catch (RemoteException e) {
+                }
+            }
+        }
+    }
+
+    @Override
+    public void startWatchingMode(int op, String packageName, IAppOpsCallback callback) {
+        synchronized (this) {
+            op = AppOpsManager.opToSwitch(op);
+            Callback cb = mModeWatchers.get(callback.asBinder());
+            if (cb == null) {
+                cb = new Callback(callback);
+                mModeWatchers.put(callback.asBinder(), cb);
+            }
+            if (op != AppOpsManager.OP_NONE) {
+                ArrayList<Callback> cbs = mOpModeWatchers.get(op);
+                if (cbs == null) {
+                    cbs = new ArrayList<Callback>();
+                    mOpModeWatchers.put(op, cbs);
+                }
+                cbs.add(cb);
+            }
+            if (packageName != null) {
+                ArrayList<Callback> cbs = mPackageModeWatchers.get(packageName);
+                if (cbs == null) {
+                    cbs = new ArrayList<Callback>();
+                    mPackageModeWatchers.put(packageName, cbs);
+                }
+                cbs.add(cb);
+            }
+        }
+    }
+
+    @Override
+    public void stopWatchingMode(IAppOpsCallback callback) {
+        synchronized (this) {
+            Callback cb = mModeWatchers.remove(callback.asBinder());
+            if (cb != null) {
+                cb.unlinkToDeath();
+                for (int i=0; i<mOpModeWatchers.size(); i++) {
+                    ArrayList<Callback> cbs = mOpModeWatchers.valueAt(i);
+                    cbs.remove(cb);
+                    if (cbs.size() <= 0) {
+                        mOpModeWatchers.removeAt(i);
+                    }
+                }
+                if (mPackageModeWatchers.size() > 0) {
+                    Iterator<ArrayList<Callback>> it = mPackageModeWatchers.values().iterator();
+                    while (it.hasNext()) {
+                        ArrayList<Callback> cbs = it.next();
+                        cbs.remove(cb);
+                        if (cbs.size() <= 0) {
+                            it.remove();
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public int checkOperation(int code, int uid, String packageName) {
+        verifyIncomingUid(uid);
+        verifyIncomingOp(code);
+        synchronized (this) {
+            Op op = getOpLocked(AppOpsManager.opToSwitch(code), uid, packageName, false);
             if (op == null) {
                 return AppOpsManager.MODE_ALLOWED;
             }
+            return op.mode;
         }
-        return AppOpsManager.MODE_ALLOWED;
     }
 
     @Override
     public int noteOperation(int code, int uid, String packageName) {
-        uid = handleIncomingUid(uid);
+        verifyIncomingUid(uid);
+        verifyIncomingOp(code);
         synchronized (this) {
-            Op op = getOpLocked(code, uid, packageName, true);
-            if (op == null) {
+            Ops ops = getOpsLocked(uid, packageName, true);
+            if (ops == null) {
+                if (DEBUG) Log.d(TAG, "noteOperation: no op for code " + code + " uid " + uid
+                        + " package " + packageName);
                 return AppOpsManager.MODE_IGNORED;
             }
+            Op op = getOpLocked(ops, code, true);
             if (op.duration == -1) {
                 Slog.w(TAG, "Noting op not finished: uid " + uid + " pkg " + packageName
                         + " code " + code + " time=" + op.time + " duration=" + op.duration);
             }
-            op.time = System.currentTimeMillis();
             op.duration = 0;
+            final int switchCode = AppOpsManager.opToSwitch(code);
+            final Op switchOp = switchCode != code ? getOpLocked(ops, switchCode, true) : op;
+            if (switchOp.mode != AppOpsManager.MODE_ALLOWED) {
+                if (DEBUG) Log.d(TAG, "noteOperation: reject #" + op.mode + " for code "
+                        + switchCode + " (" + code + ") uid " + uid + " package " + packageName);
+                op.rejectTime = System.currentTimeMillis();
+                return switchOp.mode;
+            }
+            if (DEBUG) Log.d(TAG, "noteOperation: allowing code " + code + " uid " + uid
+                    + " package " + packageName);
+            op.time = System.currentTimeMillis();
+            return AppOpsManager.MODE_ALLOWED;
         }
-        return AppOpsManager.MODE_ALLOWED;
     }
 
     @Override
     public int startOperation(int code, int uid, String packageName) {
-        uid = handleIncomingUid(uid);
+        verifyIncomingUid(uid);
+        verifyIncomingOp(code);
         synchronized (this) {
-            Op op = getOpLocked(code, uid, packageName, true);
-            if (op == null) {
+            Ops ops = getOpsLocked(uid, packageName, true);
+            if (ops == null) {
+                if (DEBUG) Log.d(TAG, "startOperation: no op for code " + code + " uid " + uid
+                        + " package " + packageName);
                 return AppOpsManager.MODE_IGNORED;
             }
+            Op op = getOpLocked(ops, code, true);
+            final int switchCode = AppOpsManager.opToSwitch(code);
+            final Op switchOp = switchCode != code ? getOpLocked(ops, switchCode, true) : op;
+            if (switchOp.mode != AppOpsManager.MODE_ALLOWED) {
+                if (DEBUG) Log.d(TAG, "startOperation: reject #" + op.mode + " for code "
+                        + switchCode + " (" + code + ") uid " + uid + " package " + packageName);
+                op.rejectTime = System.currentTimeMillis();
+                return switchOp.mode;
+            }
+            if (DEBUG) Log.d(TAG, "startOperation: allowing code " + code + " uid " + uid
+                    + " package " + packageName);
             if (op.nesting == 0) {
                 op.time = System.currentTimeMillis();
                 op.duration = -1;
             }
             op.nesting++;
+            return AppOpsManager.MODE_ALLOWED;
         }
-        return AppOpsManager.MODE_ALLOWED;
     }
 
     @Override
     public void finishOperation(int code, int uid, String packageName) {
-        uid = handleIncomingUid(uid);
+        verifyIncomingUid(uid);
+        verifyIncomingOp(code);
         synchronized (this) {
             Op op = getOpLocked(code, uid, packageName, true);
             if (op == null) {
@@ -267,16 +427,22 @@
         }
     }
 
-    private int handleIncomingUid(int uid) {
+    private void verifyIncomingUid(int uid) {
         if (uid == Binder.getCallingUid()) {
-            return uid;
+            return;
         }
         if (Binder.getCallingPid() == Process.myPid()) {
-            return uid;
+            return;
         }
         mContext.enforcePermission(android.Manifest.permission.UPDATE_APP_OPS_STATS,
                 Binder.getCallingPid(), Binder.getCallingUid(), null);
-        return uid;
+    }
+
+    private void verifyIncomingOp(int op) {
+        if (op >= 0 && op < AppOpsManager._NUM_OP) {
+            return;
+        }
+        throw new IllegalArgumentException("Bad operation #" + op);
     }
 
     private Ops getOpsLocked(int uid, String packageName, boolean edit) {
@@ -319,11 +485,30 @@
         return ops;
     }
 
+    private void scheduleWriteLocked() {
+        if (!mWriteScheduled) {
+            mWriteScheduled = true;
+            mHandler.postDelayed(mWriteRunner, WRITE_DELAY);
+        }
+    }
+
+    private void scheduleWriteNowLocked() {
+        if (!mWriteScheduled) {
+            mWriteScheduled = true;
+        }
+        mHandler.removeCallbacks(mWriteRunner);
+        mHandler.post(mWriteRunner);
+    }
+
     private Op getOpLocked(int code, int uid, String packageName, boolean edit) {
         Ops ops = getOpsLocked(uid, packageName, edit);
         if (ops == null) {
             return null;
         }
+        return getOpLocked(ops, code, edit);
+    }
+
+    private Op getOpLocked(Ops ops, int code, boolean edit) {
         Op op = ops.get(code);
         if (op == null) {
             if (!edit) {
@@ -332,9 +517,8 @@
             op = new Op(code);
             ops.put(code, op);
         }
-        if (edit && !mWriteScheduled) {
-            mWriteScheduled = true;
-            mHandler.postDelayed(mWriteRunner, WRITE_DELAY);
+        if (edit) {
+            scheduleWriteLocked();
         }
         return op;
     }
@@ -441,8 +625,22 @@
             String tagName = parser.getName();
             if (tagName.equals("op")) {
                 Op op = new Op(Integer.parseInt(parser.getAttributeValue(null, "n")));
-                op.time = Long.parseLong(parser.getAttributeValue(null, "t"));
-                op.duration = Integer.parseInt(parser.getAttributeValue(null, "d"));
+                String mode = parser.getAttributeValue(null, "m");
+                if (mode != null) {
+                    op.mode = Integer.parseInt(mode);
+                }
+                String time = parser.getAttributeValue(null, "t");
+                if (time != null) {
+                    op.time = Long.parseLong(time);
+                }
+                time = parser.getAttributeValue(null, "r");
+                if (time != null) {
+                    op.rejectTime = Long.parseLong(time);
+                }
+                String dur = parser.getAttributeValue(null, "d");
+                if (dur != null) {
+                    op.duration = Integer.parseInt(dur);
+                }
                 HashMap<String, Ops> pkgOps = mUidOps.get(uid);
                 if (pkgOps == null) {
                     pkgOps = new HashMap<String, Ops>();
@@ -499,8 +697,21 @@
                             AppOpsManager.OpEntry op = ops.get(j);
                             out.startTag(null, "op");
                             out.attribute(null, "n", Integer.toString(op.getOp()));
-                            out.attribute(null, "t", Long.toString(op.getTime()));
-                            out.attribute(null, "d", Integer.toString(op.getDuration()));
+                            if (op.getMode() != AppOpsManager.MODE_ALLOWED) {
+                                out.attribute(null, "m", Integer.toString(op.getMode()));
+                            }
+                            long time = op.getTime();
+                            if (time != 0) {
+                                out.attribute(null, "t", Long.toString(time));
+                            }
+                            time = op.getRejectTime();
+                            if (time != 0) {
+                                out.attribute(null, "r", Long.toString(time));
+                            }
+                            int dur = op.getDuration();
+                            if (dur != 0) {
+                                out.attribute(null, "d", Integer.toString(dur));
+                            }
                             out.endTag(null, "op");
                         }
                         out.endTag(null, "uid");
@@ -532,6 +743,7 @@
 
         synchronized (this) {
             pw.println("Current AppOps Service state:");
+            final long now = System.currentTimeMillis();
             for (int i=0; i<mUidOps.size(); i++) {
                 pw.print("  Uid "); UserHandle.formatUid(pw, mUidOps.keyAt(i)); pw.println(":");
                 HashMap<String, Ops> pkgOps = mUidOps.valueAt(i);
@@ -539,10 +751,16 @@
                     pw.print("    Package "); pw.print(ops.packageName); pw.println(":");
                     for (int j=0; j<ops.size(); j++) {
                         Op op = ops.valueAt(j);
-                        pw.print("      "); pw.print(AppOpsManager.opToString(op.op));
-                        pw.print(": time=");
-                        TimeUtils.formatDuration(System.currentTimeMillis()-op.time, pw);
-                        pw.print(" ago");
+                        pw.print("      "); pw.print(AppOpsManager.opToName(op.op));
+                        pw.print(": mode="); pw.print(op.mode);
+                        if (op.time != 0) {
+                            pw.print("; time="); TimeUtils.formatDuration(now-op.time, pw);
+                            pw.print(" ago");
+                        }
+                        if (op.rejectTime != 0) {
+                            pw.print("; rejectTime="); TimeUtils.formatDuration(now-op.rejectTime, pw);
+                            pw.print(" ago");
+                        }
                         if (op.duration == -1) {
                             pw.println(" (running)");
                         } else {
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 8e21246..fb81391 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -194,6 +194,7 @@
     private int mNetworkPreference;
     private int mActiveDefaultNetwork = -1;
     // 0 is full bad, 100 is full good
+    private int mDefaultInetCondition = 0;
     private int mDefaultInetConditionPublished = 0;
     private boolean mInetConditionChangeInFlight = false;
     private int mDefaultConnectionSequence = 0;
@@ -1727,10 +1728,6 @@
                 intent.putExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO, switchTo);
             } else {
                 mDefaultInetConditionPublished = 0; // we're not connected anymore
-                if (DBG) {
-                    log("handleDisconnect: net=" + mActiveDefaultNetwork +
-                            ", published condition=" + mDefaultInetConditionPublished);
-                }
                 intent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true);
             }
         }
@@ -1921,10 +1918,6 @@
                 intent.putExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO, switchTo);
             } else {
                 mDefaultInetConditionPublished = 0;
-                if (DBG) {
-                    log("handleConnectionFailure: net=" + mActiveDefaultNetwork +
-                            ", published condition=" + mDefaultInetConditionPublished);
-                }
                 intent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true);
             }
         }
@@ -2069,10 +2062,6 @@
             mDefaultInetConditionPublished = 0;
             mDefaultConnectionSequence++;
             mInetConditionChangeInFlight = false;
-            if (DBG) {
-                log("handleConnect: net=" + newNetType +
-                        ", published condition=" + mDefaultInetConditionPublished);
-            }
             // Don't do this - if we never sign in stay, grey
             //reportNetworkCondition(mActiveDefaultNetwork, 100);
         }
@@ -2723,8 +2712,7 @@
                 {
                     int netType = msg.arg1;
                     int sequence = msg.arg2;
-                    int condition = (Integer)msg.obj;
-                    handleInetConditionHoldEnd(netType, sequence, condition);
+                    handleInetConditionHoldEnd(netType, sequence);
                     break;
                 }
                 case EVENT_SET_NETWORK_PREFERENCE:
@@ -2937,13 +2925,14 @@
         if (VDBG) {
             log("handleInetConditionChange: net=" +
                     netType + ", condition=" + condition +
-                    " mActiveDefaultNetwork=" + mActiveDefaultNetwork);
+                    ",mActiveDefaultNetwork=" + mActiveDefaultNetwork);
         }
+        mDefaultInetCondition = condition;
         int delay;
         if (mInetConditionChangeInFlight == false) {
             if (VDBG) log("handleInetConditionChange: starting a change hold");
             // setup a new hold to debounce this
-            if (condition > 50) {
+            if (mDefaultInetCondition > 50) {
                 delay = Settings.Global.getInt(mContext.getContentResolver(),
                         Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY, 500);
             } else {
@@ -2952,16 +2941,18 @@
             }
             mInetConditionChangeInFlight = true;
             mHandler.sendMessageDelayed(mHandler.obtainMessage(EVENT_INET_CONDITION_HOLD_END,
-                    mActiveDefaultNetwork, mDefaultConnectionSequence, new Integer(condition)), delay);
+                    mActiveDefaultNetwork, mDefaultConnectionSequence), delay);
         } else {
             // we've set the new condition, when this hold ends that will get picked up
             if (VDBG) log("handleInetConditionChange: currently in hold - not setting new end evt");
         }
     }
 
-    private void handleInetConditionHoldEnd(int netType, int sequence, int condition) {
+    private void handleInetConditionHoldEnd(int netType, int sequence) {
         if (DBG) {
-            log("handleInetConditionHoldEnd: net=" + netType + ", condition=" + condition);
+            log("handleInetConditionHoldEnd: net=" + netType +
+                    ", condition=" + mDefaultInetCondition +
+                    ", published condition=" + mDefaultInetConditionPublished);
         }
         mInetConditionChangeInFlight = false;
 
@@ -2973,13 +2964,19 @@
             if (DBG) log("handleInetConditionHoldEnd: event hold for obsolete network - ignoring");
             return;
         }
-
+        // TODO: Figure out why this optimization sometimes causes a
+        //       change in mDefaultInetCondition to be missed and the
+        //       UI to not be updated.
+        //if (mDefaultInetConditionPublished == mDefaultInetCondition) {
+        //    if (DBG) log("no change in condition - aborting");
+        //    return;
+        //}
         NetworkInfo networkInfo = mNetTrackers[mActiveDefaultNetwork].getNetworkInfo();
         if (networkInfo.isConnected() == false) {
             if (DBG) log("handleInetConditionHoldEnd: default network not connected - ignoring");
             return;
         }
-        mDefaultInetConditionPublished = condition;
+        mDefaultInetConditionPublished = mDefaultInetCondition;
         sendInetConditionBroadcast(networkInfo);
         return;
     }
diff --git a/services/java/com/android/server/EntropyMixer.java b/services/java/com/android/server/EntropyMixer.java
index 4632374..8c0d260 100644
--- a/services/java/com/android/server/EntropyMixer.java
+++ b/services/java/com/android/server/EntropyMixer.java
@@ -142,6 +142,7 @@
             out.println(SystemProperties.get("ro.bootloader"));
             out.println(SystemProperties.get("ro.hardware"));
             out.println(SystemProperties.get("ro.revision"));
+            out.println(SystemProperties.get("ro.build.fingerprint"));
             out.println(new Object().hashCode());
             out.println(System.currentTimeMillis());
             out.println(System.nanoTime());
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 593b9bf..1a8641b 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -382,6 +382,8 @@
     private boolean mInputBoundToKeyguard;
 
     class SettingsObserver extends ContentObserver {
+        String mLastEnabled = "";
+
         SettingsObserver(Handler handler) {
             super(handler);
             ContentResolver resolver = mContext.getContentResolver();
@@ -395,7 +397,13 @@
 
         @Override public void onChange(boolean selfChange) {
             synchronized (mMethodMap) {
-                updateFromSettingsLocked();
+                boolean enabledChanged = false;
+                String newEnabled = mSettings.getEnabledInputMethodsStr();
+                if (!mLastEnabled.equals(newEnabled)) {
+                    mLastEnabled = newEnabled;
+                    enabledChanged = true;
+                }
+                updateFromSettingsLocked(enabledChanged);
             }
         }
     }
@@ -503,7 +511,8 @@
                     }
                 }
 
-                buildInputMethodListLocked(mMethodList, mMethodMap);
+                buildInputMethodListLocked(
+                        mMethodList, mMethodMap, false /* resetDefaultEnabledIme */);
 
                 boolean changed = false;
 
@@ -539,7 +548,7 @@
                 }
 
                 if (changed) {
-                    updateFromSettingsLocked();
+                    updateFromSettingsLocked(false);
                 }
             }
         }
@@ -663,9 +672,13 @@
 
         // Just checking if defaultImiId is empty or not
         final String defaultImiId = mSettings.getSelectedInputMethod();
+        if (DEBUG) {
+            Slog.d(TAG, "Initial default ime = " + defaultImiId);
+        }
         mImeSelectedOnBoot = !TextUtils.isEmpty(defaultImiId);
 
-        buildInputMethodListLocked(mMethodList, mMethodMap);
+        buildInputMethodListLocked(mMethodList, mMethodMap,
+                !mImeSelectedOnBoot /* resetDefaultEnabledIme */);
         mSettings.enableAllIMEsIfThereIsNoEnabledIME();
 
         if (!mImeSelectedOnBoot) {
@@ -674,7 +687,7 @@
         }
 
         mSettingsObserver = new SettingsObserver(mHandler);
-        updateFromSettingsLocked();
+        updateFromSettingsLocked(true);
 
         // IMMS wants to receive Intent.ACTION_LOCALE_CHANGED in order to update the current IME
         // according to the new system locale.
@@ -718,7 +731,7 @@
         }
     }
 
-    private void resetAllInternalStateLocked(boolean updateOnlyWhenLocaleChanged) {
+    private void resetAllInternalStateLocked(final boolean updateOnlyWhenLocaleChanged) {
         if (!mSystemReady) {
             // not system ready
             return;
@@ -736,7 +749,8 @@
             }
             // InputMethodAndSubtypeListManager should be reset when the locale is changed.
             mImListManager = new InputMethodAndSubtypeListManager(mContext, this);
-            buildInputMethodListLocked(mMethodList, mMethodMap);
+            buildInputMethodListLocked(mMethodList, mMethodMap,
+                    updateOnlyWhenLocaleChanged /* resetDefaultEnabledIme */);
             if (!updateOnlyWhenLocaleChanged) {
                 final String selectedImiId = mSettings.getSelectedInputMethod();
                 if (TextUtils.isEmpty(selectedImiId)) {
@@ -748,7 +762,7 @@
                 // If the locale is changed, needs to reset the default ime
                 resetDefaultImeLocked(mContext);
             }
-            updateFromSettingsLocked();
+            updateFromSettingsLocked(true);
             mLastSystemLocale = newLocale;
             if (!updateOnlyWhenLocaleChanged) {
                 try {
@@ -806,7 +820,8 @@
                     mWindowManagerService.setOnHardKeyboardStatusChangeListener(
                             mHardKeyboardListener);
                 }
-                buildInputMethodListLocked(mMethodList, mMethodMap);
+                buildInputMethodListLocked(mMethodList, mMethodMap,
+                        !mImeSelectedOnBoot /* resetDefaultEnabledIme */);
                 if (!mImeSelectedOnBoot) {
                     Slog.w(TAG, "Reset the default IME as \"Resource\" is ready here.");
                     checkCurrentLocaleChangedLocked();
@@ -1533,7 +1548,27 @@
         return false;
     }
 
-    void updateFromSettingsLocked() {
+    void updateFromSettingsLocked(boolean enabledMayChange) {
+        if (enabledMayChange) {
+            List<InputMethodInfo> enabled = mSettings.getEnabledInputMethodListLocked();
+            for (int i=0; i<enabled.size(); i++) {
+                // We allow the user to select "disabled until used" apps, so if they
+                // are enabling one of those here we now need to make it enabled.
+                InputMethodInfo imm = enabled.get(i);
+                try {
+                    ApplicationInfo ai = mIPackageManager.getApplicationInfo(imm.getPackageName(),
+                            PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS,
+                            mSettings.getCurrentUserId());
+                    if (ai.enabledSetting
+                            == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
+                        mIPackageManager.setApplicationEnabledSetting(imm.getPackageName(),
+                                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
+                                PackageManager.DONT_KILL_APP, mSettings.getCurrentUserId());
+                    }
+                } catch (RemoteException e) {
+                }
+            }
+        }
         // We are assuming that whoever is changing DEFAULT_INPUT_METHOD and
         // ENABLED_INPUT_METHODS is taking care of keeping them correctly in
         // sync, so we will never have a DEFAULT_INPUT_METHOD that is not
@@ -2119,7 +2154,8 @@
                         mFileManager.addInputMethodSubtypes(imi, subtypes);
                         final long ident = Binder.clearCallingIdentity();
                         try {
-                            buildInputMethodListLocked(mMethodList, mMethodMap);
+                            buildInputMethodListLocked(mMethodList, mMethodMap,
+                                    false /* resetDefaultEnabledIme */);
                         } finally {
                             Binder.restoreCallingIdentity(ident);
                         }
@@ -2369,9 +2405,10 @@
     }
 
     void buildInputMethodListLocked(ArrayList<InputMethodInfo> list,
-            HashMap<String, InputMethodInfo> map) {
+            HashMap<String, InputMethodInfo> map, boolean resetDefaultEnabledIme) {
         if (DEBUG) {
-            Slog.d(TAG, "--- re-buildInputMethodList " + ", \n ------ \n" + getStackTrace());
+            Slog.d(TAG, "--- re-buildInputMethodList reset = " + resetDefaultEnabledIme
+                    + " \n ------ \n" + getStackTrace());
         }
         list.clear();
         map.clear();
@@ -2383,7 +2420,8 @@
 
         final List<ResolveInfo> services = pm.queryIntentServicesAsUser(
                 new Intent(InputMethod.SERVICE_INTERFACE),
-                PackageManager.GET_META_DATA, mSettings.getCurrentUserId());
+                PackageManager.GET_META_DATA | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS,
+                mSettings.getCurrentUserId());
 
         final HashMap<String, List<InputMethodSubtype>> additionalSubtypes =
                 mFileManager.getAllAdditionalInputMethodSubtypes();
@@ -2407,14 +2445,8 @@
                 final String id = p.getId();
                 map.put(id, p);
 
-                // Valid system default IMEs and IMEs that have English subtypes are enabled
-                // by default
-                if (InputMethodUtils.isDefaultEnabledIme(mSystemReady, p, mContext)) {
-                    setInputMethodEnabledLocked(id, true);
-                }
-
                 if (DEBUG) {
-                    Slog.d(TAG, "Found a third-party input method " + p);
+                    Slog.d(TAG, "Found an input method " + p);
                 }
 
             } catch (XmlPullParserException e) {
@@ -2424,12 +2456,24 @@
             }
         }
 
+        if (resetDefaultEnabledIme) {
+            final ArrayList<InputMethodInfo> defaultEnabledIme =
+                    InputMethodUtils.getDefaultEnabledImes(mContext, mSystemReady, list);
+            for (int i = 0; i < defaultEnabledIme.size(); ++i) {
+                final InputMethodInfo imi =  defaultEnabledIme.get(i);
+                if (DEBUG) {
+                    Slog.d(TAG, "--- enable ime = " + imi);
+                }
+                setInputMethodEnabledLocked(imi.getId(), true);
+            }
+        }
+
         final String defaultImiId = mSettings.getSelectedInputMethod();
         if (!TextUtils.isEmpty(defaultImiId)) {
             if (!map.containsKey(defaultImiId)) {
                 Slog.w(TAG, "Default IME is uninstalled. Choose new default IME.");
                 if (chooseNewDefaultIMELocked()) {
-                    updateFromSettingsLocked();
+                    updateFromSettingsLocked(true);
                 }
             } else {
                 // Double check that the default IME is certainly enabled.
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index b351fc2..bcb7cb7 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -92,7 +92,7 @@
  */
 public class LocationManagerService extends ILocationManager.Stub {
     private static final String TAG = "LocationManagerService";
-    public static final boolean D = false;
+    public static final boolean D = Log.isLoggable(TAG, Log.DEBUG);
 
     private static final String WAKELOCK_KEY = TAG;
     private static final String THREAD_NAME = TAG;
@@ -221,6 +221,16 @@
             mBlacklist.init();
             mGeofenceManager = new GeofenceManager(mContext, mBlacklist);
 
+            // Monitor for app ops mode changes.
+            AppOpsManager.Callback callback = new AppOpsManager.Callback() {
+                public void opChanged(int op, String packageName) {
+                    synchronized (mLock) {
+                        applyAllProviderRequirementsLocked();
+                    }
+                }
+            };
+            mAppOps.startWatchingMode(AppOpsManager.OP_COARSE_LOCATION, null, callback);
+
             // prepare providers
             loadProvidersLocked();
             updateProvidersLocked();
@@ -365,7 +375,7 @@
                 mContext,
                 LocationManager.NETWORK_PROVIDER,
                 NETWORK_LOCATION_SERVICE_ACTION,
-                providerPackageNames, mLocationHandler, mCurrentUserId);
+                providerPackageNames, mLocationHandler);
         if (networkProvider != null) {
             mRealProviders.put(LocationManager.NETWORK_PROVIDER, networkProvider);
             mProxyProviders.add(networkProvider);
@@ -379,7 +389,7 @@
                 mContext,
                 LocationManager.FUSED_PROVIDER,
                 FUSED_LOCATION_SERVICE_ACTION,
-                providerPackageNames, mLocationHandler, mCurrentUserId);
+                providerPackageNames, mLocationHandler);
         if (fusedLocationProvider != null) {
             addProviderLocked(fusedLocationProvider);
             mProxyProviders.add(fusedLocationProvider);
@@ -392,7 +402,7 @@
 
         // bind to geocoder provider
         mGeocodeProvider = GeocoderProxy.createAndBind(mContext, providerPackageNames,
-                mLocationHandler, mCurrentUserId);
+                mLocationHandler);
         if (mGeocodeProvider == null) {
             Slog.e(TAG,  "no geocoder provider found");
         }
@@ -404,11 +414,11 @@
      */
     private void switchUser(int userId) {
         mBlacklist.switchUser(userId);
+        mLocationHandler.removeMessages(MSG_LOCATION_CHANGED);
         synchronized (mLock) {
             mLastLocation.clear();
             for (LocationProviderInterface p : mProviders) {
                 updateProviderListenersLocked(p.getName(), false, mCurrentUserId);
-                p.switchUser(userId);
             }
             mCurrentUserId = userId;
             updateProvidersLocked();
@@ -529,9 +539,6 @@
         }
 
         public boolean callLocationChangedLocked(Location location) {
-            if (!reportLocationAccessNoThrow(mUid, mPackageName, mAllowedResolutionLevel)) {
-                return true;
-            }
             if (mListener != null) {
                 try {
                     synchronized (this) {
@@ -670,11 +677,15 @@
         mProvidersByName.remove(provider.getName());
     }
 
-
-    private boolean isAllowedBySettingsLocked(String provider, int userId) {
-        if (userId != mCurrentUserId) {
-            return false;
-        }
+    /**
+     * Returns "true" if access to the specified location provider is allowed by the current
+     * user's settings. Access to all location providers is forbidden to non-location-provider
+     * processes belonging to background users.
+     *
+     * @param provider the name of the location provider
+     * @return
+     */
+    private boolean isAllowedByCurrentUserSettingsLocked(String provider) {
         if (mEnabledProviders.contains(provider)) {
             return true;
         }
@@ -688,6 +699,22 @@
     }
 
     /**
+     * Returns "true" if access to the specified location provider is allowed by the specified
+     * user's settings. Access to all location providers is forbidden to non-location-provider
+     * processes belonging to background users.
+     *
+     * @param provider the name of the location provider
+     * @param uid the requestor's UID
+     * @return
+     */
+    private boolean isAllowedByUserSettingsLocked(String provider, int uid) {
+        if (UserHandle.getUserId(uid) != mCurrentUserId && !isUidALocationProvider(uid)) {
+            return false;
+        }
+        return isAllowedByCurrentUserSettingsLocked(provider);
+    }
+
+    /**
      * Returns the permission string associated with the specified resolution level.
      *
      * @param resolutionLevel the resolution level
@@ -802,14 +829,20 @@
         }
     }
 
-    boolean reportLocationAccessNoThrow(int uid, String packageName, int allowedResolutionLevel) {
-        int op;
+    public static int resolutionLevelToOp(int allowedResolutionLevel) {
         if (allowedResolutionLevel != RESOLUTION_LEVEL_NONE) {
             if (allowedResolutionLevel == RESOLUTION_LEVEL_COARSE) {
-                op = AppOpsManager.OP_COARSE_LOCATION;
+                return AppOpsManager.OP_COARSE_LOCATION;
             } else {
-                op = AppOpsManager.OP_FINE_LOCATION;
+                return AppOpsManager.OP_FINE_LOCATION;
             }
+        }
+        return -1;
+    }
+
+    boolean reportLocationAccessNoThrow(int uid, String packageName, int allowedResolutionLevel) {
+        int op = resolutionLevelToOp(allowedResolutionLevel);
+        if (op >= 0) {
             if (mAppOps.noteOpNoThrow(op, uid, packageName) != AppOpsManager.MODE_ALLOWED) {
                 return false;
             }
@@ -818,13 +851,8 @@
     }
 
     boolean checkLocationAccess(int uid, String packageName, int allowedResolutionLevel) {
-        int op;
-        if (allowedResolutionLevel != RESOLUTION_LEVEL_NONE) {
-            if (allowedResolutionLevel == RESOLUTION_LEVEL_COARSE) {
-                op = AppOpsManager.OP_COARSE_LOCATION;
-            } else {
-                op = AppOpsManager.OP_FINE_LOCATION;
-            }
+        int op = resolutionLevelToOp(allowedResolutionLevel);
+        if (op >= 0) {
             if (mAppOps.checkOp(op, uid, packageName) != AppOpsManager.MODE_ALLOWED) {
                 return false;
             }
@@ -864,7 +892,7 @@
     public List<String> getProviders(Criteria criteria, boolean enabledOnly) {
         int allowedResolutionLevel = getCallerAllowedResolutionLevel();
         ArrayList<String> out;
-        int callingUserId = UserHandle.getCallingUserId();
+        int uid = Binder.getCallingUid();;
         long identity = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
@@ -875,7 +903,7 @@
                         continue;
                     }
                     if (allowedResolutionLevel >= getMinimumResolutionLevelForProviderUse(name)) {
-                        if (enabledOnly && !isAllowedBySettingsLocked(name, callingUserId)) {
+                        if (enabledOnly && !isAllowedByUserSettingsLocked(name, uid)) {
                             continue;
                         }
                         if (criteria != null && !LocationProvider.propertiesMeetCriteria(
@@ -951,7 +979,7 @@
             LocationProviderInterface p = mProviders.get(i);
             boolean isEnabled = p.isEnabled();
             String name = p.getName();
-            boolean shouldBeEnabled = isAllowedBySettingsLocked(name, mCurrentUserId);
+            boolean shouldBeEnabled = isAllowedByCurrentUserSettingsLocked(name);
             if (isEnabled && !shouldBeEnabled) {
                 updateProviderListenersLocked(name, false, mCurrentUserId);
                 changesMade = true;
@@ -1019,11 +1047,14 @@
         if (records != null) {
             for (UpdateRecord record : records) {
                 if (UserHandle.getUserId(record.mReceiver.mUid) == mCurrentUserId) {
-                    LocationRequest locationRequest = record.mRequest;
-                    providerRequest.locationRequests.add(locationRequest);
-                    if (locationRequest.getInterval() < providerRequest.interval) {
-                        providerRequest.reportLocation = true;
-                        providerRequest.interval = locationRequest.getInterval();
+                    if (checkLocationAccess(record.mReceiver.mUid, record.mReceiver.mPackageName,
+                            record.mReceiver.mAllowedResolutionLevel)) {
+                        LocationRequest locationRequest = record.mRequest;
+                        providerRequest.locationRequests.add(locationRequest);
+                        if (locationRequest.getInterval() < providerRequest.interval) {
+                            providerRequest.reportLocation = true;
+                            providerRequest.interval = locationRequest.getInterval();
+                        }
                     }
                 }
             }
@@ -1144,9 +1175,6 @@
      * and consistency requirements.
      *
      * @param request the LocationRequest from which to create a sanitized version
-     * @param shouldBeCoarse whether the sanitized version should be held to coarse resolution
-     * constraints
-     * @param fastestCoarseIntervalMS minimum interval allowed for coarse resolution
      * @return a version of request that meets the given resolution and consistency requirements
      * @hide
      */
@@ -1262,7 +1290,7 @@
             oldRecord.disposeLocked(false);
         }
 
-        boolean isProviderEnabled = isAllowedBySettingsLocked(name, UserHandle.getUserId(uid));
+        boolean isProviderEnabled = isAllowedByUserSettingsLocked(name, uid);
         if (isProviderEnabled) {
             applyRequirementsLocked(name);
         } else {
@@ -1319,7 +1347,7 @@
         // update provider
         for (String provider : providers) {
             // If provider is already disabled, don't need to do anything
-            if (!isAllowedBySettingsLocked(provider, mCurrentUserId)) {
+            if (!isAllowedByCurrentUserSettingsLocked(provider)) {
                 continue;
             }
 
@@ -1327,6 +1355,17 @@
         }
     }
 
+    private void applyAllProviderRequirementsLocked() {
+        for (LocationProviderInterface p : mProviders) {
+            // If provider is already disabled, don't need to do anything
+            if (!isAllowedByCurrentUserSettingsLocked(p.getName())) {
+                continue;
+            }
+
+            applyRequirementsLocked(p.getName());
+        }
+    }
+
     @Override
     public Location getLastLocation(LocationRequest request, String packageName) {
         if (D) Log.d(TAG, "getLastLocation: " + request);
@@ -1340,16 +1379,18 @@
         final int uid = Binder.getCallingUid();
         final long identity = Binder.clearCallingIdentity();
         try {
-            if (!reportLocationAccessNoThrow(uid, packageName, allowedResolutionLevel)) {
-                return null;
-            }
-            
             if (mBlacklist.isBlacklisted(packageName)) {
                 if (D) Log.d(TAG, "not returning last loc for blacklisted app: " +
                         packageName);
                 return null;
             }
 
+            if (!reportLocationAccessNoThrow(uid, packageName, allowedResolutionLevel)) {
+                if (D) Log.d(TAG, "not returning last loc for no op app: " +
+                        packageName);
+                return null;
+            }
+
             synchronized (mLock) {
                 // Figure out the provider. Either its explicitly request (deprecated API's),
                 // or use the fused provider
@@ -1358,7 +1399,7 @@
                 LocationProviderInterface provider = mProvidersByName.get(name);
                 if (provider == null) return null;
 
-                if (!isAllowedBySettingsLocked(name, mCurrentUserId)) return null;
+                if (!isAllowedByUserSettingsLocked(name, uid)) return null;
 
                 Location location = mLastLocation.get(name);
                 if (location == null) {
@@ -1402,7 +1443,8 @@
         }
         long identity = Binder.clearCallingIdentity();
         try {
-            mGeofenceManager.addFence(sanitizedRequest, geofence, intent, uid, packageName);
+            mGeofenceManager.addFence(sanitizedRequest, geofence, intent, allowedResolutionLevel,
+                    uid, packageName);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
@@ -1438,7 +1480,7 @@
         final int uid = Binder.getCallingUid();
         final long ident = Binder.clearCallingIdentity();
         try {
-            if (checkLocationAccess(uid, packageName, allowedResolutionLevel)) {
+            if (!checkLocationAccess(uid, packageName, allowedResolutionLevel)) {
                 return false;
             }
         } finally {
@@ -1531,19 +1573,39 @@
                 provider);
         if (LocationManager.FUSED_PROVIDER.equals(provider)) return false;
 
+        int uid = Binder.getCallingUid();
         long identity = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
                 LocationProviderInterface p = mProvidersByName.get(provider);
                 if (p == null) return false;
 
-                return isAllowedBySettingsLocked(provider, mCurrentUserId);
+                return isAllowedByUserSettingsLocked(provider, uid);
             }
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
     }
 
+    /**
+     * Returns "true" if the UID belongs to a bound location provider.
+     *
+     * @param uid the uid
+     * @return true if uid belongs to a bound location provider
+     */
+    private boolean isUidALocationProvider(int uid) {
+        if (uid == Process.SYSTEM_UID) {
+            return true;
+        }
+        if (mGeocodeProvider != null) {
+            if (doesPackageHaveUid(uid, mGeocodeProvider.getConnectedPackageName())) return true;
+        }
+        for (LocationProviderProxy proxy : mProxyProviders) {
+            if (doesPackageHaveUid(uid, proxy.getConnectedPackageName())) return true;
+        }
+        return false;
+    }
+
     private void checkCallerIsProvider() {
         if (mContext.checkCallingOrSelfPermission(INSTALL_LOCATION_PROVIDER)
                 == PackageManager.PERMISSION_GRANTED) {
@@ -1557,14 +1619,10 @@
         // also allow providers with a UID matching the
         // currently bound package name
 
-        int uid = Binder.getCallingUid();
+        if (isUidALocationProvider(Binder.getCallingUid())) {
+            return;
+        }
 
-        if (mGeocodeProvider != null) {
-            if (doesPackageHaveUid(uid, mGeocodeProvider.getConnectedPackageName())) return;
-        }
-        for (LocationProviderProxy proxy : mProxyProviders) {
-            if (doesPackageHaveUid(uid, proxy.getConnectedPackageName())) return;
-        }
         throw new SecurityException("need INSTALL_LOCATION_PROVIDER permission, " +
                 "or UID of a currently bound location provider");
     }
@@ -1703,6 +1761,13 @@
                 continue;
             }
 
+            if (!reportLocationAccessNoThrow(receiver.mUid, receiver.mPackageName,
+                    receiver.mAllowedResolutionLevel)) {
+                if (D) Log.d(TAG, "skipping loc update for no op app: " +
+                        receiver.mPackageName);
+                continue;
+            }
+
             Location notifyLocation = null;
             if (receiver.mAllowedResolutionLevel < RESOLUTION_LEVEL_FINE) {
                 notifyLocation = coarseLocation;  // use coarse location
@@ -1784,17 +1849,32 @@
         }
     }
 
-    private void handleLocationChanged(Location location, boolean passive) {
-        String provider = location.getProvider();
+    private boolean isMockProvider(String provider) {
+        synchronized (mLock) {
+            return mMockProviders.containsKey(provider);
+        }
+    }
 
-        if (!passive) {
-            // notify passive provider of the new location
-            mPassiveProvider.updateLocation(location);
+    private void handleLocationChanged(Location location, boolean passive) {
+        // create a working copy of the incoming Location so that the service can modify it without
+        // disturbing the caller's copy
+        Location myLocation = new Location(location);
+        String provider = myLocation.getProvider();
+
+        // set "isFromMockProvider" bit if location came from a mock provider. we do not clear this
+        // bit if location did not come from a mock provider because passive/fused providers can
+        // forward locations from mock providers, and should not grant them legitimacy in doing so.
+        if (!myLocation.isFromMockProvider() && isMockProvider(provider)) {
+            myLocation.setIsFromMockProvider(true);
         }
 
         synchronized (mLock) {
-            if (isAllowedBySettingsLocked(provider, mCurrentUserId)) {
-                handleLocationChangedLocked(location, passive);
+            if (isAllowedByCurrentUserSettingsLocked(provider)) {
+                if (!passive) {
+                    // notify passive provider of the new location
+                    mPassiveProvider.updateLocation(myLocation);
+                }
+                handleLocationChangedLocked(myLocation, passive);
             }
         }
     }
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index 37d7ce7..d121653 100644
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -23,6 +23,7 @@
 import android.app.ActivityManager;
 import android.app.ActivityManagerNative;
 import android.app.AppGlobals;
+import android.app.AppOpsManager;
 import android.app.IActivityManager;
 import android.app.INotificationManager;
 import android.app.ITransientNotification;
@@ -35,6 +36,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
@@ -62,21 +64,17 @@
 import android.util.Xml;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
-import android.widget.RemoteViews;
 import android.widget.Toast;
 
 import com.android.internal.statusbar.StatusBarNotification;
-import com.android.internal.util.FastXmlSerializer;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
 
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -156,6 +154,8 @@
     private ArrayList<NotificationRecord> mLights = new ArrayList<NotificationRecord>();
     private NotificationRecord mLedNotification;
 
+    private final AppOpsManager mAppOps;
+
     // Notification control database. For now just contains disabled packages.
     private AtomicFile mPolicyFile;
     private HashSet<String> mBlockedPackages = new HashSet<String>();
@@ -218,79 +218,35 @@
         }
     }
 
-    private void writeBlockDb() {
-        synchronized(mBlockedPackages) {
-            FileOutputStream outfile = null;
-            try {
-                outfile = mPolicyFile.startWrite();
-
-                XmlSerializer out = new FastXmlSerializer();
-                out.setOutput(outfile, "utf-8");
-
-                out.startDocument(null, true);
-
-                out.startTag(null, TAG_BODY); {
-                    out.attribute(null, ATTR_VERSION, String.valueOf(DB_VERSION));
-                    out.startTag(null, TAG_BLOCKED_PKGS); {
-                        // write all known network policies
-                        for (String pkg : mBlockedPackages) {
-                            out.startTag(null, TAG_PACKAGE); {
-                                out.attribute(null, ATTR_NAME, pkg);
-                            } out.endTag(null, TAG_PACKAGE);
-                        }
-                    } out.endTag(null, TAG_BLOCKED_PKGS);
-                } out.endTag(null, TAG_BODY);
-
-                out.endDocument();
-
-                mPolicyFile.finishWrite(outfile);
-            } catch (IOException e) {
-                if (outfile != null) {
-                    mPolicyFile.failWrite(outfile);
-                }
-            }
-        }
-    }
-
-    public boolean areNotificationsEnabledForPackage(String pkg) {
+    /**
+     * Use this when you just want to know if notifications are OK for this package.
+     */
+    public boolean areNotificationsEnabledForPackage(String pkg, int uid) {
         checkCallerIsSystem();
-        return areNotificationsEnabledForPackageInt(pkg);
+        return (mAppOps.checkOpNoThrow(AppOpsManager.OP_POST_NOTIFICATION, uid, pkg)
+                == AppOpsManager.MODE_ALLOWED);
     }
 
-    // Unchecked. Not exposed via Binder, but can be called in the course of enqueue*().
-    private boolean areNotificationsEnabledForPackageInt(String pkg) {
-        final boolean enabled = !mBlockedPackages.contains(pkg);
-        if (DBG) {
-            Slog.v(TAG, "notifications are " + (enabled?"en":"dis") + "abled for " + pkg);
+    /** Use this when you actually want to post a notification or toast.
+     *
+     * Unchecked. Not exposed via Binder, but can be called in the course of enqueue*().
+     */
+    private boolean noteNotificationOp(String pkg, int uid) {
+        if (mAppOps.noteOpNoThrow(AppOpsManager.OP_POST_NOTIFICATION, uid, pkg)
+                != AppOpsManager.MODE_ALLOWED) {
+            Slog.v(TAG, "notifications are disabled by AppOps for " + pkg);
+            return false;
         }
-        return enabled;
+        return true;
     }
 
-    public void setNotificationsEnabledForPackage(String pkg, boolean enabled) {
+    public void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled) {
         checkCallerIsSystem();
-        if (DBG) {
+        if (true||DBG) {
             Slog.v(TAG, (enabled?"en":"dis") + "abling notifications for " + pkg);
         }
-        if (enabled) {
-            mBlockedPackages.remove(pkg);
-        } else {
-            mBlockedPackages.add(pkg);
-
-            // Now, cancel any outstanding notifications that are part of a just-disabled app
-            if (ENABLE_BLOCKED_NOTIFICATIONS) {
-                synchronized (mNotificationList) {
-                    final int N = mNotificationList.size();
-                    for (int i=0; i<N; i++) {
-                        final NotificationRecord r = mNotificationList.get(i);
-                        if (r.pkg.equals(pkg)) {
-                            cancelNotificationLocked(r, false);
-                        }
-                    }
-                }
-            }
-            // Don't bother canceling toasts, they'll go away soon enough.
-        }
-        writeBlockDb();
+        mAppOps.setMode(AppOpsManager.OP_POST_NOTIFICATION, uid, pkg,
+                enabled ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED);
     }
 
 
@@ -322,6 +278,7 @@
     private static final class NotificationRecord
     {
         final String pkg;
+        final String basePkg;
         final String tag;
         final int id;
         final int uid;
@@ -331,10 +288,11 @@
         final int score;
         IBinder statusBarKey;
 
-        NotificationRecord(String pkg, String tag, int id, int uid, int initialPid,
+        NotificationRecord(String pkg, String basePkg, String tag, int id, int uid, int initialPid,
                 int userId, int score, Notification notification)
         {
             this.pkg = pkg;
+            this.basePkg = basePkg;
             this.tag = tag;
             this.id = id;
             this.uid = uid;
@@ -628,7 +586,9 @@
         mToastQueue = new ArrayList<ToastRecord>();
         mHandler = new WorkerHandler();
 
-        loadBlockDb();
+        mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
+
+        importOldBlockDb();
 
         mStatusBar = statusBar;
         statusBar.setNotificationCallbacks(mNotificationCallbacks);
@@ -685,6 +645,28 @@
         observer.observe();
     }
 
+    /**
+     * Read the old XML-based app block database and import those blockages into the AppOps system.
+     */
+    private void importOldBlockDb() {
+        loadBlockDb();
+
+        PackageManager pm = mContext.getPackageManager();
+        for (String pkg : mBlockedPackages) {
+            PackageInfo info = null;
+            try {
+                info = pm.getPackageInfo(pkg, 0);
+                setNotificationsEnabledForPackage(pkg, info.applicationInfo.uid, false);
+            } catch (NameNotFoundException e) {
+                // forget you
+            }
+        }
+        mBlockedPackages.clear();
+        if (mPolicyFile != null) {
+            mPolicyFile.delete();
+        }
+    }
+
     void systemReady() {
         mAudioService = IAudioService.Stub.asInterface(
                 ServiceManager.getService(Context.AUDIO_SERVICE));
@@ -706,9 +688,11 @@
 
         final boolean isSystemToast = ("android".equals(pkg));
 
-        if (ENABLE_BLOCKED_TOASTS && !isSystemToast && !areNotificationsEnabledForPackageInt(pkg)) {
-            Slog.e(TAG, "Suppressing toast from package " + pkg + " by user request.");
-            return;
+        if (ENABLE_BLOCKED_TOASTS && !noteNotificationOp(pkg, Binder.getCallingUid())) {
+            if (!isSystemToast) {
+                Slog.e(TAG, "Suppressing toast from package " + pkg + " by user request.");
+                return;
+            }
         }
 
         synchronized (mToastQueue) {
@@ -898,10 +882,10 @@
 
     // Notifications
     // ============================================================================
-    public void enqueueNotificationWithTag(String pkg, String tag, int id, Notification notification,
-            int[] idOut, int userId)
+    public void enqueueNotificationWithTag(String pkg, String basePkg, String tag, int id,
+            Notification notification, int[] idOut, int userId)
     {
-        enqueueNotificationInternal(pkg, Binder.getCallingUid(), Binder.getCallingPid(),
+        enqueueNotificationInternal(pkg, basePkg, Binder.getCallingUid(), Binder.getCallingPid(),
                 tag, id, notification, idOut, userId);
     }
     
@@ -911,8 +895,8 @@
 
     // Not exposed via Binder; for system use only (otherwise malicious apps could spoof the
     // uid/pid of another application)
-    public void enqueueNotificationInternal(String pkg, int callingUid, int callingPid,
-            String tag, int id, Notification notification, int[] idOut, int userId)
+    public void enqueueNotificationInternal(String pkg, String basePkg, int callingUid,
+            int callingPid, String tag, int id, Notification notification, int[] idOut, int userId)
     {
         if (DBG) {
             Slog.v(TAG, "enqueueNotificationInternal: pkg=" + pkg + " id=" + id + " notification=" + notification);
@@ -982,9 +966,11 @@
         // 3. Apply local rules
 
         // blocked apps
-        if (ENABLE_BLOCKED_NOTIFICATIONS && !isSystemNotification && !areNotificationsEnabledForPackageInt(pkg)) {
-            score = JUNK_SCORE;
-            Slog.e(TAG, "Suppressing notification from package " + pkg + " by user request.");
+        if (ENABLE_BLOCKED_NOTIFICATIONS && !noteNotificationOp(pkg, callingUid)) {
+            if (!isSystemNotification) {
+                score = JUNK_SCORE;
+                Slog.e(TAG, "Suppressing notification from package " + pkg + " by user request.");
+            }
         }
 
         if (DBG) {
@@ -1000,7 +986,7 @@
         final boolean canInterrupt = (score >= SCORE_INTERRUPTION_THRESHOLD);
 
         synchronized (mNotificationList) {
-            NotificationRecord r = new NotificationRecord(pkg, tag, id, 
+            NotificationRecord r = new NotificationRecord(pkg, basePkg, tag, id,
                     callingUid, callingPid, userId,
                     score,
                     notification);
@@ -1157,15 +1143,16 @@
                         // does not have the VIBRATE permission.
                         long identity = Binder.clearCallingIdentity();
                         try {
-                            mVibrator.vibrate(useDefaultVibrate ? mDefaultVibrationPattern
-                                                                : mFallbackVibrationPattern,
+                            mVibrator.vibrate(r.uid, r.basePkg,
+                                useDefaultVibrate ? mDefaultVibrationPattern
+                                    : mFallbackVibrationPattern,
                                 ((notification.flags & Notification.FLAG_INSISTENT) != 0) ? 0: -1);
                         } finally {
                             Binder.restoreCallingIdentity(identity);
                         }
                     } else if (notification.vibrate.length > 1) {
                         // If you want your own vibration pattern, you need the VIBRATE permission
-                        mVibrator.vibrate(notification.vibrate,
+                        mVibrator.vibrate(r.uid, r.basePkg, notification.vibrate,
                             ((notification.flags & Notification.FLAG_INSISTENT) != 0) ? 0: -1);
                     }
                 }
diff --git a/services/java/com/android/server/PreferredComponent.java b/services/java/com/android/server/PreferredComponent.java
index 718b05d..bb22545 100644
--- a/services/java/com/android/server/PreferredComponent.java
+++ b/services/java/com/android/server/PreferredComponent.java
@@ -164,17 +164,19 @@
         return mParseError;
     }
 
-    public void writeToXml(XmlSerializer serializer) throws IOException {
+    public void writeToXml(XmlSerializer serializer, boolean full) throws IOException {
         final int NS = mSetClasses != null ? mSetClasses.length : 0;
         serializer.attribute(null, "name", mShortComponent);
-        if (mMatch != 0) {
-            serializer.attribute(null, "match", Integer.toHexString(mMatch));
-        }
-        serializer.attribute(null, "set", Integer.toString(NS));
-        for (int s=0; s<NS; s++) {
-            serializer.startTag(null, "set");
-            serializer.attribute(null, "name", mSetComponents[s]);
-            serializer.endTag(null, "set");
+        if (full) {
+            if (mMatch != 0) {
+                serializer.attribute(null, "match", Integer.toHexString(mMatch));
+            }
+            serializer.attribute(null, "set", Integer.toString(NS));
+            for (int s=0; s<NS; s++) {
+                serializer.startTag(null, "set");
+                serializer.attribute(null, "name", mSetComponents[s]);
+                serializer.endTag(null, "set");
+            }
         }
     }
 
diff --git a/services/java/com/android/server/RecognitionManagerService.java b/services/java/com/android/server/RecognitionManagerService.java
index 1e0755d..c2e749d 100644
--- a/services/java/com/android/server/RecognitionManagerService.java
+++ b/services/java/com/android/server/RecognitionManagerService.java
@@ -89,17 +89,15 @@
     private void initForUser(int userHandle) {
         if (DEBUG) Slog.i(TAG, "initForUser user=" + userHandle);
         ComponentName comp = getCurRecognizer(userHandle);
+        ServiceInfo info = null;
         if (comp != null) {
-            // See if the current recognizer is no longer available.
+            // See if the current recognizer is still available.
             try {
-                mIPm.getServiceInfo(comp, 0, userHandle);
+                info = mIPm.getServiceInfo(comp, 0, userHandle);
             } catch (RemoteException e) {
-                comp = findAvailRecognizer(null, userHandle);
-                if (comp != null) {
-                    setCurRecognizer(comp, userHandle);
-                }
             }
-        } else {
+        }
+        if (info == null) {
             comp = findAvailRecognizer(null, userHandle);
             if (comp != null) {
                 setCurRecognizer(comp, userHandle);
diff --git a/services/java/com/android/server/ServiceWatcher.java b/services/java/com/android/server/ServiceWatcher.java
index bca7faa..6078d8a 100644
--- a/services/java/com/android/server/ServiceWatcher.java
+++ b/services/java/com/android/server/ServiceWatcher.java
@@ -16,9 +16,11 @@
 
 package com.android.server;
 
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
@@ -44,6 +46,7 @@
 public class ServiceWatcher implements ServiceConnection {
     private static final boolean D = false;
     public static final String EXTRA_SERVICE_VERSION = "serviceVersion";
+    public static final String EXTRA_SERVICE_IS_MULTIUSER = "serviceIsMultiuser";
 
     private final String mTag;
     private final Context mContext;
@@ -59,7 +62,11 @@
     private IBinder mBinder;   // connected service
     private String mPackageName;  // current best package
     private int mVersion = Integer.MIN_VALUE;  // current best version
-    private int mCurrentUserId;
+    /**
+     * Whether the currently-connected service is multiuser-aware. This can change at run-time
+     * when switching from one version of a service to another.
+     */
+    private boolean mIsMultiuser = false;
 
     public static ArrayList<HashSet<Signature>> getSignatureSets(Context context,
             List<String> initialPackageNames) {
@@ -80,15 +87,13 @@
     }
 
     public ServiceWatcher(Context context, String logTag, String action,
-            List<String> initialPackageNames, Runnable newServiceWork, Handler handler, int userId) {
+            List<String> initialPackageNames, Runnable newServiceWork, Handler handler) {
         mContext = context;
         mTag = logTag;
         mAction = action;
         mPm = mContext.getPackageManager();
         mNewServiceWork = newServiceWork;
         mHandler = handler;
-        mCurrentUserId = userId;
-
         mSignatureSets = getSignatureSets(context, initialPackageNames);
     }
 
@@ -97,7 +102,22 @@
             if (!bindBestPackageLocked(null)) return false;
         }
 
+        // listen for user change
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
+        mContext.registerReceiverAsUser(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                String action = intent.getAction();
+                if (Intent.ACTION_USER_SWITCHED.equals(action)) {
+                    switchUser();
+                }
+            }
+        }, UserHandle.ALL, intentFilter, null, mHandler);
+
+        // listen for relevant package changes
         mPackageMonitor.register(mContext, null, UserHandle.ALL, true);
+
         return true;
     }
 
@@ -114,9 +134,10 @@
             intent.setPackage(justCheckThisPackage);
         }
         List<ResolveInfo> rInfos = mPm.queryIntentServicesAsUser(new Intent(mAction),
-                PackageManager.GET_META_DATA, mCurrentUserId);
+                PackageManager.GET_META_DATA, UserHandle.USER_OWNER);
         int bestVersion = Integer.MIN_VALUE;
         String bestPackage = null;
+        boolean bestIsMultiuser = false;
         for (ResolveInfo rInfo : rInfos) {
             String packageName = rInfo.serviceInfo.packageName;
 
@@ -134,25 +155,30 @@
                 continue;
             }
 
-            // check version
-            int version = 0;
+            // check metadata
+            int version = Integer.MIN_VALUE;
+            boolean isMultiuser = false;
             if (rInfo.serviceInfo.metaData != null) {
-                version = rInfo.serviceInfo.metaData.getInt(EXTRA_SERVICE_VERSION, 0);
+                version = rInfo.serviceInfo.metaData.getInt(EXTRA_SERVICE_VERSION,
+                        Integer.MIN_VALUE);
+                isMultiuser = rInfo.serviceInfo.metaData.getBoolean(EXTRA_SERVICE_IS_MULTIUSER);
             }
 
             if (version > mVersion) {
                 bestVersion = version;
                 bestPackage = packageName;
+                bestIsMultiuser = isMultiuser;
             }
         }
 
         if (D) Log.d(mTag, String.format("bindBestPackage for %s : %s found %d, %s", mAction,
                 (justCheckThisPackage == null ? "" : "(" + justCheckThisPackage + ") "),
                 rInfos.size(),
-                (bestPackage == null ? "no new best package" : "new best packge: " + bestPackage)));
+                (bestPackage == null ? "no new best package" : "new best package: "
+                + bestPackage)));
 
         if (bestPackage != null) {
-            bindToPackageLocked(bestPackage, bestVersion);
+            bindToPackageLocked(bestPackage, bestVersion, bestIsMultiuser);
             return true;
         }
         return false;
@@ -163,21 +189,24 @@
         pkg = mPackageName;
         mPackageName = null;
         mVersion = Integer.MIN_VALUE;
+        mIsMultiuser = false;
         if (pkg != null) {
             if (D) Log.d(mTag, "unbinding " + pkg);
             mContext.unbindService(this);
         }
     }
 
-    private void bindToPackageLocked(String packageName, int version) {
+    private void bindToPackageLocked(String packageName, int version, boolean isMultiuser) {
         unbindLocked();
         Intent intent = new Intent(mAction);
         intent.setPackage(packageName);
         mPackageName = packageName;
         mVersion = version;
-        if (D) Log.d(mTag, "binding " + packageName + " (version " + version + ")");
+        mIsMultiuser = isMultiuser;
+        if (D) Log.d(mTag, "binding " + packageName + " (version " + version + ") ("
+                + (isMultiuser ? "multi" : "single") + "-user)");
         mContext.bindServiceAsUser(intent, this, Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND
-                | Context.BIND_NOT_VISIBLE, new UserHandle(mCurrentUserId));
+                | Context.BIND_NOT_VISIBLE, mIsMultiuser ? UserHandle.OWNER : UserHandle.CURRENT);
     }
 
     public static boolean isSignatureMatch(Signature[] signatures,
@@ -290,11 +319,12 @@
         }
     }
 
-    public void switchUser(int userId) {
+    public void switchUser() {
         synchronized (mLock) {
-            unbindLocked();
-            mCurrentUserId = userId;
-            bindBestPackageLocked(null);
+            if (!mIsMultiuser) {
+                unbindLocked();
+                bindBestPackageLocked(null);
+            }
         }
     }
 }
diff --git a/services/java/com/android/server/UiModeManagerService.java b/services/java/com/android/server/UiModeManagerService.java
index 0e456f1..062be01 100644
--- a/services/java/com/android/server/UiModeManagerService.java
+++ b/services/java/com/android/server/UiModeManagerService.java
@@ -494,7 +494,7 @@
             if (Sandman.shouldStartDockApp(mContext, homeIntent)) {
                 try {
                     int result = ActivityManagerNative.getDefault().startActivityWithConfig(
-                            null, homeIntent, null, null, null, 0, 0,
+                            null, null, homeIntent, null, null, null, 0, 0,
                             mConfiguration, null, UserHandle.USER_CURRENT);
                     if (result >= ActivityManager.START_SUCCESS) {
                         dockAppStarted = true;
diff --git a/services/java/com/android/server/VibratorService.java b/services/java/com/android/server/VibratorService.java
index 69379f1..21d3111 100644
--- a/services/java/com/android/server/VibratorService.java
+++ b/services/java/com/android/server/VibratorService.java
@@ -178,12 +178,23 @@
         return doVibratorExists();
     }
 
-    public void vibrate(String packageName, long milliseconds, IBinder token) {
+    private void verifyIncomingUid(int uid) {
+        if (uid == Binder.getCallingUid()) {
+            return;
+        }
+        if (Binder.getCallingPid() == Process.myPid()) {
+            return;
+        }
+        mContext.enforcePermission(android.Manifest.permission.UPDATE_APP_OPS_STATS,
+                Binder.getCallingPid(), Binder.getCallingUid(), null);
+    }
+
+    public void vibrate(int uid, String packageName, long milliseconds, IBinder token) {
         if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
                 != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("Requires VIBRATE permission");
         }
-        int uid = Binder.getCallingUid();
+        verifyIncomingUid(uid);
         // We're running in the system server so we cannot crash. Check for a
         // timeout of 0 or negative. This will ensure that a vibration has
         // either a timeout of > 0 or a non-null pattern.
@@ -219,12 +230,13 @@
         return true;
     }
 
-    public void vibratePattern(String packageName, long[] pattern, int repeat, IBinder token) {
+    public void vibratePattern(int uid, String packageName, long[] pattern, int repeat,
+            IBinder token) {
         if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
                 != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("Requires VIBRATE permission");
         }
-        int uid = Binder.getCallingUid();
+        verifyIncomingUid(uid);
         // so wakelock calls will succeed
         long identity = Binder.clearCallingIdentity();
         try {
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index 5789a53..ad6eb4d 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -18,6 +18,7 @@
 
 import android.app.ActivityManager;
 import android.app.AlarmManager;
+import android.app.AppOpsManager;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -127,6 +128,7 @@
     private int mMulticastDisabled;
 
     private final IBatteryStats mBatteryStats;
+    private final AppOpsManager mAppOps;
 
     private boolean mEnableTrafficStatsPoll = false;
     private int mTrafficStatsPollToken = 0;
@@ -381,6 +383,7 @@
         mWifiStateMachine = new WifiStateMachine(mContext, mInterfaceName);
         mWifiStateMachine.enableRssiPolling(true);
         mBatteryStats = BatteryStatsService.getService();
+        mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
 
         mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
         Intent idleIntent = new Intent(ACTION_DEVICE_IDLE, null);
@@ -845,10 +848,15 @@
      * a list of {@link ScanResult} objects.
      * @return the list of results
      */
-    public List<ScanResult> getScanResults() {
+    public List<ScanResult> getScanResults(String callingPackage) {
         enforceAccessPermission();
         int userId = UserHandle.getCallingUserId();
+        int uid = Binder.getCallingUid();
         long ident = Binder.clearCallingIdentity();
+        if (mAppOps.noteOp(AppOpsManager.OP_WIFI_SCAN, uid, callingPackage)
+                != AppOpsManager.MODE_ALLOWED) {
+            return new ArrayList<ScanResult>();
+        }
         try {
             int currentUser = ActivityManager.getCurrentUser();
             if (userId != currentUser) {
diff --git a/services/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
index 9eb6834..c37f51f 100644
--- a/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
+++ b/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
@@ -41,8 +41,6 @@
 
     private static final boolean DEBUG = false;
 
-    private static final int UNDEFINED_DEVICE_ID = -1;
-
     /**
      * Flag for enabling the screen magnification feature.
      *
@@ -89,11 +87,17 @@
     private int mEnabledFeatures;
 
     private TouchExplorer mTouchExplorer;
+
     private ScreenMagnifier mScreenMagnifier;
+
     private EventStreamTransformation mEventHandler;
 
     private MotionEventHolder mEventQueue;
 
+    private boolean mMotionEventSequenceStarted;
+
+    private boolean mHoverEventSequenceStarted;
+
     AccessibilityInputFilter(Context context, AccessibilityManagerService service) {
         super(context.getMainLooper());
         mContext = context;
@@ -138,17 +142,46 @@
             return;
         }
         if ((policyFlags & WindowManagerPolicy.FLAG_PASS_TO_USER) == 0) {
+            mMotionEventSequenceStarted = false;
+            mHoverEventSequenceStarted = false;
             mEventHandler.clear();
             super.onInputEvent(event, policyFlags);
             return;
         }
         final int deviceId = event.getDeviceId();
         if (mCurrentDeviceId != deviceId) {
-            if (mCurrentDeviceId != UNDEFINED_DEVICE_ID) {
-                mEventHandler.clear();
-            }
+            mMotionEventSequenceStarted = false;
+            mHoverEventSequenceStarted = false;
+            mEventHandler.clear();
             mCurrentDeviceId = deviceId;
         }
+        if (mCurrentDeviceId < 0) {
+            super.onInputEvent(event, policyFlags);
+            return;
+        }
+        // We do not handle scroll events.
+        MotionEvent motionEvent = (MotionEvent) event;
+        if (motionEvent.getActionMasked() == MotionEvent.ACTION_SCROLL) {
+            super.onInputEvent(event, policyFlags);
+            return;
+        }
+        // Wait for a down touch event to start processing.
+        if (motionEvent.isTouchEvent()) {
+            if (!mMotionEventSequenceStarted) {
+                if (motionEvent.getActionMasked() != MotionEvent.ACTION_DOWN) {
+                    return;
+                }
+                mMotionEventSequenceStarted = true;
+            }
+        } else {
+        // Wait for an enter hover event to start processing.
+            if (!mHoverEventSequenceStarted) {
+                if (motionEvent.getActionMasked() != MotionEvent.ACTION_HOVER_ENTER) {
+                    return;
+                }
+                mHoverEventSequenceStarted = true;
+            }
+        }
         batchMotionEvent((MotionEvent) event, policyFlags);
     }
 
@@ -250,6 +283,8 @@
     }
 
     private void enableFeatures() {
+        mMotionEventSequenceStarted = false;
+        mHoverEventSequenceStarted = false;
         if ((mEnabledFeatures & FLAG_FEATURE_SCREEN_MAGNIFIER) != 0) {
             mEventHandler = mScreenMagnifier = new ScreenMagnifier(mContext,
                     Display.DEFAULT_DISPLAY, mAms);
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index 0725df0..bb040bf 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -17,7 +17,6 @@
 package com.android.server.accessibility;
 
 import static android.accessibilityservice.AccessibilityServiceInfo.DEFAULT;
-import static android.accessibilityservice.AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
 
 import android.Manifest;
 import android.accessibilityservice.AccessibilityService;
@@ -255,7 +254,7 @@
                             state.mTouchExplorationGrantedServices.remove(comp);
                             persistComponentNamesToSettingLocked(
                                     Settings.Secure.
-                                            TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
+                                    TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
                                     state.mEnabledServices, userId);
                             return;
                         }
@@ -518,6 +517,10 @@
         ComponentName componentName = new ComponentName("foo.bar",
                 "AutomationAccessibilityService");
         synchronized (mLock) {
+            if (mUiAutomationService != null) {
+                throw new IllegalStateException("UiAutomationService " + serviceClient
+                        + "already registered!");
+            }
             // If an automation services is connected to the system all services are stopped
             // so the automation one is the only one running. Settings are not changed so when
             // the automation service goes away the state is restored from the settings.
@@ -531,6 +534,9 @@
             // No touch exploration.
             userState.mIsTouchExplorationEnabled = false;
 
+            // No touch enhanced web accessibility.
+            userState.mIsEnhancedWebAccessibilityEnabled = false;
+
             // Hook the automation service up.
             mUiAutomationService = new Service(mCurrentUserId, componentName,
                     accessibilityServiceInfo, true);
@@ -556,10 +562,11 @@
         synchronized (mLock) {
             UserState userState = getCurrentUserStateLocked();
             // Stash the old state so we can restore it when the keyguard is gone.
-            mTempStateChangeForCurrentUserMemento.initialize(mCurrentUserId, getCurrentUserStateLocked());
+            mTempStateChangeForCurrentUserMemento.initialize(getCurrentUserStateLocked());
             // Set the temporary state.
             userState.mIsAccessibilityEnabled = true;
-            userState.mIsTouchExplorationEnabled= touchExplorationEnabled;
+            userState.mIsTouchExplorationEnabled = touchExplorationEnabled;
+            userState.mIsEnhancedWebAccessibilityEnabled = false;
             userState.mIsDisplayMagnificationEnabled = false;
             userState.mEnabledServices.clear();
             userState.mEnabledServices.add(service);
@@ -579,6 +586,9 @@
                     && serviceClient != null && mUiAutomationService.mServiceInterface
                             .asBinder() == serviceClient.asBinder()) {
                 mUiAutomationService.binderDied();
+            } else {
+                throw new IllegalStateException("UiAutomationService " + serviceClient
+                        + " not registered!");
             }
         }
     }
@@ -835,12 +845,10 @@
                 userState.mEnabledServices);
     }
 
-    private void populateTouchExplorationGrantedAccessibilityServicesLocked(
-            UserState userState) {
+    private void populateTouchExplorationGrantedAccessibilityServicesLocked(UserState userState) {
         populateComponentNamesFromSettingLocked(
                 Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
-                userState.mUserId,
-                userState.mTouchExplorationGrantedServices);
+                userState.mUserId, userState.mTouchExplorationGrantedServices);
     }
 
     /**
@@ -889,6 +897,7 @@
             userState.mComponentNameToServiceMap.put(service.mComponentName, service);
             scheduleUpdateInputFilter(userState);
             tryEnableTouchExplorationLocked(service);
+            tryEnableEnhancedWebAccessibilityLocked(service);
         } catch (RemoteException e) {
             /* do nothing */
         }
@@ -911,6 +920,7 @@
         service.dispose();
         scheduleUpdateInputFilter(userState);
         tryDisableTouchExplorationLocked(service);
+        tryDisableEnhancedWebAccessibilityLocked(service);
         return removed;
     }
 
@@ -930,12 +940,13 @@
     private boolean canDispathEventLocked(Service service, AccessibilityEvent event,
             int handledFeedbackTypes) {
 
-        if (!service.canReceiveEvents()) {
+        if (!service.canReceiveEventsLocked()) {
             return false;
         }
 
         if (!event.isImportantForAccessibility()
-                && !service.mIncludeNotImportantViews) {
+                && (service.mFetchFlags
+                        & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) == 0) {
             return false;
         }
 
@@ -1134,7 +1145,8 @@
 
     private void showEnableTouchExplorationDialog(final Service service) {
         String label = service.mResolveInfo.loadLabel(
-                mContext.getPackageManager()).toString();
+
+        mContext.getPackageManager()).toString();
         synchronized (mLock) {
             final UserState state = getCurrentUserStateLocked();
             if (state.mIsTouchExplorationEnabled) {
@@ -1147,35 +1159,35 @@
             mEnableTouchExplorationDialog = new AlertDialog.Builder(mContext)
                 .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setPositiveButton(android.R.string.ok, new OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        // The user allowed the service to toggle touch exploration.
-                        state.mTouchExplorationGrantedServices.add(service.mComponentName);
-                        persistComponentNamesToSettingLocked(
-                                Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
-                                       state.mTouchExplorationGrantedServices, state.mUserId);
-                        // Enable touch exploration.
-                        Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                                Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1,
-                                service.mUserId);
-                    }
-                })
-                .setNegativeButton(android.R.string.cancel, new OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        dialog.dismiss();
-                    }
-                })
-                .setTitle(R.string.enable_explore_by_touch_warning_title)
-                .setMessage(mContext.getString(
-                        R.string.enable_explore_by_touch_warning_message, label))
-                .create();
-            mEnableTouchExplorationDialog.getWindow().setType(
-                    WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-            mEnableTouchExplorationDialog.getWindow().getAttributes().privateFlags
-                    |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
-            mEnableTouchExplorationDialog.setCanceledOnTouchOutside(true);
-            mEnableTouchExplorationDialog.show();
+                     @Override
+                     public void onClick(DialogInterface dialog, int which) {
+                         // The user allowed the service to toggle touch exploration.
+                         state.mTouchExplorationGrantedServices.add(service.mComponentName);
+                         persistComponentNamesToSettingLocked(
+                                 Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
+                                 state.mTouchExplorationGrantedServices, state.mUserId);
+                         // Enable touch exploration.
+                         Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                                 Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1,
+                                 service.mUserId);
+                     }
+                 })
+                 .setNegativeButton(android.R.string.cancel, new OnClickListener() {
+                     @Override
+                     public void onClick(DialogInterface dialog, int which) {
+                         dialog.dismiss();
+                     }
+                 })
+                 .setTitle(R.string.enable_explore_by_touch_warning_title)
+                 .setMessage(mContext.getString(
+                         R.string.enable_explore_by_touch_warning_message, label))
+                 .create();
+             mEnableTouchExplorationDialog.getWindow().setType(
+                     WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+             mEnableTouchExplorationDialog.getWindow().getAttributes().privateFlags
+                     |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
+             mEnableTouchExplorationDialog.setCanceledOnTouchOutside(true);
+             mEnableTouchExplorationDialog.show();
         }
     }
 
@@ -1195,12 +1207,15 @@
         populateInstalledAccessibilityServiceLocked(userState);
         populateEnabledAccessibilityServicesLocked(userState);
         populateTouchExplorationGrantedAccessibilityServicesLocked(userState);
+        populatedEnhancedWebAccessibilityEnabledChangedLocked(userState);
 
         handleTouchExplorationEnabledSettingChangedLocked(userState);
         handleDisplayMagnificationEnabledSettingChangedLocked(userState);
         handleAccessibilityEnabledSettingChangedLocked(userState);
+        handleTouchExplorationGrantedAccessibilityServicesChangedLocked(userState);
 
         performServiceManagementLocked(userState);
+
         scheduleUpdateInputFilter(userState);
         scheduleSendStateToClientsLocked(userState);
     }
@@ -1234,50 +1249,144 @@
 
     private void handleTouchExplorationGrantedAccessibilityServicesChangedLocked(
             UserState userState) {
+        Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0, userState.mUserId);
         final int serviceCount = userState.mServices.size();
         for (int i = 0; i < serviceCount; i++) {
             Service service = userState.mServices.get(i);
-            if (service.mRequestTouchExplorationMode
-                    && userState.mTouchExplorationGrantedServices.contains(
-                            service.mComponentName)) {
-                tryEnableTouchExplorationLocked(service);
-                return;
-            }
-        }
-        if (userState.mIsTouchExplorationEnabled) {
-            Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                    Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0, userState.mUserId);
+            tryEnableTouchExplorationLocked(service);
         }
     }
 
-    private void tryEnableTouchExplorationLocked(final Service service) {
+    private void populatedEnhancedWebAccessibilityEnabledChangedLocked(UserState userState) {
+        userState.mIsEnhancedWebAccessibilityEnabled = Settings.Secure.getIntForUser(
+                mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
+                0, userState.mUserId) == 1;
+    }
+
+    private void tryEnableTouchExplorationLocked(Service service) {
+        if (!service.canReceiveEventsLocked() || !service.mRequestTouchExplorationMode) {
+            return;
+        }
         UserState userState = getUserStateLocked(service.mUserId);
-        if (!userState.mIsTouchExplorationEnabled && service.mRequestTouchExplorationMode
-                && service.canReceiveEvents()) {
-            final boolean canToggleTouchExploration =
-                    userState.mTouchExplorationGrantedServices.contains(service.mComponentName);
-            if (!service.mIsAutomation && !canToggleTouchExploration) {
-                showEnableTouchExplorationDialog(service);
+        if (userState.mIsTouchExplorationEnabled) {
+            return;
+        }
+        // UI test automation service can always enable it.
+        if (service.mIsAutomation) {
+            Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                    Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1, service.mUserId);
+            return;
+        }
+        if (service.mResolveInfo.serviceInfo.applicationInfo.targetSdkVersion
+                <= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            // Up to JB-MR1 we had a white list with services that can enable touch
+            // exploration. When a service is first started we show a dialog to the
+            // use to get a permission to white list the service.
+            if (!userState.mTouchExplorationGrantedServices.contains(service.mComponentName)) {
+                if (mEnableTouchExplorationDialog == null
+                        || (mEnableTouchExplorationDialog != null
+                            && !mEnableTouchExplorationDialog.isShowing())) {
+                    showEnableTouchExplorationDialog(service);
+                }
             } else {
                 Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                        Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1, userState.mUserId);
+                        Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1, service.mUserId);
+            }
+        } else {
+            // Starting in JB-MR2 we request a permission to allow a service to enable
+            // touch exploration and do not care if the service is in the white list.
+            if (mContext.getPackageManager().checkPermission(
+                    android.Manifest.permission.CAN_REQUEST_TOUCH_EXPLORATION_MODE,
+                    service.mComponentName.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
+                Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                        Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1, service.mUserId);
             }
         }
     }
 
     private void tryDisableTouchExplorationLocked(Service service) {
+        if (!service.mRequestTouchExplorationMode) {
+            return;
+        }
         UserState userState = getUserStateLocked(service.mUserId);
-        if (userState.mIsTouchExplorationEnabled) {
-            final int serviceCount = userState.mServices.size();
-            for (int i = 0; i < serviceCount; i++) {
-                Service other = userState.mServices.get(i);
-                if (other != service && other.mRequestTouchExplorationMode) {
-                    return;
+        if (!userState.mIsTouchExplorationEnabled) {
+            return;
+        }
+        final int serviceCount = userState.mServices.size();
+        for (int i = 0; i < serviceCount; i++) {
+            Service other = userState.mServices.get(i);
+            if (other != service) {
+                if (service.mResolveInfo.serviceInfo.applicationInfo.targetSdkVersion
+                        <= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+                    // Up to JB-MR1 we had a white list with services that can enable touch
+                    // exploration. When a service is first started we show a dialog to the
+                    // use to get a permission to white list the service.
+                    if (other.mRequestTouchExplorationMode &&
+                            userState.mTouchExplorationGrantedServices.contains(
+                                    service.mComponentName)) {
+                        // A white-listed service wants touch exploration, do not disable.
+                        return;
+                    }
+                } else {
+                    // Starting in JB-MR2 we request a permission to allow a service to enable
+                    // touch exploration and do not care if the service is in the white list.
+                    if (other.mRequestTouchExplorationMode && (service.mIsAutomation
+                            || mContext.getPackageManager().checkPermission(
+                                    android.Manifest.permission.CAN_REQUEST_TOUCH_EXPLORATION_MODE,
+                                    service.mComponentName.getPackageName())
+                                    == PackageManager.PERMISSION_GRANTED)) {
+                        // A service with permission wants touch exploration, do not disable.
+                        return;
+                    }
                 }
             }
-            Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                    Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0, userState.mUserId);
         }
+        Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0, userState.mUserId);
+    }
+
+    private void tryEnableEnhancedWebAccessibilityLocked(Service service) {
+        if (!service.canReceiveEventsLocked() || !service.mRequestEnhancedWebAccessibility ) {
+            return;
+        }
+        UserState userState = getUserStateLocked(service.mUserId);
+        if (userState.mIsEnhancedWebAccessibilityEnabled) {
+            return;
+        }
+        // Requested and can enabled, do it.
+        if (service.mRequestEnhancedWebAccessibility
+                && canEnabledEnhancedWebAccessibility(service)) {
+            Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                    Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 1, userState.mUserId);
+        }
+    }
+
+    private void tryDisableEnhancedWebAccessibilityLocked(Service service) {
+        if (!service.mRequestEnhancedWebAccessibility) {
+            return;
+        }
+        UserState userState = getUserStateLocked(service.mUserId);
+        if (!userState.mIsEnhancedWebAccessibilityEnabled) {
+            return;
+        }
+        final int serviceCount = userState.mServices.size();
+        for (int i = 0; i < serviceCount; i++) {
+            Service other = userState.mServices.get(i);
+            if (other != service && other.mRequestEnhancedWebAccessibility
+                    && canEnabledEnhancedWebAccessibility(other)) {
+                // One service requests the feature, do not disable.
+                return;
+            }
+        }
+        Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 0, service.mUserId);
+    }
+
+    private boolean canEnabledEnhancedWebAccessibility(Service service) {
+        return (service.mIsAutomation || mContext.getPackageManager().checkPermission(
+                android.Manifest.permission.CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY,
+                service.mComponentName.getPackageName()) == PackageManager.PERMISSION_GRANTED);
     }
 
     @Override
@@ -1402,7 +1511,7 @@
                 } break;
                 case MSG_UPDATE_INPUT_FILTER: {
                     UserState userState = (UserState) msg.obj;
-                    updateInputFilter(userState);                        
+                    updateInputFilter(userState);
                 } break;
             }
         }
@@ -1486,7 +1595,9 @@
 
         boolean mRequestTouchExplorationMode;
 
-        boolean mIncludeNotImportantViews;
+        boolean mRequestEnhancedWebAccessibility;
+
+        int mFetchFlags;
 
         long mNotificationTimeout;
 
@@ -1539,9 +1650,6 @@
             mIsAutomation = isAutomation;
             if (!isAutomation) {
                 mCanRetrieveScreenContent = accessibilityServiceInfo.getCanRetrieveWindowContent();
-                mRequestTouchExplorationMode =
-                    (accessibilityServiceInfo.flags
-                            & AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE) != 0;
                 mIntent = new Intent().setComponent(mComponentName);
                 mIntent.putExtra(Intent.EXTRA_CLIENT_LABEL,
                         com.android.internal.R.string.accessibility_binding_label);
@@ -1565,22 +1673,37 @@
 
             if (mIsAutomation || info.getResolveInfo().serviceInfo.applicationInfo.targetSdkVersion
                     >= Build.VERSION_CODES.JELLY_BEAN) {
-                mIncludeNotImportantViews =
-                    (info.flags & FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0;
+                mFetchFlags |= (info.flags
+                        & AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0 ?
+                                AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS : 0;
             }
 
-            mRequestTouchExplorationMode = (info.flags
-                    & AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE) != 0;
+            mFetchFlags |= (info.flags
+                    & AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS) != 0 ?
+                            AccessibilityNodeInfo.FLAG_REPORT_VIEW_IDS : 0;
+
+            if (mResolveInfo != null) {
+                mRequestTouchExplorationMode = (info.flags
+                            & AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE) != 0;
+                mRequestEnhancedWebAccessibility = (info.flags
+                           & AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY) != 0;
+            }
 
             // If this service is up and running we may have to enable touch
-            // exploration, otherwise this will happen when the service connects.
+            // exploration or enhanced web accessibility, otherwise this will
+            // happen when the service connects.
             synchronized (mLock) {
-                if (canReceiveEvents()) {
+                if (canReceiveEventsLocked()) {
                     if (mRequestTouchExplorationMode) {
                         tryEnableTouchExplorationLocked(this);
                     } else {
                         tryDisableTouchExplorationLocked(this);
                     }
+                    if (mRequestEnhancedWebAccessibility) {
+                        tryEnableEnhancedWebAccessibilityLocked(this);
+                    } else {
+                        tryDisableEnhancedWebAccessibilityLocked(this);
+                    }
                 }
             }
         }
@@ -1617,7 +1740,7 @@
             return false;
         }
 
-        public boolean canReceiveEvents() {
+        public boolean canReceiveEventsLocked() {
             return (mEventTypes != 0 && mFeedbackType != 0 && mService != null);
         }
 
@@ -1664,8 +1787,8 @@
         }
 
         @Override
-        public boolean findAccessibilityNodeInfoByViewId(int accessibilityWindowId,
-                long accessibilityNodeId, int viewId, int interactionId,
+        public boolean findAccessibilityNodeInfosByViewId(int accessibilityWindowId,
+                long accessibilityNodeId, String viewIdResName, int interactionId,
                 IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
                 throws RemoteException {
             final int resolvedWindowId;
@@ -1689,14 +1812,13 @@
                     }
                 }
             }
-            final int flags = (mIncludeNotImportantViews) ?
-                    AccessibilityNodeInfo.INCLUDE_NOT_IMPORTANT_VIEWS : 0;
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
             MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
             try {
-                connection.findAccessibilityNodeInfoByViewId(accessibilityNodeId, viewId,
-                        interactionId, callback, flags, interrogatingPid, interrogatingTid, spec);
+                connection.findAccessibilityNodeInfosByViewId(accessibilityNodeId,
+                        viewIdResName, interactionId, callback, mFetchFlags, interrogatingPid,
+                        interrogatingTid, spec);
                 return true;
             } catch (RemoteException re) {
                 if (DEBUG) {
@@ -1735,14 +1857,13 @@
                     }
                 }
             }
-            final int flags = (mIncludeNotImportantViews) ?
-                    AccessibilityNodeInfo.INCLUDE_NOT_IMPORTANT_VIEWS : 0;
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
             MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
             try {
                 connection.findAccessibilityNodeInfosByText(accessibilityNodeId, text,
-                        interactionId, callback, flags, interrogatingPid, interrogatingTid, spec);
+                        interactionId, callback, mFetchFlags, interrogatingPid, interrogatingTid,
+                        spec);
                 return true;
             } catch (RemoteException re) {
                 if (DEBUG) {
@@ -1781,15 +1902,13 @@
                     }
                 }
             }
-            final int allFlags = flags | ((mIncludeNotImportantViews) ?
-                    AccessibilityNodeInfo.INCLUDE_NOT_IMPORTANT_VIEWS : 0);
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
             MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
             try {
                 connection.findAccessibilityNodeInfoByAccessibilityId(accessibilityNodeId,
-                        interactionId, callback, allFlags, interrogatingPid, interrogatingTid,
-                        spec);
+                        interactionId, callback, mFetchFlags | flags, interrogatingPid,
+                        interrogatingTid, spec);
                 return true;
             } catch (RemoteException re) {
                 if (DEBUG) {
@@ -1828,14 +1947,12 @@
                     }
                 }
             }
-            final int flags = (mIncludeNotImportantViews) ?
-                    AccessibilityNodeInfo.INCLUDE_NOT_IMPORTANT_VIEWS : 0;
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
             MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
             try {
                 connection.findFocus(accessibilityNodeId, focusType, interactionId, callback,
-                        flags, interrogatingPid, interrogatingTid, spec);
+                        mFetchFlags, interrogatingPid, interrogatingTid, spec);
                 return true;
             } catch (RemoteException re) {
                 if (DEBUG) {
@@ -1874,14 +1991,12 @@
                     }
                 }
             }
-            final int flags = (mIncludeNotImportantViews) ?
-                    AccessibilityNodeInfo.INCLUDE_NOT_IMPORTANT_VIEWS : 0;
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
             MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
             try {
                 connection.focusSearch(accessibilityNodeId, direction, interactionId, callback,
-                        flags, interrogatingPid, interrogatingTid, spec);
+                        mFetchFlags, interrogatingPid, interrogatingTid, spec);
                 return true;
             } catch (RemoteException re) {
                 if (DEBUG) {
@@ -1920,13 +2035,11 @@
                     }
                 }
             }
-            final int flags = (mIncludeNotImportantViews) ?
-                    AccessibilityNodeInfo.INCLUDE_NOT_IMPORTANT_VIEWS : 0;
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
             try {
                 connection.performAccessibilityAction(accessibilityNodeId, action, arguments,
-                        interactionId, callback, flags, interrogatingPid, interrogatingTid);
+                        interactionId, callback, mFetchFlags, interrogatingPid, interrogatingTid);
             } catch (RemoteException re) {
                 if (DEBUG) {
                     Slog.e(LOG_TAG, "Error calling performAccessibilityAction()");
@@ -2257,7 +2370,11 @@
             | AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT
             | AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT
             | AccessibilityNodeInfo.ACTION_SCROLL_FORWARD
-            | AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD;
+            | AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD
+            | AccessibilityNodeInfo.ACTION_COPY
+            | AccessibilityNodeInfo.ACTION_PASTE
+            | AccessibilityNodeInfo.ACTION_CUT
+            | AccessibilityNodeInfo.ACTION_SET_SELECTION;
 
         private static final int RETRIEVAL_ALLOWING_EVENT_TYPES =
             AccessibilityEvent.TYPE_VIEW_CLICKED
@@ -2494,6 +2611,7 @@
 
         public boolean mIsAccessibilityEnabled;
         public boolean mIsTouchExplorationEnabled;
+        public boolean mIsEnhancedWebAccessibilityEnabled;
         public boolean mIsDisplayMagnificationEnabled;
 
         public UserState(int userId) {
@@ -2505,15 +2623,17 @@
         public int mUserId = UserHandle.USER_NULL;
         public boolean mIsAccessibilityEnabled;
         public boolean mIsTouchExplorationEnabled;
+        public boolean mIsEnhancedWebAccessibilityEnabled;
         public boolean mIsDisplayMagnificationEnabled;
         public final Set<ComponentName> mEnabledServices = new HashSet<ComponentName>();
         public final Set<ComponentName> mTouchExplorationGrantedServices =
                 new HashSet<ComponentName>();
 
-        public void initialize(int userId, UserState userState) {
-            mUserId = userId;
+        public void initialize(UserState userState) {
+            mUserId = userState.mUserId;
             mIsAccessibilityEnabled = userState.mIsAccessibilityEnabled;
             mIsTouchExplorationEnabled = userState.mIsTouchExplorationEnabled;
+            mIsEnhancedWebAccessibilityEnabled = userState.mIsEnhancedWebAccessibilityEnabled;
             mIsDisplayMagnificationEnabled = userState.mIsDisplayMagnificationEnabled;
             mEnabledServices.clear();
             mEnabledServices.addAll(userState.mEnabledServices);
@@ -2524,6 +2644,7 @@
         public void applyTo(UserState userState) {
             userState.mIsAccessibilityEnabled = mIsAccessibilityEnabled;
             userState.mIsTouchExplorationEnabled = mIsTouchExplorationEnabled;
+            userState.mIsEnhancedWebAccessibilityEnabled = mIsEnhancedWebAccessibilityEnabled;
             userState.mIsDisplayMagnificationEnabled = mIsDisplayMagnificationEnabled;
             userState.mEnabledServices.clear();
             userState.mEnabledServices.addAll(mEnabledServices);
@@ -2535,6 +2656,7 @@
             mUserId = UserHandle.USER_NULL;
             mIsAccessibilityEnabled = false;
             mIsTouchExplorationEnabled = false;
+            mIsEnhancedWebAccessibilityEnabled = false;
             mIsDisplayMagnificationEnabled = false;
             mEnabledServices.clear();
             mTouchExplorationGrantedServices.clear();
@@ -2558,6 +2680,9 @@
         private final Uri mTouchExplorationGrantedAccessibilityServicesUri = Settings.Secure
                 .getUriFor(Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES);
 
+        private final Uri mAccessibilityScriptInjectionUri = Settings.Secure
+                .getUriFor(Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION);
+
         public AccessibilityContentObserver(Handler handler) {
             super(handler);
         }
@@ -2574,6 +2699,8 @@
             contentResolver.registerContentObserver(
                     mTouchExplorationGrantedAccessibilityServicesUri,
                     false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(mAccessibilityScriptInjectionUri,
+                    false, this, UserHandle.USER_ALL);
         }
 
         @Override
@@ -2627,6 +2754,14 @@
                         handleTouchExplorationGrantedAccessibilityServicesChangedLocked(userState);
                     }
                 }
+            } else if (mAccessibilityScriptInjectionUri.equals(uri)) {
+                synchronized (mLock) {
+                    // We will update when the automation service dies.
+                    if (mUiAutomationService == null) {
+                        UserState userState = getCurrentUserStateLocked();
+                        populatedEnhancedWebAccessibilityEnabledChangedLocked(userState);
+                    }
+                }
             }
         }
     }
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index d8e199b..7b6e79e 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -18,6 +18,7 @@
 
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 
+import android.app.AppOpsManager;
 import com.android.internal.R;
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.internal.os.ProcessStats;
@@ -51,6 +52,7 @@
 import android.app.IServiceConnection;
 import android.app.IStopUserCallback;
 import android.app.IThumbnailReceiver;
+import android.app.IUiAutomationConnection;
 import android.app.IUserSwitchObserver;
 import android.app.Instrumentation;
 import android.app.Notification;
@@ -162,7 +164,7 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 
-public final class ActivityManagerService extends ActivityManagerNative
+public final class ActivityManagerService  extends ActivityManagerNative
         implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {
     private static final String USER_DATA_DIR = "/data/user/";
     static final String TAG = "ActivityManager";
@@ -194,7 +196,7 @@
     static final boolean DEBUG_POWER_QUICK = DEBUG_POWER || false;
     static final boolean DEBUG_MU = localLOGV || false;
     static final boolean DEBUG_IMMERSIVE = localLOGV || false;
-    static final boolean VALIDATE_TOKENS = false;
+    static final boolean VALIDATE_TOKENS = true;
     static final boolean SHOW_ACTIVITY_START_TIME = true;
     
     // Control over CPU and battery monitoring.
@@ -262,6 +264,9 @@
     // Maximum number of users we allow to be running at a time.
     static final int MAX_RUNNING_USERS = 3;
 
+    // How long to wait in getTopActivityExtras for the activity to respond with the result.
+    static final int PENDING_ACTIVITY_RESULT_TIMEOUT = 2*2000;
+
     static final int MY_PID = Process.myPid();
     
     static final String[] EMPTY_STRING_ARRAY = new String[0];
@@ -319,11 +324,32 @@
      * Activity we have told the window manager to have key focus.
      */
     ActivityRecord mFocusedActivity = null;
+
     /**
      * List of intents that were used to start the most recent tasks.
      */
     final ArrayList<TaskRecord> mRecentTasks = new ArrayList<TaskRecord>();
 
+    public class PendingActivityExtras extends Binder implements Runnable {
+        public final ActivityRecord activity;
+        public boolean haveResult = false;
+        public Bundle result = null;
+        public PendingActivityExtras(ActivityRecord _activity) {
+            activity = _activity;
+        }
+        @Override
+        public void run() {
+            Slog.w(TAG, "getTopActivityExtras failed: timeout retrieving from " + activity);
+            synchronized (this) {
+                haveResult = true;
+                notifyAll();
+            }
+        }
+    }
+
+    final ArrayList<PendingActivityExtras> mPendingActivityExtras
+            = new ArrayList<PendingActivityExtras>();
+
     /**
      * Process management.
      */
@@ -599,7 +625,6 @@
     /**
      * Thread-local storage used to carry caller permissions over through
      * indirect content-provider access.
-     * @see #ActivityManagerService.openContentUri()
      */
     private class Identity {
         public int pid;
@@ -806,18 +831,6 @@
             = new ArrayList<ProcessChangeItem>();
 
     /**
-     * Callback of last caller to {@link #requestPss}.
-     */
-    Runnable mRequestPssCallback;
-
-    /**
-     * Remaining processes for which we are waiting results from the last
-     * call to {@link #requestPss}.
-     */
-    final ArrayList<ProcessRecord> mRequestPssList
-            = new ArrayList<ProcessRecord>();
-    
-    /**
      * Runtime statistics collection thread.  This object's lock is used to
      * protect all related state.
      */
@@ -980,7 +993,7 @@
                                 | Intent.FLAG_RECEIVER_FOREGROUND);
                     }
                     broadcastIntentLocked(null, null, intent,
-                            null, null, 0, null, null, null,
+                            null, null, 0, null, null, null, AppOpsManager.OP_NONE,
                             false, false, MY_PID, Process.SYSTEM_UID, 0 /* TODO: Verify */);
 
                     if (mShowDialogs) {
@@ -1206,7 +1219,7 @@
                     
                     try {
                         int[] outId = new int[1];
-                        inm.enqueueNotificationWithTag("android", null,
+                        inm.enqueueNotificationWithTag("android", "android", null,
                                 R.string.heavy_weight_notification,
                                 notification, outId, root.userId);
                     } catch (RuntimeException e) {
@@ -2284,7 +2297,7 @@
             if (app == null || app.instrumentationClass == null) {
                 intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
                 mMainStack.startActivityLocked(null, intent, null, aInfo,
-                        null, null, 0, 0, 0, 0, null, false, null);
+                        null, null, 0, 0, 0, null, 0, null, false, null);
             }
         }
 
@@ -2362,7 +2375,7 @@
                     intent.setComponent(new ComponentName(
                             ri.activityInfo.packageName, ri.activityInfo.name));
                     mMainStack.startActivityLocked(null, intent, null, ri.activityInfo,
-                            null, null, 0, 0, 0, 0, null, false, null);
+                            null, null, 0, 0, 0, null, 0, null, false, null);
                 }
             }
         }
@@ -2497,27 +2510,28 @@
         mPendingActivityLaunches.clear();
     }
 
-    public final int startActivity(IApplicationThread caller,
+    public final int startActivity(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo,
             String resultWho, int requestCode, int startFlags,
             String profileFile, ParcelFileDescriptor profileFd, Bundle options) {
-        return startActivityAsUser(caller, intent, resolvedType, resultTo, resultWho, requestCode,
+        return startActivityAsUser(caller, callingPackage, intent, resolvedType, resultTo,
+                resultWho, requestCode,
                 startFlags, profileFile, profileFd, options, UserHandle.getCallingUserId());
     }
 
-    public final int startActivityAsUser(IApplicationThread caller,
+    public final int startActivityAsUser(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo,
             String resultWho, int requestCode, int startFlags,
             String profileFile, ParcelFileDescriptor profileFd, Bundle options, int userId) {
         enforceNotIsolatedCaller("startActivity");
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId,
                 false, true, "startActivity", null);
-        return mMainStack.startActivityMayWait(caller, -1, intent, resolvedType,
+        return mMainStack.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType,
                 resultTo, resultWho, requestCode, startFlags, profileFile, profileFd,
                 null, null, options, userId);
     }
 
-    public final WaitResult startActivityAndWait(IApplicationThread caller,
+    public final WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo,
             String resultWho, int requestCode, int startFlags, String profileFile,
             ParcelFileDescriptor profileFd, Bundle options, int userId) {
@@ -2525,20 +2539,20 @@
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId,
                 false, true, "startActivityAndWait", null);
         WaitResult res = new WaitResult();
-        mMainStack.startActivityMayWait(caller, -1, intent, resolvedType,
+        mMainStack.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType,
                 resultTo, resultWho, requestCode, startFlags, profileFile, profileFd,
                 res, null, options, UserHandle.getCallingUserId());
         return res;
     }
 
-    public final int startActivityWithConfig(IApplicationThread caller,
+    public final int startActivityWithConfig(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo,
             String resultWho, int requestCode, int startFlags, Configuration config,
             Bundle options, int userId) {
         enforceNotIsolatedCaller("startActivityWithConfig");
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId,
                 false, true, "startActivityWithConfig", null);
-        int ret = mMainStack.startActivityMayWait(caller, -1, intent, resolvedType,
+        int ret = mMainStack.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType,
                 resultTo, resultWho, requestCode, startFlags,
                 null, null, null, config, options, userId);
         return ret;
@@ -2659,7 +2673,7 @@
             final long origId = Binder.clearCallingIdentity();
             int res = mMainStack.startActivityLocked(r.app.thread, intent,
                     r.resolvedType, aInfo, resultTo != null ? resultTo.appToken : null,
-                    resultWho, requestCode, -1, r.launchedFromUid, 0,
+                    resultWho, requestCode, -1, r.launchedFromUid, r.launchedFromPackage, 0,
                     options, false, null);
             Binder.restoreCallingIdentity(origId);
 
@@ -2671,38 +2685,38 @@
         }
     }
 
-    final int startActivityInPackage(int uid,
+    final int startActivityInPackage(int uid, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo,
             String resultWho, int requestCode, int startFlags, Bundle options, int userId) {
 
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId,
                 false, true, "startActivityInPackage", null);
 
-        int ret = mMainStack.startActivityMayWait(null, uid, intent, resolvedType,
+        int ret = mMainStack.startActivityMayWait(null, uid, callingPackage, intent, resolvedType,
                 resultTo, resultWho, requestCode, startFlags,
                 null, null, null, null, options, userId);
         return ret;
     }
 
-    public final int startActivities(IApplicationThread caller,
+    public final int startActivities(IApplicationThread caller, String callingPackage,
             Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle options,
             int userId) {
         enforceNotIsolatedCaller("startActivities");
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId,
                 false, true, "startActivity", null);
-        int ret = mMainStack.startActivities(caller, -1, intents, resolvedTypes, resultTo,
-                options, userId);
+        int ret = mMainStack.startActivities(caller, -1, callingPackage, intents,
+                resolvedTypes, resultTo, options, userId);
         return ret;
     }
 
-    final int startActivitiesInPackage(int uid,
+    final int startActivitiesInPackage(int uid, String callingPackage,
             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
             Bundle options, int userId) {
 
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId,
                 false, true, "startActivityInPackage", null);
-        int ret = mMainStack.startActivities(null, uid, intents, resolvedTypes, resultTo,
-                options, userId);
+        int ret = mMainStack.startActivities(null, uid, callingPackage, intents, resolvedTypes,
+                resultTo, options, userId);
         return ret;
     }
 
@@ -3712,7 +3726,7 @@
         }
 
         broadcastIntentLocked(null, null, intent, null,
-                null, 0, null, null, null, false, false, -1,
+                null, 0, null, null, null, AppOpsManager.OP_NONE, false, false, -1,
                 Process.SYSTEM_UID, UserHandle.USER_ALL);
     }
 
@@ -3775,7 +3789,7 @@
         intent.putExtra(Intent.EXTRA_UID, uid);
         intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(uid));
         broadcastIntentLocked(null, null, intent,
-                null, null, 0, null, null, null,
+                null, null, 0, null, null, null, AppOpsManager.OP_NONE,
                 false, false,
                 MY_PID, Process.SYSTEM_UID, UserHandle.getUserId(uid));
     }
@@ -3787,7 +3801,7 @@
                 | Intent.FLAG_RECEIVER_FOREGROUND);
         intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
         broadcastIntentLocked(null, null, intent,
-                null, null, 0, null, null, null,
+                null, null, 0, null, null, null, AppOpsManager.OP_NONE,
                 false, false,
                 MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
     }
@@ -4259,8 +4273,9 @@
             }
             thread.bindApplication(processName, appInfo, providers,
                     app.instrumentationClass, profileFile, profileFd, profileAutoStop,
-                    app.instrumentationArguments, app.instrumentationWatcher, testMode,
-                    enableOpenGlTrace, isRestrictedBackupMode || !normalMode, app.persistent,
+                    app.instrumentationArguments, app.instrumentationWatcher,
+                    app.instrumentationUiAutomationConnection, testMode, enableOpenGlTrace,
+                    isRestrictedBackupMode || !normalMode, app.persistent,
                     new Configuration(mConfiguration), app.compat, getCommonServicesLocked(),
                     mCoreSettingsObserver.getCoreSettingsLocked());
             updateLruProcessLocked(app, false);
@@ -4465,7 +4480,8 @@
                         broadcastIntentLocked(null, null, intent,
                                 null, null, 0, null, null,
                                 android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
-                                false, false, MY_PID, Process.SYSTEM_UID, userId);
+                                AppOpsManager.OP_NONE, false, false, MY_PID, Process.SYSTEM_UID,
+                                userId);
                     }
                 }
             }
@@ -6717,7 +6733,6 @@
 
     /**
      * Drop a content provider from a ProcessRecord's bookkeeping
-     * @param cpr
      */
     public void removeContentProvider(IBinder connection, boolean stable) {
         enforceNotIsolatedCaller("removeContentProvider");
@@ -7400,9 +7415,7 @@
     }
 
     public void requestBugReport() {
-        // No permission check because this can't do anything harmful --
-        // it will just eventually cause the user to be presented with
-        // a UI to select where the bug report goes.
+        enforceCallingPermission(android.Manifest.permission.DUMP, "requestBugReport");
         SystemProperties.set("ctl.start", "bugreport");
     }
 
@@ -7451,6 +7464,63 @@
         return KEY_DISPATCHING_TIMEOUT;
     }
 
+    public Bundle getTopActivityExtras(int requestType) {
+        enforceCallingPermission(android.Manifest.permission.GET_TOP_ACTIVITY_INFO,
+                "getTopActivityExtras()");
+        PendingActivityExtras pae;
+        Bundle extras = new Bundle();
+        synchronized (this) {
+            ActivityRecord activity = mMainStack.mResumedActivity;
+            if (activity == null) {
+                Slog.w(TAG, "getTopActivityExtras failed: no resumed activity");
+                return null;
+            }
+            extras.putString(Intent.EXTRA_ASSIST_PACKAGE, activity.packageName);
+            if (activity.app == null || activity.app.thread == null) {
+                Slog.w(TAG, "getTopActivityExtras failed: no process for " + activity);
+                return extras;
+            }
+            if (activity.app.pid == Binder.getCallingPid()) {
+                Slog.w(TAG, "getTopActivityExtras failed: request process same as " + activity);
+                return extras;
+            }
+            pae = new PendingActivityExtras(activity);
+            try {
+                activity.app.thread.requestActivityExtras(activity.appToken, pae, requestType);
+                mPendingActivityExtras.add(pae);
+                mHandler.postDelayed(pae, PENDING_ACTIVITY_RESULT_TIMEOUT);
+            } catch (RemoteException e) {
+                Slog.w(TAG, "getTopActivityExtras failed: crash calling " + activity);
+                return extras;
+            }
+        }
+        synchronized (pae) {
+            while (!pae.haveResult) {
+                try {
+                    pae.wait();
+                } catch (InterruptedException e) {
+                }
+            }
+            if (pae.result != null) {
+                extras.putBundle(Intent.EXTRA_ASSIST_CONTEXT, pae.result);
+            }
+        }
+        synchronized (this) {
+            mPendingActivityExtras.remove(pae);
+            mHandler.removeCallbacks(pae);
+        }
+        return extras;
+    }
+
+    public void reportTopActivityExtras(IBinder token, Bundle extras) {
+        PendingActivityExtras pae = (PendingActivityExtras)token;
+        synchronized (pae) {
+            pae.result = extras;
+            pae.haveResult = true;
+            pae.notifyAll();
+        }
+    }
+
     public void registerProcessObserver(IProcessObserver observer) {
         enforceCallingPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER,
                 "registerProcessObserver()");
@@ -7841,7 +7911,8 @@
                             Slog.i(TAG, "Sending system update to " + intent.getComponent()
                                     + " for user " + users[j]);
                             broadcastIntentLocked(null, null, intent, null, finisher,
-                                    0, null, null, null, true, false, MY_PID, Process.SYSTEM_UID,
+                                    0, null, null, null, AppOpsManager.OP_NONE,
+                                    true, false, MY_PID, Process.SYSTEM_UID,
                                     users[j]);
                             if (finisher != null) {
                                 mWaitingUpdate = true;
@@ -7974,7 +8045,7 @@
                         | Intent.FLAG_RECEIVER_FOREGROUND);
                 intent.putExtra(Intent.EXTRA_USER_HANDLE, mCurrentUserId);
                 broadcastIntentLocked(null, null, intent,
-                        null, null, 0, null, null, null,
+                        null, null, 0, null, null, null, AppOpsManager.OP_NONE,
                         false, false, MY_PID, Process.SYSTEM_UID, mCurrentUserId);
                 intent = new Intent(Intent.ACTION_USER_STARTING);
                 intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
@@ -7987,7 +8058,7 @@
                                     throws RemoteException {
                             }
                         }, 0, null, null,
-                        android.Manifest.permission.INTERACT_ACROSS_USERS,
+                        android.Manifest.permission.INTERACT_ACROSS_USERS, AppOpsManager.OP_NONE,
                         true, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
             } finally {
                 Binder.restoreCallingIdentity(ident);
@@ -11482,8 +11553,8 @@
                     Intent intent = (Intent)allSticky.get(i);
                     BroadcastQueue queue = broadcastQueueForIntent(intent);
                     BroadcastRecord r = new BroadcastRecord(queue, intent, null,
-                            null, -1, -1, null, receivers, null, 0, null, null,
-                            false, true, true, -1);
+                            null, -1, -1, null, AppOpsManager.OP_NONE, receivers, null, 0,
+                            null, null, false, true, true, -1);
                     queue.enqueueParallelBroadcastLocked(r);
                     queue.scheduleBroadcastsLocked();
                 }
@@ -11632,7 +11703,7 @@
     private final int broadcastIntentLocked(ProcessRecord callerApp,
             String callerPackage, Intent intent, String resolvedType,
             IIntentReceiver resultTo, int resultCode, String resultData,
-            Bundle map, String requiredPermission,
+            Bundle map, String requiredPermission, int appOp,
             boolean ordered, boolean sticky, int callingPid, int callingUid,
             int userId) {
         intent = new Intent(intent);
@@ -11878,7 +11949,7 @@
             // components to be launched.
             final BroadcastQueue queue = broadcastQueueForIntent(intent);
             BroadcastRecord r = new BroadcastRecord(queue, intent, callerApp,
-                    callerPackage, callingPid, callingUid, requiredPermission,
+                    callerPackage, callingPid, callingUid, requiredPermission, appOp,
                     registeredReceivers, resultTo, resultCode, resultData, map,
                     ordered, sticky, false, userId);
             if (DEBUG_BROADCAST) Slog.v(
@@ -11968,7 +12039,7 @@
                 || resultTo != null) {
             BroadcastQueue queue = broadcastQueueForIntent(intent);
             BroadcastRecord r = new BroadcastRecord(queue, intent, callerApp,
-                    callerPackage, callingPid, callingUid, requiredPermission,
+                    callerPackage, callingPid, callingUid, requiredPermission, appOp,
                     receivers, resultTo, resultCode, resultData, map, ordered,
                     sticky, false, userId);
             if (DEBUG_BROADCAST) Slog.v(
@@ -12020,7 +12091,7 @@
     public final int broadcastIntent(IApplicationThread caller,
             Intent intent, String resolvedType, IIntentReceiver resultTo,
             int resultCode, String resultData, Bundle map,
-            String requiredPermission, boolean serialized, boolean sticky, int userId) {
+            String requiredPermission, int appOp, boolean serialized, boolean sticky, int userId) {
         enforceNotIsolatedCaller("broadcastIntent");
         synchronized(this) {
             intent = verifyBroadcastLocked(intent);
@@ -12032,7 +12103,7 @@
             int res = broadcastIntentLocked(callerApp,
                     callerApp != null ? callerApp.info.packageName : null,
                     intent, resolvedType, resultTo,
-                    resultCode, resultData, map, requiredPermission, serialized, sticky,
+                    resultCode, resultData, map, requiredPermission, appOp, serialized, sticky,
                     callingPid, callingUid, userId);
             Binder.restoreCallingIdentity(origId);
             return res;
@@ -12049,7 +12120,7 @@
             final long origId = Binder.clearCallingIdentity();
             int res = broadcastIntentLocked(null, packageName, intent, resolvedType,
                     resultTo, resultCode, resultData, map, requiredPermission,
-                    serialized, sticky, -1, uid, userId);
+                    AppOpsManager.OP_NONE, serialized, sticky, -1, uid, userId);
             Binder.restoreCallingIdentity(origId);
             return res;
         }
@@ -12147,7 +12218,8 @@
 
     public boolean startInstrumentation(ComponentName className,
             String profileFile, int flags, Bundle arguments,
-            IInstrumentationWatcher watcher, int userId) {
+            IInstrumentationWatcher watcher, IUiAutomationConnection uiAutomationConnection,
+            int userId) {
         enforceNotIsolatedCaller("startInstrumentation");
         userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
                 userId, false, true, "startInstrumentation", null);
@@ -12201,6 +12273,7 @@
             app.instrumentationProfileFile = profileFile;
             app.instrumentationArguments = arguments;
             app.instrumentationWatcher = watcher;
+            app.instrumentationUiAutomationConnection = uiAutomationConnection;
             app.instrumentationResultClass = className;
             Binder.restoreCallingIdentity(origId);
         }
@@ -12243,7 +12316,15 @@
             } catch (RemoteException e) {
             }
         }
+        if (app.instrumentationUiAutomationConnection != null) {
+            try {
+                app.instrumentationUiAutomationConnection.shutdown();
+            } catch (RemoteException re) {
+                /* ignore */
+            }
+        }
         app.instrumentationWatcher = null;
+        app.instrumentationUiAutomationConnection = null;
         app.instrumentationClass = null;
         app.instrumentationInfo = null;
         app.instrumentationProfileFile = null;
@@ -12425,13 +12506,14 @@
                         | Intent.FLAG_RECEIVER_REPLACE_PENDING
                         | Intent.FLAG_RECEIVER_FOREGROUND);
                 broadcastIntentLocked(null, null, intent, null, null, 0, null, null,
-                        null, false, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
+                        null, AppOpsManager.OP_NONE, false, false, MY_PID,
+                        Process.SYSTEM_UID, UserHandle.USER_ALL);
                 if ((changes&ActivityInfo.CONFIG_LOCALE) != 0) {
                     intent = new Intent(Intent.ACTION_LOCALE_CHANGED);
                     intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
                     broadcastIntentLocked(null, null, intent,
-                            null, null, 0, null, null,
-                            null, false, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
+                            null, null, 0, null, null, null, AppOpsManager.OP_NONE,
+                            false, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
                 }
             }
         }
@@ -12572,7 +12654,8 @@
                                 destIntent.getComponent(), 0, srec.userId);
                         int res = mMainStack.startActivityLocked(srec.app.thread, destIntent,
                                 null, aInfo, parent.appToken, null,
-                                0, -1, parent.launchedFromUid, 0, null, true, null);
+                                0, -1, parent.launchedFromUid, parent.launchedFromPackage,
+                                0, null, true, null);
                         foundParentInTask = res == ActivityManager.START_SUCCESS;
                     } catch (RemoteException e) {
                         foundParentInTask = false;
@@ -12594,6 +12677,14 @@
         return srec.launchedFromUid;
     }
 
+    public String getLaunchedFromPackage(IBinder activityToken) {
+        ActivityRecord srec = ActivityRecord.forToken(activityToken);
+        if (srec == null) {
+            return null;
+        }
+        return srec.launchedFromPackage;
+    }
+
     // =========================================================
     // LIFETIME MANAGEMENT
     // =========================================================
@@ -14266,7 +14357,7 @@
                             | Intent.FLAG_RECEIVER_FOREGROUND);
                     intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
                     broadcastIntentLocked(null, null, intent,
-                            null, null, 0, null, null, null,
+                            null, null, 0, null, null, null, AppOpsManager.OP_NONE,
                             false, false, MY_PID, Process.SYSTEM_UID, userId);
                 }
 
@@ -14281,7 +14372,8 @@
                                             boolean sticky, int sendingUser) {
                                         userInitialized(uss, userId);
                                     }
-                                }, 0, null, null, null, true, false, MY_PID, Process.SYSTEM_UID,
+                                }, 0, null, null, null, AppOpsManager.OP_NONE,
+                                true, false, MY_PID, Process.SYSTEM_UID,
                                 userId);
                         uss.initializing = true;
                     } else {
@@ -14309,7 +14401,7 @@
                                         throws RemoteException {
                                 }
                             }, 0, null, null,
-                            android.Manifest.permission.INTERACT_ACROSS_USERS,
+                            android.Manifest.permission.INTERACT_ACROSS_USERS, AppOpsManager.OP_NONE,
                             true, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
                 }
             }
@@ -14330,7 +14422,7 @@
                         | Intent.FLAG_RECEIVER_FOREGROUND);
                 intent.putExtra(Intent.EXTRA_USER_HANDLE, oldUserId);
                 broadcastIntentLocked(null, null, intent,
-                        null, null, 0, null, null, null,
+                        null, null, 0, null, null, null, AppOpsManager.OP_NONE,
                         false, false, MY_PID, Process.SYSTEM_UID, oldUserId);
             }
             if (newUserId >= 0) {
@@ -14339,7 +14431,7 @@
                         | Intent.FLAG_RECEIVER_FOREGROUND);
                 intent.putExtra(Intent.EXTRA_USER_HANDLE, newUserId);
                 broadcastIntentLocked(null, null, intent,
-                        null, null, 0, null, null, null,
+                        null, null, 0, null, null, null, AppOpsManager.OP_NONE,
                         false, false, MY_PID, Process.SYSTEM_UID, newUserId);
                 intent = new Intent(Intent.ACTION_USER_SWITCHED);
                 intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
@@ -14347,7 +14439,7 @@
                 intent.putExtra(Intent.EXTRA_USER_HANDLE, newUserId);
                 broadcastIntentLocked(null, null, intent,
                         null, null, 0, null, null,
-                        android.Manifest.permission.MANAGE_USERS,
+                        android.Manifest.permission.MANAGE_USERS, AppOpsManager.OP_NONE,
                         false, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
             }
         } finally {
@@ -14452,7 +14544,7 @@
                 intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
                 broadcastIntentLocked(null, null, intent,
                         null, null, 0, null, null,
-                        android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
+                        android.Manifest.permission.RECEIVE_BOOT_COMPLETED, AppOpsManager.OP_NONE,
                         false, false, MY_PID, Process.SYSTEM_UID, userId);
             }
             int num = mUserLru.size();
@@ -14568,14 +14660,14 @@
                             uss.mState = UserStartedState.STATE_SHUTDOWN;
                         }
                         broadcastIntentLocked(null, null, shutdownIntent,
-                                null, shutdownReceiver, 0, null, null, null,
+                                null, shutdownReceiver, 0, null, null, null, AppOpsManager.OP_NONE,
                                 true, false, MY_PID, Process.SYSTEM_UID, userId);
                     }
                 };
                 // Kick things off.
                 broadcastIntentLocked(null, null, stoppingIntent,
                         null, stoppingReceiver, 0, null, null,
-                        android.Manifest.permission.INTERACT_ACROSS_USERS,
+                        android.Manifest.permission.INTERACT_ACROSS_USERS, AppOpsManager.OP_NONE,
                         true, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
             } finally {
                 Binder.restoreCallingIdentity(ident);
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index 749dc66..ba2e47a 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -59,6 +59,7 @@
     final IApplicationToken.Stub appToken; // window manager token
     final ActivityInfo info; // all about me
     final int launchedFromUid; // always the uid who started the activity.
+    final String launchedFromPackage; // always the package who started the activity.
     final int userId;          // Which user is this running for?
     final Intent intent;    // the original intent that generated us
     final ComponentName realActivity;  // the intent component, or target of an alias.
@@ -123,6 +124,8 @@
     boolean frozenBeforeDestroy;// has been frozen but not yet destroyed.
     boolean immersive;      // immersive mode (don't interrupt if possible)
     boolean forceNewConfig; // force re-create with new config next time
+    int launchCount;        // count of launches since last state
+    long lastLaunchTime;    // time of last lauch of this activity
 
     String stringName;      // for caching of toString().
     
@@ -133,6 +136,7 @@
         pw.print(prefix); pw.print("packageName="); pw.print(packageName);
                 pw.print(" processName="); pw.println(processName);
         pw.print(prefix); pw.print("launchedFromUid="); pw.print(launchedFromUid);
+                pw.print(" launchedFromPackage="); pw.println(launchedFromPackage);
                 pw.print(" userId="); pw.println(userId);
         pw.print(prefix); pw.print("app="); pw.println(app);
         pw.print(prefix); pw.println(intent.toInsecureStringWithClip());
@@ -201,7 +205,12 @@
             }
         }
         pw.print(prefix); pw.print("launchFailed="); pw.print(launchFailed);
-                pw.print(" haveState="); pw.print(haveState);
+                pw.print(" launchCount="); pw.print(launchCount);
+                pw.print(" lastLaunchTime=");
+                if (lastLaunchTime == 0) pw.print("0");
+                else TimeUtils.formatDuration(lastLaunchTime, now, pw);
+                pw.println();
+        pw.print(prefix); pw.print(" haveState="); pw.print(haveState);
                 pw.print(" icicle="); pw.println(icicle);
         pw.print(prefix); pw.print("state="); pw.print(state);
                 pw.print(" stopped="); pw.print(stopped);
@@ -318,7 +327,7 @@
     }
 
     ActivityRecord(ActivityManagerService _service, ActivityStack _stack, ProcessRecord _caller,
-            int _launchedFromUid, Intent _intent, String _resolvedType,
+            int _launchedFromUid, String _launchedFromPackage, Intent _intent, String _resolvedType,
             ActivityInfo aInfo, Configuration _configuration,
             ActivityRecord _resultTo, String _resultWho, int _reqCode,
             boolean _componentSpecified) {
@@ -327,6 +336,7 @@
         appToken = new Token(this);
         info = aInfo;
         launchedFromUid = _launchedFromUid;
+        launchedFromPackage = _launchedFromPackage;
         userId = UserHandle.getUserId(aInfo.applicationInfo.uid);
         intent = _intent;
         shortComponentName = _intent.getComponent().flattenToShortString();
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index c1b10cf..e164d0e 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -22,6 +22,7 @@
 import com.android.internal.app.HeavyWeightSwitcherActivity;
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.server.am.ActivityManagerService.PendingActivityLaunch;
+import com.android.server.am.ActivityRecord.Token;
 import com.android.server.wm.AppTransition;
 
 import android.app.Activity;
@@ -88,6 +89,7 @@
     static final boolean DEBUG_STATES = false;
     static final boolean DEBUG_ADD_REMOVE = false;
     static final boolean DEBUG_SAVED_STATE = false;
+    static final boolean DEBUG_APP = false;
 
     static final boolean VALIDATE_TOKENS = ActivityManagerService.VALIDATE_TOKENS;
     
@@ -156,7 +158,7 @@
     /**
      * Used for validating app tokens with window manager.
      */
-    final ArrayList<IBinder> mValidateAppTokens = new ArrayList<IBinder>();
+    final ArrayList<TaskGroup> mValidateAppTokens = new ArrayList<TaskGroup>();
 
     /**
      * List of running activities, sorted by recent usage.
@@ -653,6 +655,8 @@
 
         r.app = app;
         app.waitingToKill = null;
+        r.launchCount++;
+        r.lastLaunchTime = SystemClock.uptimeMillis();
 
         if (localLOGV) Slog.v(TAG, "Launching: " + r);
 
@@ -803,7 +807,7 @@
         // Is this activity's application already running?
         ProcessRecord app = mService.getProcessRecordLocked(r.processName,
                 r.info.applicationInfo.uid);
-        
+
         if (r.launchTime == 0) {
             r.launchTime = SystemClock.uptimeMillis();
             if (mInitialStartTime == 0) {
@@ -1091,6 +1095,7 @@
             // haven't really saved the state.
             r.icicle = icicle;
             r.haveState = true;
+            r.launchCount = 0;
             r.updateThumbnail(thumbnail, description);
         }
         if (!r.stopped) {
@@ -1955,8 +1960,17 @@
     final void validateAppTokensLocked() {
         mValidateAppTokens.clear();
         mValidateAppTokens.ensureCapacity(mHistory.size());
+        int taskId = Integer.MIN_VALUE;
+        TaskGroup task = null;
         for (int i=0; i<mHistory.size(); i++) {
-            mValidateAppTokens.add(mHistory.get(i).appToken);
+            final ActivityRecord r = mHistory.get(i);
+            if (taskId != r.task.taskId) {
+                taskId = r.task.taskId;
+                task = new TaskGroup();
+                task.taskId = taskId;
+                mValidateAppTokens.add(task);
+            }
+            task.tokens.add(r.appToken);
         }
         mService.mWindowManager.validateAppTokens(mValidateAppTokens);
     }
@@ -2479,7 +2493,7 @@
     final int startActivityLocked(IApplicationThread caller,
             Intent intent, String resolvedType, ActivityInfo aInfo, IBinder resultTo,
             String resultWho, int requestCode,
-            int callingPid, int callingUid, int startFlags, Bundle options,
+            int callingPid, int callingUid, String callingPackage, int startFlags, Bundle options,
             boolean componentSpecified, ActivityRecord[] outActivity) {
 
         int err = ActivityManager.START_SUCCESS;
@@ -2616,7 +2630,7 @@
             }
         }
 
-        ActivityRecord r = new ActivityRecord(mService, this, callerApp, callingUid,
+        ActivityRecord r = new ActivityRecord(mService, this, callerApp, callingUid, callingPackage,
                 intent, resolvedType, aInfo, mService.mConfiguration,
                 resultRecord, resultWho, requestCode, componentSpecified);
         if (outActivity != null) {
@@ -3091,7 +3105,7 @@
     }
 
     final int startActivityMayWait(IApplicationThread caller, int callingUid,
-            Intent intent, String resolvedType, IBinder resultTo,
+            String callingPackage, Intent intent, String resolvedType, IBinder resultTo,
             String resultWho, int requestCode, int startFlags, String profileFile,
             ParcelFileDescriptor profileFd, WaitResult outResult, Configuration config,
             Bundle options, int userId) {
@@ -3198,7 +3212,7 @@
             
             int res = startActivityLocked(caller, intent, resolvedType,
                     aInfo, resultTo, resultWho, requestCode, callingPid, callingUid,
-                    startFlags, options, componentSpecified, null);
+                    callingPackage, startFlags, options, componentSpecified, null);
             
             if (mConfigWillChange && mMainStack) {
                 // If the caller also wants to switch to a new configuration,
@@ -3249,7 +3263,7 @@
         }
     }
     
-    final int startActivities(IApplicationThread caller, int callingUid,
+    final int startActivities(IApplicationThread caller, int callingUid, String callingPackage,
             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
             Bundle options, int userId) {
         if (intents == null) {
@@ -3312,7 +3326,7 @@
                         theseOptions = null;
                     }
                     int res = startActivityLocked(caller, intent, resolvedTypes[i],
-                            aInfo, resultTo, null, -1, callingPid, callingUid,
+                            aInfo, resultTo, null, -1, callingPid, callingUid, callingPackage,
                             0, theseOptions, componentSpecified, outActivity);
                     if (res < 0) {
                         return res;
@@ -3931,6 +3945,7 @@
         if (setState) {
             if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r + " (cleaning up)");
             r.state = ActivityState.DESTROYED;
+            if (DEBUG_APP) Slog.v(TAG, "Clearing app during cleanUp for activity " + r);
             r.app = null;
         }
 
@@ -3988,6 +4003,7 @@
         if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r
                 + " (removed from history)");
         r.state = ActivityState.DESTROYED;
+        if (DEBUG_APP) Slog.v(TAG, "Clearing app during remove for activity " + r);
         r.app = null;
         mService.mWindowManager.removeAppToken(r.appToken);
         if (VALIDATE_TOKENS) {
@@ -4130,6 +4146,7 @@
                 if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r
                         + " (destroy skipped)");
                 r.state = ActivityState.DESTROYED;
+                if (DEBUG_APP) Slog.v(TAG, "Clearing app during destroy for activity " + r);
                 r.app = null;
             }
         } else {
@@ -4141,6 +4158,7 @@
                 if (DEBUG_STATES) Slog.v(TAG, "Moving to DESTROYED: " + r
                         + " (no app)");
                 r.state = ActivityState.DESTROYED;
+                if (DEBUG_APP) Slog.v(TAG, "Clearing app during destroy for activity " + r);
                 r.app = null;
             }
         }
@@ -4215,7 +4233,21 @@
             if (DEBUG_CLEANUP) Slog.v(
                 TAG, "Record #" + i + " " + r + ": app=" + r.app);
             if (r.app == app) {
+                boolean remove;
                 if ((!r.haveState && !r.stateNotNeeded) || r.finishing) {
+                    // Don't currently have state for the activity, or
+                    // it is finishing -- always remove it.
+                    remove = true;
+                } else if (r.launchCount > 2 &&
+                        r.lastLaunchTime > (SystemClock.uptimeMillis()-60000)) {
+                    // We have launched this activity too many times since it was
+                    // able to run, so give up and remove it.
+                    remove = true;
+                } else {
+                    // The process may be gone, but the activity lives on!
+                    remove = false;
+                }
+                if (remove) {
                     if (ActivityStack.DEBUG_ADD_REMOVE || DEBUG_CLEANUP) {
                         RuntimeException here = new RuntimeException("here");
                         here.fillInStackTrace();
@@ -4242,6 +4274,8 @@
                     if (r.visible) {
                         hasVisibleActivities = true;
                     }
+                    if (DEBUG_APP) Slog.v(TAG, "Clearing app during removeHistory for activity "
+                            + r);
                     r.app = null;
                     r.nowVisible = false;
                     if (!r.haveState) {
diff --git a/services/java/com/android/server/am/BroadcastQueue.java b/services/java/com/android/server/am/BroadcastQueue.java
index bada7f0..e8e8f25 100644
--- a/services/java/com/android/server/am/BroadcastQueue.java
+++ b/services/java/com/android/server/am/BroadcastQueue.java
@@ -22,6 +22,7 @@
 
 import android.app.ActivityManager;
 import android.app.AppGlobals;
+import android.app.AppOpsManager;
 import android.content.ComponentName;
 import android.content.IIntentReceiver;
 import android.content.Intent;
@@ -409,6 +410,16 @@
                 skip = true;
             }
         }
+        if (r.appOp != AppOpsManager.OP_NONE) {
+            int mode = mService.mAppOpsService.checkOperation(r.appOp,
+                    filter.receiverList.uid, filter.packageName);
+            if (mode != AppOpsManager.MODE_ALLOWED) {
+                if (DEBUG_BROADCAST)  Slog.v(TAG,
+                        "App op " + r.appOp + " not allowed for broadcast to uid "
+                        + filter.receiverList.uid + " pkg " + filter.packageName);
+                skip = true;
+            }
+        }
 
         if (!skip) {
             // If this is not being sent as an ordered broadcast, then we
@@ -706,6 +717,17 @@
                     skip = true;
                 }
             }
+            if (r.appOp != AppOpsManager.OP_NONE) {
+                int mode = mService.mAppOpsService.checkOperation(r.appOp,
+                        info.activityInfo.applicationInfo.uid, info.activityInfo.packageName);
+                if (mode != AppOpsManager.MODE_ALLOWED) {
+                    if (DEBUG_BROADCAST)  Slog.v(TAG,
+                            "App op " + r.appOp + " not allowed for broadcast to uid "
+                            + info.activityInfo.applicationInfo.uid + " pkg "
+                            + info.activityInfo.packageName);
+                    skip = true;
+                }
+            }
             boolean isSingleton = false;
             try {
                 isSingleton = mService.isSingleton(info.activityInfo.processName,
diff --git a/services/java/com/android/server/am/BroadcastRecord.java b/services/java/com/android/server/am/BroadcastRecord.java
index 1cf5b9c..a98afb6 100644
--- a/services/java/com/android/server/am/BroadcastRecord.java
+++ b/services/java/com/android/server/am/BroadcastRecord.java
@@ -16,6 +16,7 @@
 
 package com.android.server.am;
 
+import android.app.AppOpsManager;
 import android.content.IIntentReceiver;
 import android.content.ComponentName;
 import android.content.Intent;
@@ -46,6 +47,7 @@
     final boolean initialSticky; // initial broadcast from register to sticky?
     final int userId;       // user id this broadcast was for
     final String requiredPermission; // a permission the caller has required
+    final int appOp;        // an app op that is associated with this broadcast
     final List receivers;   // contains BroadcastFilter and ResolveInfo
     IIntentReceiver resultTo; // who receives final result if non-null
     long dispatchTime;      // when dispatch started on this set of receivers
@@ -90,8 +92,9 @@
                 pw.print(callerApp != null ? callerApp.toShortString() : "null");
                 pw.print(" pid="); pw.print(callingPid);
                 pw.print(" uid="); pw.println(callingUid);
-        if (requiredPermission != null) {
-            pw.print(prefix); pw.print("requiredPermission="); pw.println(requiredPermission);
+        if (requiredPermission != null || appOp != AppOpsManager.OP_NONE) {
+            pw.print(prefix); pw.print("requiredPermission="); pw.print(requiredPermission);
+                    pw.print("  appOp="); pw.println(appOp);
         }
         pw.print(prefix); pw.print("dispatchClockTime=");
                 pw.println(new Date(dispatchClockTime));
@@ -164,7 +167,7 @@
 
     BroadcastRecord(BroadcastQueue _queue,
             Intent _intent, ProcessRecord _callerApp, String _callerPackage,
-            int _callingPid, int _callingUid, String _requiredPermission,
+            int _callingPid, int _callingUid, String _requiredPermission, int _appOp,
             List _receivers, IIntentReceiver _resultTo, int _resultCode,
             String _resultData, Bundle _resultExtras, boolean _serialized,
             boolean _sticky, boolean _initialSticky,
@@ -176,6 +179,7 @@
         callingPid = _callingPid;
         callingUid = _callingUid;
         requiredPermission = _requiredPermission;
+        appOp = _appOp;
         receivers = _receivers;
         resultTo = _resultTo;
         resultCode = _resultCode;
diff --git a/services/java/com/android/server/am/PendingIntentRecord.java b/services/java/com/android/server/am/PendingIntentRecord.java
index 8ee303f..8ab71dd 100644
--- a/services/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/java/com/android/server/am/PendingIntentRecord.java
@@ -246,11 +246,12 @@
                                 }
                                 allIntents[allIntents.length-1] = finalIntent;
                                 allResolvedTypes[allResolvedTypes.length-1] = resolvedType;
-                                owner.startActivitiesInPackage(uid, allIntents,
+                                owner.startActivitiesInPackage(uid, key.packageName, allIntents,
                                         allResolvedTypes, resultTo, options, userId);
                             } else {
-                                owner.startActivityInPackage(uid, finalIntent, resolvedType,
-                                        resultTo, resultWho, requestCode, 0, options, userId);
+                                owner.startActivityInPackage(uid, key.packageName, finalIntent,
+                                        resolvedType, resultTo, resultWho, requestCode, 0,
+                                        options, userId);
                             }
                         } catch (RuntimeException e) {
                             Slog.w(ActivityManagerService.TAG,
diff --git a/services/java/com/android/server/am/ProcessRecord.java b/services/java/com/android/server/am/ProcessRecord.java
index 7fbab04..a32af2f 100644
--- a/services/java/com/android/server/am/ProcessRecord.java
+++ b/services/java/com/android/server/am/ProcessRecord.java
@@ -22,6 +22,7 @@
 import android.app.Dialog;
 import android.app.IApplicationThread;
 import android.app.IInstrumentationWatcher;
+import android.app.IUiAutomationConnection;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
@@ -95,6 +96,7 @@
     ApplicationInfo instrumentationInfo; // the application being instrumented
     String instrumentationProfileFile; // where to save profiling
     IInstrumentationWatcher instrumentationWatcher; // who is waiting
+    IUiAutomationConnection instrumentationUiAutomationConnection; // Connection to use the UI introspection APIs.
     Bundle instrumentationArguments;// as given to us
     ComponentName instrumentationResultClass;// copy of instrumentationClass
     boolean usingWrapper;       // Set to true when process was launched with a wrapper attached
diff --git a/services/java/com/android/server/am/ServiceRecord.java b/services/java/com/android/server/am/ServiceRecord.java
index 84e824a..b06c60a 100644
--- a/services/java/com/android/server/am/ServiceRecord.java
+++ b/services/java/com/android/server/am/ServiceRecord.java
@@ -369,8 +369,9 @@
                     }
                     try {
                         int[] outId = new int[1];
-                        nm.enqueueNotificationInternal(localPackageName, appUid, appPid,
-                                null, localForegroundId, localForegroundNoti, outId, userId);
+                        nm.enqueueNotificationInternal(localPackageName, localPackageName,
+                                appUid, appPid, null, localForegroundId, localForegroundNoti,
+                                outId, userId);
                     } catch (RuntimeException e) {
                         Slog.w(ActivityManagerService.TAG,
                                 "Error showing notification for service", e);
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs b/services/java/com/android/server/am/TaskGroup.java
similarity index 65%
copy from tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs
copy to services/java/com/android/server/am/TaskGroup.java
index 1a19ffc..7574103 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs
+++ b/services/java/com/android/server/am/TaskGroup.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 The Android Open Source Project
+ * 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.
@@ -14,10 +14,13 @@
  * limitations under the License.
  */
 
-#pragma version(1)
-#pragma rs java_package_name(com.android.rs.image)
+package com.android.server.am;
 
-void sendMsg() {
-    rsSendToClientBlocking(0);
+import android.view.IApplicationToken;
+
+import java.util.ArrayList;
+
+public class TaskGroup {
+    public int taskId = -1;
+    public ArrayList<IApplicationToken> tokens = new ArrayList<IApplicationToken>();
 }
-
diff --git a/services/java/com/android/server/location/GeocoderProxy.java b/services/java/com/android/server/location/GeocoderProxy.java
index cdbfcbc..8103695 100644
--- a/services/java/com/android/server/location/GeocoderProxy.java
+++ b/services/java/com/android/server/location/GeocoderProxy.java
@@ -40,8 +40,8 @@
     private final ServiceWatcher mServiceWatcher;
 
     public static GeocoderProxy createAndBind(Context context,
-            List<String> initialPackageNames, Handler handler, int userId) {
-        GeocoderProxy proxy = new GeocoderProxy(context, initialPackageNames, handler, userId);
+            List<String> initialPackageNames, Handler handler) {
+        GeocoderProxy proxy = new GeocoderProxy(context, initialPackageNames, handler);
         if (proxy.bind()) {
             return proxy;
         } else {
@@ -49,12 +49,11 @@
         }
     }
 
-    public GeocoderProxy(Context context, List<String> initialPackageNames, Handler handler,
-            int userId) {
+    public GeocoderProxy(Context context, List<String> initialPackageNames, Handler handler) {
         mContext = context;
 
         mServiceWatcher = new ServiceWatcher(mContext, TAG, SERVICE_ACTION, initialPackageNames,
-                null, handler, userId);
+                null, handler);
     }
 
     private boolean bind () {
diff --git a/services/java/com/android/server/location/GeofenceManager.java b/services/java/com/android/server/location/GeofenceManager.java
index f9be719..e24bf76 100644
--- a/services/java/com/android/server/location/GeofenceManager.java
+++ b/services/java/com/android/server/location/GeofenceManager.java
@@ -21,6 +21,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import android.app.AppOpsManager;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
@@ -68,6 +69,7 @@
 
     private final Context mContext;
     private final LocationManager mLocationManager;
+    private final AppOpsManager mAppOps;
     private final PowerManager.WakeLock mWakeLock;
     private final GeofenceHandler mHandler;
     private final LocationBlacklist mBlacklist;
@@ -107,6 +109,7 @@
     public GeofenceManager(Context context, LocationBlacklist blacklist) {
         mContext = context;
         mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
+        mAppOps = (AppOpsManager)mContext.getSystemService(Context.APP_OPS_SERVICE);
         PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
         mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
         mHandler = new GeofenceHandler();
@@ -114,14 +117,14 @@
     }
 
     public void addFence(LocationRequest request, Geofence geofence, PendingIntent intent,
-            int uid, String packageName) {
+            int allowedResolutionLevel, int uid, String packageName) {
         if (D) {
             Slog.d(TAG, "addFence: request=" + request + ", geofence=" + geofence
                     + ", intent=" + intent + ", uid=" + uid + ", packageName=" + packageName);
         }
 
         GeofenceState state = new GeofenceState(geofence,
-                request.getExpireAt(), packageName, intent);
+                request.getExpireAt(), allowedResolutionLevel, uid, packageName, intent);
         synchronized (mLock) {
             // first make sure it doesn't already exist
             for (int i = mFences.size() - 1; i >= 0; i--) {
@@ -261,6 +264,18 @@
                     continue;
                 }
 
+                int op = LocationManagerService.resolutionLevelToOp(state.mAllowedResolutionLevel);
+                if (op >= 0) {
+                    if (mAppOps.noteOpNoThrow(AppOpsManager.OP_FINE_LOCATION, state.mUid,
+                            state.mPackageName) != AppOpsManager.MODE_ALLOWED) {
+                        if (D) {
+                            Slog.d(TAG, "skipping geofence processing for no op app: "
+                                    + state.mPackageName);
+                        }
+                        continue;
+                    }
+                }
+
                 needUpdates = true;
                 if (location != null) {
                     int event = state.processLocation(location);
diff --git a/services/java/com/android/server/location/GeofenceState.java b/services/java/com/android/server/location/GeofenceState.java
index 11705ff..3ebe20a 100644
--- a/services/java/com/android/server/location/GeofenceState.java
+++ b/services/java/com/android/server/location/GeofenceState.java
@@ -35,6 +35,8 @@
     public final Geofence mFence;
     private final Location mLocation;
     public final long mExpireAt;
+    public final int mAllowedResolutionLevel;
+    public final int mUid;
     public final String mPackageName;
     public final PendingIntent mIntent;
 
@@ -42,12 +44,14 @@
     double mDistanceToCenter;  // current distance to center of fence
 
     public GeofenceState(Geofence fence, long expireAt,
-            String packageName, PendingIntent intent) {
+            int allowedResolutionLevel, int uid, String packageName, PendingIntent intent) {
         mState = STATE_UNKNOWN;
         mDistanceToCenter = Double.MAX_VALUE;
 
         mFence = fence;
         mExpireAt = expireAt;
+        mAllowedResolutionLevel = allowedResolutionLevel;
+        mUid = uid;
         mPackageName = packageName;
         mIntent = intent;
 
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java
index 12c14bf..c1e4a32 100644
--- a/services/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/java/com/android/server/location/GpsLocationProvider.java
@@ -704,17 +704,17 @@
      */
     @Override
     public void enable() {
+        synchronized (mLock) {
+            if (mEnabled) return;
+            mEnabled = true;
+        }
+
         sendMessage(ENABLE, 1, null);
     }
 
     private void handleEnable() {
         if (DEBUG) Log.d(TAG, "handleEnable");
 
-        synchronized (mLock) {
-            if (mEnabled) return;
-            mEnabled = true;
-        }
-
         boolean enabled = native_init();
 
         if (enabled) {
@@ -740,17 +740,17 @@
      */
     @Override
     public void disable() {
+        synchronized (mLock) {
+            if (!mEnabled) return;
+            mEnabled = false;
+        }
+
         sendMessage(ENABLE, 0, null);
     }
 
     private void handleDisable() {
         if (DEBUG) Log.d(TAG, "handleDisable");
 
-        synchronized (mLock) {
-            if (!mEnabled) return;
-            mEnabled = false;
-        }
-
         stopNavigating();
         mAlarmManager.cancel(mWakeupIntent);
         mAlarmManager.cancel(mTimeoutIntent);
@@ -793,11 +793,6 @@
         sendMessage(SET_REQUEST, 0, new GpsRequest(request, source));
     }
 
-    @Override
-    public void switchUser(int userId) {
-        // nothing to do here
-    }
-
     private void handleSetRequest(ProviderRequest request, WorkSource source) {
         if (DEBUG) Log.d(TAG, "setRequest " + request);
 
diff --git a/services/java/com/android/server/location/LocationBlacklist.java b/services/java/com/android/server/location/LocationBlacklist.java
index 2437a37..6f22689 100644
--- a/services/java/com/android/server/location/LocationBlacklist.java
+++ b/services/java/com/android/server/location/LocationBlacklist.java
@@ -67,9 +67,9 @@
 
     private void reloadBlacklistLocked() {
         mWhitelist = getStringArrayLocked(WHITELIST_CONFIG_NAME);
-        Slog.i(TAG, "whitelist: " + Arrays.toString(mWhitelist));
+        if (D) Slog.d(TAG, "whitelist: " + Arrays.toString(mWhitelist));
         mBlacklist = getStringArrayLocked(BLACKLIST_CONFIG_NAME);
-        Slog.i(TAG, "blacklist: " + Arrays.toString(mBlacklist));
+        if (D) Slog.d(TAG, "blacklist: " + Arrays.toString(mBlacklist));
     }
 
     private void reloadBlacklist() {
diff --git a/services/java/com/android/server/location/LocationProviderInterface.java b/services/java/com/android/server/location/LocationProviderInterface.java
index 80e71f1..6f09232 100644
--- a/services/java/com/android/server/location/LocationProviderInterface.java
+++ b/services/java/com/android/server/location/LocationProviderInterface.java
@@ -38,8 +38,6 @@
     public boolean isEnabled();
     public void setRequest(ProviderRequest request, WorkSource source);
 
-    public void switchUser(int userId);
-
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args);
 
     // --- deprecated (but still supported) ---
diff --git a/services/java/com/android/server/location/LocationProviderProxy.java b/services/java/com/android/server/location/LocationProviderProxy.java
index cec77a8..7faf72c 100644
--- a/services/java/com/android/server/location/LocationProviderProxy.java
+++ b/services/java/com/android/server/location/LocationProviderProxy.java
@@ -54,9 +54,9 @@
     private WorkSource mWorksource = new WorkSource();
 
     public static LocationProviderProxy createAndBind(Context context, String name, String action,
-            List<String> initialPackageNames, Handler handler, int userId) {
+            List<String> initialPackageNames, Handler handler) {
         LocationProviderProxy proxy = new LocationProviderProxy(context, name, action,
-                initialPackageNames, handler, userId);
+                initialPackageNames, handler);
         if (proxy.bind()) {
             return proxy;
         } else {
@@ -65,11 +65,11 @@
     }
 
     private LocationProviderProxy(Context context, String name, String action,
-            List<String> initialPackageNames, Handler handler, int userId) {
+            List<String> initialPackageNames, Handler handler) {
         mContext = context;
         mName = name;
         mServiceWatcher = new ServiceWatcher(mContext, TAG, action, initialPackageNames,
-                mNewServiceWork, handler, userId);
+                mNewServiceWork, handler);
     }
 
     private boolean bind () {
@@ -211,11 +211,6 @@
     }
 
     @Override
-    public void switchUser(int userId) {
-        mServiceWatcher.switchUser(userId);
-    }
-
-    @Override
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         pw.append("REMOTE SERVICE");
         pw.append(" name=").append(mName);
diff --git a/services/java/com/android/server/location/MockProvider.java b/services/java/com/android/server/location/MockProvider.java
index 1194cbc..36c43ff 100644
--- a/services/java/com/android/server/location/MockProvider.java
+++ b/services/java/com/android/server/location/MockProvider.java
@@ -156,11 +156,6 @@
     public void setRequest(ProviderRequest request, WorkSource source) { }
 
     @Override
-    public void switchUser(int userId) {
-        // nothing to do here
-    }
-
-    @Override
     public boolean sendExtraCommand(String command, Bundle extras) {
         return false;
     }
diff --git a/services/java/com/android/server/location/PassiveProvider.java b/services/java/com/android/server/location/PassiveProvider.java
index 734c572..71bae07 100644
--- a/services/java/com/android/server/location/PassiveProvider.java
+++ b/services/java/com/android/server/location/PassiveProvider.java
@@ -96,11 +96,6 @@
         mReportLocation = request.reportLocation;
     }
 
-    @Override
-    public void switchUser(int userId) {
-        // nothing to do here
-    }
-
     public void updateLocation(Location location) {
         if (mReportLocation) {
             try {
diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java
index cbd2a0f..3ae652a 100644
--- a/services/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -828,7 +828,7 @@
             final String packageName = mContext.getPackageName();
             final int[] idReceived = new int[1];
             mNotifManager.enqueueNotificationWithTag(
-                    packageName, tag, 0x0, builder.getNotification(), idReceived,
+                    packageName, packageName, tag, 0x0, builder.getNotification(), idReceived,
                     UserHandle.USER_OWNER);
             mActiveNotifs.add(tag);
         } catch (RemoteException e) {
@@ -863,7 +863,7 @@
         try {
             final String packageName = mContext.getPackageName();
             final int[] idReceived = new int[1];
-            mNotifManager.enqueueNotificationWithTag(packageName, tag,
+            mNotifManager.enqueueNotificationWithTag(packageName, packageName, tag,
                     0x0, builder.getNotification(), idReceived, UserHandle.USER_OWNER);
             mActiveNotifs.add(tag);
         } catch (RemoteException e) {
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 47987f1..46d2cca 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -20,11 +20,11 @@
 import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
 import static com.android.internal.util.ArrayUtils.appendInt;
 import static com.android.internal.util.ArrayUtils.removeInt;
-import static libcore.io.OsConstants.S_ISLNK;
 import static libcore.io.OsConstants.S_IRWXU;
 import static libcore.io.OsConstants.S_IRGRP;
 import static libcore.io.OsConstants.S_IXGRP;
@@ -111,7 +111,6 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.Environment.UserEnvironment;
-import android.provider.Settings.Secure;
 import android.security.SystemKeyStore;
 import android.util.DisplayMetrics;
 import android.util.EventLog;
@@ -148,13 +147,11 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 
 import libcore.io.ErrnoException;
 import libcore.io.IoUtils;
 import libcore.io.Libcore;
-import libcore.io.OsConstants;
 import libcore.io.StructStat;
 
 /**
@@ -172,7 +169,7 @@
 public class PackageManagerService extends IPackageManager.Stub {
     static final String TAG = "PackageManager";
     static final boolean DEBUG_SETTINGS = false;
-    private static final boolean DEBUG_PREFERRED = false;
+    static final boolean DEBUG_PREFERRED = true;
     static final boolean DEBUG_UPGRADE = false;
     private static final boolean DEBUG_INSTALL = false;
     private static final boolean DEBUG_REMOVE = false;
@@ -1020,7 +1017,7 @@
 
             readPermissions();
 
-            mRestoredSettings = mSettings.readLPw(sUserManager.getUsers(false),
+            mRestoredSettings = mSettings.readLPw(this, sUserManager.getUsers(false),
                     mSdkVersion, mOnlyCore);
             long startTime = SystemClock.uptimeMillis();
 
@@ -1347,7 +1344,8 @@
                 continue;
             }
 
-            if (!ps.grantedPermissions
+            final GrantedPermissions gp = ps.sharedUser != null ? ps.sharedUser : ps;
+            if (!gp.grantedPermissions
                     .contains(android.Manifest.permission.PACKAGE_VERIFICATION_AGENT)) {
                 continue;
             }
@@ -2917,8 +2915,9 @@
     private void addPackageHoldingPermissions(ArrayList<PackageInfo> list, PackageSetting ps,
             String[] permissions, boolean[] tmp, int flags, int userId) {
         int numMatch = 0;
+        final GrantedPermissions gp = ps.sharedUser != null ? ps.sharedUser : ps;
         for (int i=0; i<permissions.length; i++) {
-            if (ps.grantedPermissions.contains(permissions[i])) {
+            if (gp.grantedPermissions.contains(permissions[i])) {
                 tmp[i] = true;
                 numMatch++;
             } else {
@@ -3296,6 +3295,13 @@
                     Log.i(TAG, "Package " + ps.name + " at " + scanFile
                             + " ignored: updated version " + ps.versionCode
                             + " better than this " + pkg.mVersionCode);
+                    if (!updatedPkg.codePath.equals(scanFile)) {
+                        Slog.w(PackageManagerService.TAG, "Code path for hidden system pkg : "
+                                + ps.name + " changing from " + updatedPkg.codePathString
+                                + " to " + scanFile);
+                        updatedPkg.codePath = scanFile;
+                        updatedPkg.codePathString = scanFile.toString();                        
+                    }
                     mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
                     return null;
                 } else {
@@ -4957,7 +4963,7 @@
         ps.haveGids = true;
     }
     
-    private final class ActivityIntentResolver
+    final class ActivityIntentResolver
             extends IntentResolver<PackageParser.ActivityIntentInfo, ResolveInfo> {
         public List<ResolveInfo> queryIntent(Intent intent, String resolvedType,
                 boolean defaultOnly, int userId) {
@@ -5431,7 +5437,8 @@
                                 + " " + intent.getExtras(), here);
                     }
                     am.broadcastIntent(null, intent, null, finishedReceiver,
-                            0, null, null, null, finishedReceiver != null, false, id);
+                            0, null, null, null, android.app.AppOpsManager.OP_NONE,
+                            finishedReceiver != null, false, id);
                 }
             } catch (RemoteException ex) {
             }
@@ -8820,8 +8827,10 @@
                 }
             }
 
-            if (clearPackagePreferredActivitiesLPw(packageName, UserHandle.getCallingUserId())) {
-                scheduleWriteSettingsLocked();            
+            int user = UserHandle.getCallingUserId();
+            if (clearPackagePreferredActivitiesLPw(packageName, user)) {
+                mSettings.writePackageRestrictionsLPr(user);
+                scheduleWriteSettingsLocked();
             }
         }
     }
@@ -8839,7 +8848,8 @@
             Iterator<PreferredActivity> it = pir.filterIterator();
             while (it.hasNext()) {
                 PreferredActivity pa = it.next();
-                if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
+                if (packageName == null ||
+                        pa.mPref.mComponent.getPackageName().equals(packageName)) {
                     if (removed == null) {
                         removed = new ArrayList<PreferredActivity>();
                     }
@@ -8852,12 +8862,24 @@
                     pir.removeFilter(pa);
                 }
                 changed = true;
-                mSettings.writePackageRestrictionsLPr(thisUserId);
             }
         }
         return changed;
     }
 
+    public void resetPreferredActivities(int userId) {
+        mContext.enforceCallingOrSelfPermission(
+                android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
+        // writer
+        synchronized (mPackages) {
+            int user = UserHandle.getCallingUserId();
+            clearPackagePreferredActivitiesLPw(null, user);
+            mSettings.readDefaultPreferredAppsLPw(this, user);
+            mSettings.writePackageRestrictionsLPr(user);
+            scheduleWriteSettingsLocked();
+        }
+    }
+
     public int getPreferredActivities(List<IntentFilter> outFilters,
             List<ComponentName> outActivities, String packageName) {
 
@@ -8906,13 +8928,14 @@
         if (!(newState == COMPONENT_ENABLED_STATE_DEFAULT
               || newState == COMPONENT_ENABLED_STATE_ENABLED
               || newState == COMPONENT_ENABLED_STATE_DISABLED
-              || newState == COMPONENT_ENABLED_STATE_DISABLED_USER)) {
+              || newState == COMPONENT_ENABLED_STATE_DISABLED_USER
+              || newState == COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED)) {
             throw new IllegalArgumentException("Invalid new component state: "
                     + newState);
         }
         PackageSetting pkgSetting;
         final int uid = Binder.getCallingUid();
-        final int permission = mContext.checkCallingPermission(
+        final int permission = mContext.checkCallingOrSelfPermission(
                 android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE);
         enforceCrossUserPermission(uid, userId, false, "set enabled");
         final boolean allowedByPermission = (permission == PackageManager.PERMISSION_GRANTED);
@@ -9243,6 +9266,7 @@
         }
 
         DumpState dumpState = new DumpState();
+        boolean fullPreferred = false;
         
         String packageName = null;
         
@@ -9266,7 +9290,7 @@
                 pw.println("    r[esolvers]: dump intent resolvers");
                 pw.println("    perm[issions]: dump permissions");
                 pw.println("    pref[erred]: print preferred package settings");
-                pw.println("    preferred-xml: print preferred package settings as xml");
+                pw.println("    preferred-xml [--full]: print preferred package settings as xml");
                 pw.println("    prov[iders]: dump content providers");
                 pw.println("    p[ackages]: dump installed packages");
                 pw.println("    s[hared-users]: dump shared user IDs");
@@ -9300,6 +9324,10 @@
                 dumpState.setDump(DumpState.DUMP_PREFERRED);
             } else if ("preferred-xml".equals(cmd)) {
                 dumpState.setDump(DumpState.DUMP_PREFERRED_XML);
+                if (opti < args.length && "--full".equals(args[opti])) {
+                    fullPreferred = true;
+                    opti++;
+                }
             } else if ("p".equals(cmd) || "packages".equals(cmd)) {
                 dumpState.setDump(DumpState.DUMP_PACKAGES);
             } else if ("s".equals(cmd) || "shared-users".equals(cmd)) {
@@ -9394,7 +9422,7 @@
                     serializer.startDocument(null, true);
                     serializer.setFeature(
                             "http://xmlpull.org/v1/doc/features.html#indent-output", true);
-                    mSettings.writePreferredActivitiesLPr(serializer, 0);
+                    mSettings.writePreferredActivitiesLPr(serializer, 0, fullPreferred);
                     serializer.endDocument();
                     serializer.flush();
                 } catch (IllegalArgumentException e) {
@@ -10147,7 +10175,7 @@
     /** Called by UserManagerService */
     void createNewUserLILPw(int userHandle, File path) {
         if (mInstaller != null) {
-            mSettings.createNewUserLILPw(mInstaller, userHandle, path);
+            mSettings.createNewUserLILPw(this, mInstaller, userHandle, path);
         }
     }
 
diff --git a/services/java/com/android/server/pm/PreferredActivity.java b/services/java/com/android/server/pm/PreferredActivity.java
index dbf56ef..c655bb1 100644
--- a/services/java/com/android/server/pm/PreferredActivity.java
+++ b/services/java/com/android/server/pm/PreferredActivity.java
@@ -46,8 +46,8 @@
         mPref = new PreferredComponent(this, parser);
     }
 
-    public void writeToXml(XmlSerializer serializer) throws IOException {
-        mPref.writeToXml(serializer);
+    public void writeToXml(XmlSerializer serializer, boolean full) throws IOException {
+        mPref.writeToXml(serializer, full);
         serializer.startTag(null, "filter");
             super.writeToXml(serializer);
         serializer.endTag(null, "filter");
diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java
index 06f11bc..13f514b 100644
--- a/services/java/com/android/server/pm/Settings.java
+++ b/services/java/com/android/server/pm/Settings.java
@@ -18,10 +18,17 @@
 
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
 import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
 
+import android.content.IntentFilter;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.os.PatternMatcher;
+import android.util.LogPrinter;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.JournaledFile;
 import com.android.internal.util.XmlUtils;
@@ -971,14 +978,14 @@
         return components;
     }
 
-    void writePreferredActivitiesLPr(XmlSerializer serializer, int userId)
+    void writePreferredActivitiesLPr(XmlSerializer serializer, int userId, boolean full)
             throws IllegalArgumentException, IllegalStateException, IOException {
         serializer.startTag(null, "preferred-activities");
         PreferredIntentResolver pir = mPreferredActivities.get(userId);
         if (pir != null) {
             for (final PreferredActivity pa : pir.filterSet()) {
                 serializer.startTag(null, TAG_ITEM);
-                pa.writeToXml(serializer);
+                pa.writeToXml(serializer, full);
                 serializer.endTag(null, TAG_ITEM);
             }
         }
@@ -1071,7 +1078,7 @@
                 }
             }
 
-            writePreferredActivitiesLPr(serializer, userId);
+            writePreferredActivitiesLPr(serializer, userId, true);
 
             serializer.endTag(null, TAG_PACKAGE_RESTRICTIONS);
 
@@ -1556,7 +1563,8 @@
         }
     }
 
-    boolean readLPw(List<UserInfo> users, int sdkVersion, boolean onlyCore) {
+    boolean readLPw(PackageManagerService service, List<UserInfo> users, int sdkVersion,
+            boolean onlyCore) {
         FileInputStream str = null;
         if (mBackupSettingsFilename.exists()) {
             try {
@@ -1587,7 +1595,7 @@
                     PackageManagerService.reportSettingsProblem(Log.INFO,
                             "No settings file; creating initial state");
                     if (!onlyCore) {
-                        readDefaultPreferredAppsLPw(0);
+                        readDefaultPreferredAppsLPw(service, 0);
                     }
                     mInternalSdkPlatform = mExternalSdkPlatform = sdkVersion;
                     return false;
@@ -1770,7 +1778,7 @@
         return true;
     }
 
-    private void readDefaultPreferredAppsLPw(int userId) {
+    void readDefaultPreferredAppsLPw(PackageManagerService service, int userId) {
         // Read preferred apps from .../etc/preferred-apps directory.
         File preferredDir = new File(Environment.getRootDirectory(), "etc/preferred-apps");
         if (!preferredDir.exists() || !preferredDir.isDirectory()) {
@@ -1792,6 +1800,7 @@
                 continue;
             }
 
+            if (PackageManagerService.DEBUG_PREFERRED) Log.d(TAG, "Reading default preferred " + f);
             FileInputStream str = null;
             try {
                 str = new FileInputStream(f);
@@ -1813,7 +1822,7 @@
                             + " does not start with 'preferred-activities'");
                     continue;
                 }
-                readPreferredActivitiesLPw(parser, userId);
+                readDefaultPreferredActivitiesLPw(service, parser, userId);
             } catch (XmlPullParserException e) {
                 Slog.w(TAG, "Error reading apps file " + f, e);
             } catch (IOException e) {
@@ -1829,6 +1838,112 @@
         }
     }
 
+    private void readDefaultPreferredActivitiesLPw(PackageManagerService service,
+            XmlPullParser parser, int userId)
+            throws XmlPullParserException, IOException {
+        int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            if (tagName.equals(TAG_ITEM)) {
+                PreferredActivity tmpPa = new PreferredActivity(parser);
+                if (tmpPa.mPref.getParseError() == null) {
+                    // The initial preferences only specify the target activity
+                    // component and intent-filter, not the set of matches.  So we
+                    // now need to query for the matches to build the correct
+                    // preferred activity entry.
+                    if (PackageManagerService.DEBUG_PREFERRED) {
+                        Log.d(TAG, "Processing preferred:");
+                        tmpPa.dump(new LogPrinter(Log.DEBUG, TAG), "  ");
+                    }
+                    final ComponentName cn = tmpPa.mPref.mComponent;
+                    Intent intent = new Intent();
+                    int flags = 0;
+                    intent.setAction(tmpPa.getAction(0));
+                    for (int i=0; i<tmpPa.countCategories(); i++) {
+                        String cat = tmpPa.getCategory(i);
+                        if (cat.equals(Intent.CATEGORY_DEFAULT)) {
+                            flags |= PackageManager.MATCH_DEFAULT_ONLY;
+                        } else {
+                            intent.addCategory(cat);
+                        }
+                    }
+                    if (tmpPa.countDataSchemes() > 0) {
+                        Uri.Builder builder = new Uri.Builder();
+                        builder.scheme(tmpPa.getDataScheme(0));
+                        if (tmpPa.countDataAuthorities() > 0) {
+                            IntentFilter.AuthorityEntry auth = tmpPa.getDataAuthority(0);
+                            if (auth.getHost() != null) {
+                                builder.authority(auth.getHost());
+                            }
+                        }
+                        if (tmpPa.countDataPaths() > 0) {
+                            PatternMatcher path = tmpPa.getDataPath(0);
+                            builder.path(path.getPath());
+                        }
+                        intent.setData(builder.build());
+                    } else if (tmpPa.countDataTypes() > 0) {
+                        intent.setType(tmpPa.getDataType(0));
+                    }
+                    List<ResolveInfo> ri = service.mActivities.queryIntent(intent,
+                            intent.getType(), flags, 0);
+                    if (PackageManagerService.DEBUG_PREFERRED) Log.d(TAG, "Queried " + intent
+                            + " results: " + ri);
+                    int match = 0;
+                    if (ri != null && ri.size() > 1) {
+                        boolean haveAct = false;
+                        boolean haveNonSys = false;
+                        ComponentName[] set = new ComponentName[ri.size()];
+                        for (int i=0; i<ri.size(); i++) {
+                            ActivityInfo ai = ri.get(i).activityInfo;
+                            set[i] = new ComponentName(ai.packageName, ai.name);
+                            if ((ai.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) {
+                                // If any of the matches are not system apps, then
+                                // there is a third party app that is now an option...
+                                // so don't set a default since we don't want to hide it.
+                                if (PackageManagerService.DEBUG_PREFERRED) Log.d(TAG, "Result "
+                                        + ai.packageName + "/" + ai.name + ": non-system!");
+                                haveNonSys = true;
+                                break;
+                            } else if (cn.getPackageName().equals(ai.packageName)
+                                    && cn.getClassName().equals(ai.name)) {
+                                if (PackageManagerService.DEBUG_PREFERRED) Log.d(TAG, "Result "
+                                        + ai.packageName + "/" + ai.name + ": default!");
+                                haveAct = true;
+                                match = ri.get(i).match;
+                            } else {
+                                if (PackageManagerService.DEBUG_PREFERRED) Log.d(TAG, "Result "
+                                        + ai.packageName + "/" + ai.name + ": skipped");
+                            }
+                        }
+                        if (haveAct && !haveNonSys) {
+                            PreferredActivity pa = new PreferredActivity(tmpPa, match, set,
+                                    tmpPa.mPref.mComponent);
+                            editPreferredActivitiesLPw(userId).addFilter(pa);
+                        } else if (!haveNonSys) {
+                            Slog.w(TAG, "No component found for default preferred activity "
+                                    + tmpPa.mPref.mComponent);
+                        }
+                    }
+                } else {
+                    PackageManagerService.reportSettingsProblem(Log.WARN,
+                            "Error in package manager settings: <preferred-activity> "
+                                    + tmpPa.mPref.getParseError() + " at "
+                                    + parser.getPositionDescription());
+                }
+            } else {
+                PackageManagerService.reportSettingsProblem(Log.WARN,
+                        "Unknown element under <preferred-activities>: " + parser.getName());
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+    }
+
     private int readInt(XmlPullParser parser, String ns, String name, int defValue) {
         String v = parser.getAttributeValue(ns, name);
         try {
@@ -2328,7 +2443,8 @@
         }
     }
 
-    void createNewUserLILPw(Installer installer, int userHandle, File path) {
+    void createNewUserLILPw(PackageManagerService service, Installer installer,
+            int userHandle, File path) {
         path.mkdir();
         FileUtils.setPermissions(path.toString(), FileUtils.S_IRWXU | FileUtils.S_IRWXG
                 | FileUtils.S_IXOTH, -1, -1);
@@ -2339,7 +2455,7 @@
             installer.createUserData(ps.name,
                     UserHandle.getUid(userHandle, ps.appId), userHandle);
         }
-        readDefaultPreferredAppsLPw(userHandle);
+        readDefaultPreferredAppsLPw(service, userHandle);
         writePackageRestrictionsLPr(userHandle);
     }
 
@@ -2412,8 +2528,14 @@
             return false;
         }
         PackageUserState ustate = packageSettings.readUserState(userId);
+        if ((flags&PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS) != 0) {
+            if (ustate.enabled == COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
+                return true;
+            }
+        }
         if (ustate.enabled == COMPONENT_ENABLED_STATE_DISABLED
                 || ustate.enabled == COMPONENT_ENABLED_STATE_DISABLED_USER
+                || ustate.enabled == COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
                 || (packageSettings.pkg != null && !packageSettings.pkg.applicationInfo.enabled
                     && ustate.enabled == COMPONENT_ENABLED_STATE_DEFAULT)) {
             return false;
diff --git a/services/java/com/android/server/updates/ConfigUpdateInstallReceiver.java b/services/java/com/android/server/updates/ConfigUpdateInstallReceiver.java
index 4480151..b065310 100644
--- a/services/java/com/android/server/updates/ConfigUpdateInstallReceiver.java
+++ b/services/java/com/android/server/updates/ConfigUpdateInstallReceiver.java
@@ -77,7 +77,7 @@
                     // get the certificate from Settings.Secure
                     X509Certificate cert = getCert(context.getContentResolver());
                     // get the content path from the extras
-                    String altContent = getAltContent(intent);
+                    byte[] altContent = getAltContent(intent);
                     // get the version from the extras
                     int altVersion = getVersionFromIntent(intent);
                     // get the previous value from the extras
@@ -172,28 +172,26 @@
         }
     }
 
-    private String getAltContent(Intent i) throws IOException {
-        String contents = IoUtils.readFileAsString(getContentFromIntent(i));
-        return contents.trim();
+    private byte[] getAltContent(Intent i) throws IOException {
+        return IoUtils.readFileAsByteArray(getContentFromIntent(i));
     }
 
-    private String getCurrentContent() {
+    private byte[] getCurrentContent() {
         try {
-            return IoUtils.readFileAsString(updateContent.getCanonicalPath()).trim();
+            return IoUtils.readFileAsByteArray(updateContent.getCanonicalPath());
         } catch (IOException e) {
             Slog.i(TAG, "Failed to read current content, assuming first update!");
             return null;
         }
     }
 
-    private static String getCurrentHash(String content) {
+    private static String getCurrentHash(byte[] content) {
         if (content == null) {
             return "0";
         }
         try {
             MessageDigest dgst = MessageDigest.getInstance("SHA512");
-            byte[] encoded = content.getBytes();
-            byte[] fingerprint = dgst.digest(encoded);
+            byte[] fingerprint = dgst.digest(content);
             return IntegralToString.bytesToHexString(fingerprint, false);
         } catch (NoSuchAlgorithmException e) {
             throw new AssertionError(e);
@@ -213,17 +211,17 @@
         return current.equals(required);
     }
 
-    private boolean verifySignature(String content, int version, String requiredPrevious,
+    private boolean verifySignature(byte[] content, int version, String requiredPrevious,
                                    String signature, X509Certificate cert) throws Exception {
         Signature signer = Signature.getInstance("SHA512withRSA");
         signer.initVerify(cert);
-        signer.update(content.getBytes());
+        signer.update(content);
         signer.update(Long.toString(version).getBytes());
         signer.update(requiredPrevious.getBytes());
         return signer.verify(Base64.decode(signature.getBytes(), Base64.DEFAULT));
     }
 
-    private void writeUpdate(File dir, File file, String content) throws IOException {
+    private void writeUpdate(File dir, File file, byte[] content) throws IOException {
         FileOutputStream out = null;
         File tmp = null;
         try {
@@ -240,7 +238,7 @@
             tmp.setReadable(true, false);
             // write to it
             out = new FileOutputStream(tmp);
-            out.write(content.getBytes());
+            out.write(content);
             // sync to disk
             out.getFD().sync();
             // atomic rename
@@ -255,8 +253,8 @@
         }
     }
 
-    private void install(String content, int version) throws IOException {
+    protected void install(byte[] content, int version) throws IOException {
         writeUpdate(updateDir, updateContent, content);
-        writeUpdate(updateDir, updateVersion, Long.toString(version));
+        writeUpdate(updateDir, updateVersion, Long.toString(version).getBytes());
     }
 }
diff --git a/services/java/com/android/server/updates/TZInfoInstallReceiver.java b/services/java/com/android/server/updates/TZInfoInstallReceiver.java
new file mode 100644
index 0000000..83adbdb
--- /dev/null
+++ b/services/java/com/android/server/updates/TZInfoInstallReceiver.java
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+package com.android.server.updates;
+
+import android.util.Base64;
+import android.util.Slog;
+
+import java.io.IOException;
+
+public class TZInfoInstallReceiver extends ConfigUpdateInstallReceiver {
+
+    public TZInfoInstallReceiver() {
+        super("/data/misc/zoneinfo/", "tzdata", "metadata/", "version");
+    }
+
+    @Override
+    protected void install(byte[] encodedContent, int version) throws IOException {
+        super.install(Base64.decode(encodedContent, Base64.DEFAULT), version);
+    }
+}
diff --git a/services/java/com/android/server/usb/UsbDebuggingManager.java b/services/java/com/android/server/usb/UsbDebuggingManager.java
index 1bb3a2c..93d3114 100644
--- a/services/java/com/android/server/usb/UsbDebuggingManager.java
+++ b/services/java/com/android/server/usb/UsbDebuggingManager.java
@@ -151,6 +151,7 @@
         private static final int MESSAGE_ADB_ALLOW = 3;
         private static final int MESSAGE_ADB_DENY = 4;
         private static final int MESSAGE_ADB_CONFIRM = 5;
+        private static final int MESSAGE_ADB_CLEAR = 6;
 
         public UsbDebuggingHandler(Looper looper) {
             super(looper);
@@ -214,6 +215,10 @@
                     showConfirmationDialog(key, mFingerprints);
                     break;
                 }
+
+                case MESSAGE_ADB_CLEAR:
+                    deleteKeyFile();
+                    break;
             }
         }
     }
@@ -257,17 +262,25 @@
         }
     }
 
-    private void writeKey(String key) {
+    private File getUserKeyFile() {
         File dataDir = Environment.getDataDirectory();
         File adbDir = new File(dataDir, ADB_DIRECTORY);
 
         if (!adbDir.exists()) {
             Slog.e(TAG, "ADB data directory does not exist");
-            return;
+            return null;
         }
 
+        return new File(adbDir, ADB_KEYS_FILE);
+    }
+
+    private void writeKey(String key) {
         try {
-            File keyFile = new File(adbDir, ADB_KEYS_FILE);
+            File keyFile = getUserKeyFile();
+
+            if (keyFile == null) {
+                return;
+            }
 
             if (!keyFile.exists()) {
                 keyFile.createNewFile();
@@ -286,6 +299,12 @@
         }
     }
 
+    private void deleteKeyFile() {
+        File keyFile = getUserKeyFile();
+        if (keyFile != null) {
+            keyFile.delete();
+        }
+    }
 
     public void setAdbEnabled(boolean enabled) {
         mHandler.sendEmptyMessage(enabled ? UsbDebuggingHandler.MESSAGE_ADB_ENABLED
@@ -303,6 +322,9 @@
         mHandler.sendEmptyMessage(UsbDebuggingHandler.MESSAGE_ADB_DENY);
     }
 
+    public void clearUsbDebuggingKeys() {
+        mHandler.sendEmptyMessage(UsbDebuggingHandler.MESSAGE_ADB_CLEAR);
+    }
 
     public void dump(FileDescriptor fd, PrintWriter pw) {
         pw.println("  USB Debugging State:");
diff --git a/services/java/com/android/server/usb/UsbDeviceManager.java b/services/java/com/android/server/usb/UsbDeviceManager.java
index c7c2c62..87aa8cce 100644
--- a/services/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/java/com/android/server/usb/UsbDeviceManager.java
@@ -169,7 +169,9 @@
             startAccessoryMode();
         }
 
-        if ("1".equals(SystemProperties.get("ro.adb.secure"))) {
+        boolean secureAdbEnabled = SystemProperties.getBoolean("ro.adb.secure", false);
+        boolean dataEncrypted = "1".equals(SystemProperties.get("vold.decrypt"));
+        if (secureAdbEnabled && !dataEncrypted) {
             mDebuggingManager = new UsbDebuggingManager(context);
         }
     }
@@ -862,6 +864,15 @@
         }
     }
 
+    public void clearUsbDebuggingKeys() {
+        if (mDebuggingManager != null) {
+            mDebuggingManager.clearUsbDebuggingKeys();
+        } else {
+            throw new RuntimeException("Cannot clear Usb Debugging keys, "
+                        + "UsbDebuggingManager not enabled");
+        }
+    }
+
     public void dump(FileDescriptor fd, PrintWriter pw) {
         if (mHandler != null) {
             mHandler.dump(fd, pw);
diff --git a/services/java/com/android/server/usb/UsbService.java b/services/java/com/android/server/usb/UsbService.java
index 3918d15..36669b1 100644
--- a/services/java/com/android/server/usb/UsbService.java
+++ b/services/java/com/android/server/usb/UsbService.java
@@ -255,6 +255,12 @@
     }
 
     @Override
+    public void clearUsbDebuggingKeys() {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        mDeviceManager.clearUsbDebuggingKeys();
+    }
+
+    @Override
     public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
         final IndentingPrintWriter pw = new IndentingPrintWriter(writer, "  ");
diff --git a/services/java/com/android/server/usb/UsbSettingsManager.java b/services/java/com/android/server/usb/UsbSettingsManager.java
index 4b2bbfe..f9aaa17 100644
--- a/services/java/com/android/server/usb/UsbSettingsManager.java
+++ b/services/java/com/android/server/usb/UsbSettingsManager.java
@@ -364,8 +364,9 @@
         }
 
         @Override
-        public void onPackageChanged(String packageName, int uid, String[] components) {
+        public boolean onPackageChanged(String packageName, int uid, String[] components) {
             handlePackageUpdate(packageName);
+            return false;
         }
 
         @Override
diff --git a/services/java/com/android/server/wm/AppWindowToken.java b/services/java/com/android/server/wm/AppWindowToken.java
index 0ada604..8fd5209 100644
--- a/services/java/com/android/server/wm/AppWindowToken.java
+++ b/services/java/com/android/server/wm/AppWindowToken.java
@@ -30,6 +30,10 @@
 import android.view.WindowManager;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
+
+class AppTokenList extends ArrayList<AppWindowToken> {
+}
 
 /**
  * Version of WindowToken that is specifically for a particular application (or
diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java
index 59e4b0e..906ea57 100644
--- a/services/java/com/android/server/wm/DisplayContent.java
+++ b/services/java/com/android/server/wm/DisplayContent.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import android.util.SparseArray;
 import android.view.Display;
 import android.view.DisplayInfo;
 
@@ -33,6 +34,7 @@
  * WindowManagerService.mWindowMap.
  */
 class DisplayContent {
+//    private final static String TAG = "DisplayContent";
 
     /** Unique identifier of this stack. */
     private final int mDisplayId;
@@ -67,6 +69,38 @@
     final boolean isDefaultDisplay;
 
     /**
+     * List controlling the ordering of windows in different applications which must
+     * be kept in sync with ActivityManager.
+     */
+    final AppTokenList mAppTokens = new AppTokenList();
+
+    /**
+     * AppWindowTokens in the Z order they were in at the start of an animation. Between
+     * animations this list is maintained in the exact order of mAppTokens. If tokens
+     * are added to mAppTokens during an animation an attempt is made to insert them at the same
+     * logical location in this list. Note that this list is always in sync with mWindows.
+     */
+    AppTokenList mAnimatingAppTokens = new AppTokenList();
+
+    /**
+     * Window tokens that are in the process of exiting, but still
+     * on screen for animations.
+     */
+    final ArrayList<WindowToken> mExitingTokens = new ArrayList<WindowToken>();
+
+    /**
+     * Application tokens that are in the process of exiting, but still
+     * on screen for animations.
+     */
+    final AppTokenList mExitingAppTokens = new AppTokenList();
+
+    /**
+     * Sorted most recent at top, oldest at [0].
+     */
+//    ArrayList<TaskList> mTaskLists = new ArrayList<TaskList>();
+    SparseArray<TaskList> mTaskIdToTaskList = new SparseArray<TaskList>();
+
+    /**
      * @param display May not be null.
      */
     DisplayContent(Display display) {
@@ -96,6 +130,71 @@
         mDisplay.getDisplayInfo(mDisplayInfo);
     }
 
+    /**
+     *  Find the location to insert a new AppWindowToken into the window-ordered app token list.
+     * @param addPos The location the token was inserted into in mAppTokens.
+     * @param atoken The token to insert.
+     */
+    void addAppToken(final int addPos, final AppWindowToken atoken) {
+        mAppTokens.add(addPos, atoken);
+
+        if (addPos == 0 || addPos == mAnimatingAppTokens.size()) {
+            // It was inserted into the beginning or end of mAppTokens. Honor that.
+            mAnimatingAppTokens.add(addPos, atoken);
+        } else {
+            // Find the item immediately above the mAppTokens insertion point and put the token
+            // immediately below that one in mAnimatingAppTokens.
+            final AppWindowToken aboveAnchor = mAppTokens.get(addPos + 1);
+            mAnimatingAppTokens.add(mAnimatingAppTokens.indexOf(aboveAnchor), atoken);
+        }
+
+        TaskList task = mTaskIdToTaskList.get(atoken.groupId);
+        if (task == null) {
+            mTaskIdToTaskList.put(atoken.groupId, new TaskList(atoken));
+        }
+    }
+
+    void removeAppToken(final AppWindowToken wtoken) {
+        mAppTokens.remove(wtoken);
+        mAnimatingAppTokens.remove(wtoken);
+        final int taskId = wtoken.groupId;
+        final TaskList task = mTaskIdToTaskList.get(taskId);
+        if (task != null) {
+            AppTokenList appTokens = task.mAppTokens;
+            appTokens.remove(wtoken);
+            if (appTokens.size() == 0) {
+                mTaskIdToTaskList.delete(taskId);
+            }
+        }
+    }
+
+    void refillAnimatingAppTokens() {
+        mAnimatingAppTokens.clear();
+        mAnimatingAppTokens.addAll(mAppTokens);
+    }
+
+    void setAppTaskId(AppWindowToken wtoken, int newTaskId) {
+        final int taskId = wtoken.groupId;
+        TaskList task = mTaskIdToTaskList.get(taskId);
+        if (task != null) {
+            AppTokenList appTokens = task.mAppTokens;
+            appTokens.remove(wtoken);
+            if (appTokens.size() == 0) {
+                mTaskIdToTaskList.delete(taskId);
+            }
+        }
+
+        task = mTaskIdToTaskList.get(newTaskId);
+        if (task == null) {
+            task = new TaskList(wtoken);
+            mTaskIdToTaskList.put(newTaskId, task);
+        } else {
+            task.mAppTokens.add(wtoken);
+        }
+
+        wtoken.groupId = newTaskId;
+    }
+
     public void dump(String prefix, PrintWriter pw) {
         pw.print(prefix); pw.print("Display: mDisplayId="); pw.println(mDisplayId);
         final String subPrefix = "  " + prefix;
@@ -119,7 +218,48 @@
             pw.print("x"); pw.print(mDisplayInfo.smallestNominalAppHeight);
             pw.print("-"); pw.print(mDisplayInfo.largestNominalAppWidth);
             pw.print("x"); pw.println(mDisplayInfo.largestNominalAppHeight);
-        pw.print(subPrefix); pw.print("layoutNeeded="); pw.print(layoutNeeded);
+            if (mAppTokens.size() > 0) {
+                pw.println();
+                pw.println("  Application tokens in Z order:");
+                for (int i=mAppTokens.size()-1; i>=0; i--) {
+                    pw.print("  App #"); pw.print(i);
+                            pw.print(' '); pw.print(mAppTokens.get(i)); pw.println(":");
+                    mAppTokens.get(i).dump(pw, "    ");
+                }
+            }
+            if (mExitingTokens.size() > 0) {
+                pw.println();
+                pw.println("  Exiting tokens:");
+                for (int i=mExitingTokens.size()-1; i>=0; i--) {
+                    WindowToken token = mExitingTokens.get(i);
+                    pw.print("  Exiting #"); pw.print(i);
+                    pw.print(' '); pw.print(token);
+                    pw.println(':');
+                    token.dump(pw, "    ");
+                }
+            }
+            if (mExitingAppTokens.size() > 0) {
+                pw.println();
+                pw.println("  Exiting application tokens:");
+                for (int i=mExitingAppTokens.size()-1; i>=0; i--) {
+                    WindowToken token = mExitingAppTokens.get(i);
+                    pw.print("  Exiting App #"); pw.print(i);
+                      pw.print(' '); pw.print(token);
+                      pw.println(':');
+                      token.dump(pw, "    ");
+                }
+            }
+            if (mTaskIdToTaskList.size() > 0) {
+                pw.println();
+                for (int i = 0; i < mTaskIdToTaskList.size(); ++i) {
+                    pw.print("  TaskList #"); pw.print(i);
+                      pw.print(" taskId="); pw.println(mTaskIdToTaskList.keyAt(i));
+                    pw.print("    mAppTokens=");
+                      pw.println(mTaskIdToTaskList.valueAt(i).mAppTokens);
+                    pw.println();
+                }
+            }
+        pw.print(subPrefix); pw.print("layoutNeeded="); pw.println(layoutNeeded);
         pw.println();
     }
 }
diff --git a/services/java/com/android/server/wm/DisplayMagnifier.java b/services/java/com/android/server/wm/DisplayMagnifier.java
index d3c01f0..6e876f6 100644
--- a/services/java/com/android/server/wm/DisplayMagnifier.java
+++ b/services/java/com/android/server/wm/DisplayMagnifier.java
@@ -228,6 +228,10 @@
         return spec;
     }
 
+    public void destroyLocked() {
+        mMagnifedViewport.destroyWindow();
+    }
+
     /** NOTE: This has to be called within a surface transaction. */
     public void drawMagnifiedRegionBorderIfNeededLocked() {
         mMagnifedViewport.drawWindowIfNeededLocked();
@@ -258,7 +262,7 @@
         private final int mBorderWidth;
         private final int mHalfBorderWidth;
 
-        private ViewportWindow mWindow;
+        private final ViewportWindow mWindow;
 
         private boolean mFullRedrawNeeded;
 
@@ -459,6 +463,10 @@
             mWindow.drawIfNeeded();
         }
 
+        public void destroyWindow() {
+            mWindow.releaseSurface();
+        }
+
         private final class ViewportWindow {
             private static final String SURFACE_TITLE = "Magnification Overlay";
 
@@ -640,6 +648,10 @@
                     }
                 }
             }
+
+            public void releaseSurface() {
+                mSurface.release();
+            }
         }
     }
 
diff --git a/services/java/com/android/server/wm/TaskList.java b/services/java/com/android/server/wm/TaskList.java
new file mode 100644
index 0000000..fe12b98
--- /dev/null
+++ b/services/java/com/android/server/wm/TaskList.java
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+
+package com.android.server.wm;
+
+import com.android.server.am.TaskGroup;
+
+class TaskList extends TaskGroup {
+//    private final String TAG = "TaskGroup";
+    AppTokenList mAppTokens = new AppTokenList();
+
+    TaskList(AppWindowToken wtoken) {
+        taskId = wtoken.groupId;
+        tokens.add(wtoken.appToken);
+        mAppTokens.add(wtoken);
+    }
+}
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java
index d42221e..546bf2f 100644
--- a/services/java/com/android/server/wm/WindowAnimator.java
+++ b/services/java/com/android/server/wm/WindowAnimator.java
@@ -171,9 +171,10 @@
         }
     }
 
-    private void updateAppWindowsLocked() {
+    private void updateAppWindowsLocked(int displayId) {
         int i;
-        final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens;
+        final DisplayContent displayContent = mService.getDisplayContentLocked(displayId);
+        final AppTokenList appTokens = displayContent.mAnimatingAppTokens;
         final int NAT = appTokens.size();
         for (i=0; i<NAT; i++) {
             final AppWindowAnimator appAnimator = appTokens.get(i).mAppAnimator;
@@ -190,9 +191,10 @@
             }
         }
 
-        final int NEAT = mService.mExitingAppTokens.size();
+        final AppTokenList exitingAppTokens = displayContent.mExitingAppTokens;
+        final int NEAT = exitingAppTokens.size();
         for (i=0; i<NEAT; i++) {
-            final AppWindowAnimator appAnimator = mService.mExitingAppTokens.get(i).mAppAnimator;
+            final AppWindowAnimator appAnimator = exitingAppTokens.get(i).mAppAnimator;
             final boolean wasAnimating = appAnimator.animation != null
                     && appAnimator.animation != AppWindowAnimator.sDummyAnimation;
             if (appAnimator.stepAnimationLocked(mCurrentTime)) {
@@ -453,10 +455,11 @@
 
     /** See if any windows have been drawn, so they (and others associated with them) can now be
      *  shown. */
-    private void testTokenMayBeDrawnLocked() {
+    private void testTokenMayBeDrawnLocked(int displayId) {
         // See if any windows have been drawn, so they (and others
         // associated with them) can now be shown.
-        final ArrayList<AppWindowToken> appTokens = mService.mAnimatingAppTokens;
+        final AppTokenList appTokens =
+                mService.getDisplayContentLocked(displayId).mAnimatingAppTokens;
         final int NT = appTokens.size();
         for (int i=0; i<NT; i++) {
             AppWindowToken wtoken = appTokens.get(i);
@@ -529,11 +532,10 @@
         Surface.openTransaction();
         Surface.setAnimationTransaction();
         try {
-            updateAppWindowsLocked();
-
             final int numDisplays = mDisplayContentsAnimators.size();
             for (int i = 0; i < numDisplays; i++) {
                 final int displayId = mDisplayContentsAnimators.keyAt(i);
+                updateAppWindowsLocked(displayId);
                 DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i);
 
                 final ScreenRotationAnimation screenRotationAnimation =
@@ -559,10 +561,11 @@
                 }
             }
 
-            testTokenMayBeDrawnLocked();
-
             for (int i = 0; i < numDisplays; i++) {
                 final int displayId = mDisplayContentsAnimators.keyAt(i);
+
+                testTokenMayBeDrawnLocked(displayId);
+
                 DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i);
 
                 final ScreenRotationAnimation screenRotationAnimation =
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index ff2dc0f..62eccdf 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -42,6 +42,7 @@
 
 import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
 
+import android.app.AppOpsManager;
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.policy.PolicyManager;
 import com.android.internal.policy.impl.PhoneWindowManager;
@@ -53,6 +54,7 @@
 import com.android.server.EventLogTags;
 import com.android.server.Watchdog;
 import com.android.server.am.BatteryStatsService;
+import com.android.server.am.TaskGroup;
 import com.android.server.display.DisplayManagerService;
 import com.android.server.input.InputManagerService;
 import com.android.server.power.PowerManagerService;
@@ -179,7 +181,7 @@
     static final boolean DEBUG_INPUT_METHOD = false;
     static final boolean DEBUG_VISIBILITY = false;
     static final boolean DEBUG_WINDOW_MOVEMENT = false;
-    static final boolean DEBUG_TOKEN_MOVEMENT = false;
+    static final boolean DEBUG_TOKEN_MOVEMENT = true;
     static final boolean DEBUG_ORIENTATION = false;
     static final boolean DEBUG_APP_ORIENTATION = false;
     static final boolean DEBUG_CONFIGURATION = false;
@@ -311,6 +313,8 @@
 
     final IBatteryStats mBatteryStats;
 
+    final AppOpsManager mAppOps;
+
     /**
      * All currently active sessions with clients.
      */
@@ -330,32 +334,6 @@
             new HashMap<IBinder, WindowToken>();
 
     /**
-     * Window tokens that are in the process of exiting, but still
-     * on screen for animations.
-     */
-    final ArrayList<WindowToken> mExitingTokens = new ArrayList<WindowToken>();
-
-    /**
-     * List controlling the ordering of windows in different applications which must
-     * be kept in sync with ActivityManager.
-     */
-    final ArrayList<AppWindowToken> mAppTokens = new ArrayList<AppWindowToken>();
-
-    /**
-     * AppWindowTokens in the Z order they were in at the start of an animation. Between
-     * animations this list is maintained in the exact order of mAppTokens. If tokens
-     * are added to mAppTokens during an animation an attempt is made to insert them at the same
-     * logical location in this list. Note that this list is always in sync with mWindows.
-     */
-    ArrayList<AppWindowToken> mAnimatingAppTokens = new ArrayList<AppWindowToken>();
-
-    /**
-     * Application tokens that are in the process of exiting, but still
-     * on screen for animations.
-     */
-    final ArrayList<AppWindowToken> mExitingAppTokens = new ArrayList<AppWindowToken>();
-
-    /**
      * List of window tokens that have finished starting their application,
      * and now need to have the policy remove their windows.
      */
@@ -438,8 +416,10 @@
 
     String mLastANRState;
 
-    /** All DisplayDontents in the world, kept here */
+    /** All DisplayContents in the world, kept here */
     private SparseArray<DisplayContent> mDisplayContents = new SparseArray<DisplayContent>();
+    private SparseArray<DisplayContent> mTaskIdToDisplayContents =
+            new SparseArray<DisplayContent>();
 
     int mRotation = 0;
     int mForcedAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
@@ -765,6 +745,7 @@
 
         mActivityManager = ActivityManagerNative.getDefault();
         mBatteryStats = BatteryStatsService.getService();
+        mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
 
         // Get persisted window scale setting
         mWindowAnimationScale = Settings.Global.getFloat(context.getContentResolver(),
@@ -949,10 +930,11 @@
                         + client.asBinder() + " (token=" + token + ")");
                     // Figure out where the window should go, based on the
                     // order of applications.
-                    final int NA = mAnimatingAppTokens.size();
+                    AppTokenList animatingAppTokens = displayContent.mAnimatingAppTokens;
+                    final int NA = animatingAppTokens.size();
                     WindowState pos = null;
                     for (i=NA-1; i>=0; i--) {
-                        AppWindowToken t = mAnimatingAppTokens.get(i);
+                        AppWindowToken t = animatingAppTokens.get(i);
                         if (t == token) {
                             i--;
                             break;
@@ -988,8 +970,8 @@
                         // Continue looking down until we find the first
                         // token that has windows on this display.
                         while (i >= 0) {
-                            AppWindowToken t = mAnimatingAppTokens.get(i);
-                            tokenWindowList = getTokenWindowsOnDisplay(t, win.mDisplayContent);
+                            AppWindowToken t = animatingAppTokens.get(i);
+                            tokenWindowList = getTokenWindowsOnDisplay(t, displayContent);
                             final int NW = tokenWindowList.size();
                             if (NW > 0) {
                                 pos = tokenWindowList.get(NW-1);
@@ -2024,7 +2006,8 @@
     public int addWindow(Session session, IWindow client, int seq,
             WindowManager.LayoutParams attrs, int viewVisibility, int displayId,
             Rect outContentInsets, InputChannel outInputChannel) {
-        int res = mPolicy.checkAddPermission(attrs);
+        int[] appOp = new int[1];
+        int res = mPolicy.checkAddPermission(attrs, appOp);
         if (res != WindowManagerGlobal.ADD_OKAY) {
             return res;
         }
@@ -2128,7 +2111,7 @@
             }
 
             win = new WindowState(this, session, client, token,
-                    attachedWindow, seq, attrs, viewVisibility, displayContent);
+                    attachedWindow, appOp[0], seq, attrs, viewVisibility, displayContent);
             if (win.mDeathRecipient == null) {
                 // Client has apparently died, so there is no reason to
                 // continue.
@@ -2166,6 +2149,9 @@
             }
             win.attach();
             mWindowMap.put(client.asBinder(), win);
+            if (win.mAppOp != AppOpsManager.OP_NONE) {
+                mAppOps.startOpNoThrow(win.mAppOp, win.getOwningUid(), win.getOwningPackage());
+            }
 
             if (type == TYPE_APPLICATION_STARTING && token.appWindowToken != null) {
                 token.appWindowToken.startingWindow = win;
@@ -2376,6 +2362,9 @@
 
         if (DEBUG_ADD_REMOVE) Slog.v(TAG, "removeWindowInnerLocked: " + win);
         mWindowMap.remove(win.mClient.asBinder());
+        if (win.mAppOp != AppOpsManager.OP_NONE) {
+            mAppOps.finishOp(win.mAppOp, win.getOwningUid(), win.getOwningPackage());
+        }
 
         final WindowList windows = win.getWindowList();
         windows.remove(win);
@@ -3039,7 +3028,10 @@
                 mDisplayMagnifier = new DisplayMagnifier(this, callbacks);
             } else {
                 if (callbacks == null) {
-                    mDisplayMagnifier = null;
+                    if (mDisplayMagnifier != null) {
+                        mDisplayMagnifier.destroyLocked();
+                        mDisplayMagnifier = null;
+                    }
                 } else {
                     throw new IllegalStateException("Magnification callbacks already set!");
                 }
@@ -3082,28 +3074,56 @@
     // Application Window Tokens
     // -------------------------------------------------------------
 
-    public void validateAppTokens(List<IBinder> tokens) {
-        int v = tokens.size()-1;
-        int m = mAppTokens.size()-1;
-        while (v >= 0 && m >= 0) {
-            AppWindowToken atoken = mAppTokens.get(m);
-            if (atoken.removed) {
+    public void validateAppTokens(List<TaskGroup> tasks) {
+        int t = tasks.size() - 1;
+        if (t < 0) {
+            Slog.w(TAG, "validateAppTokens: empty task list");
+            return;
+        }
+
+        TaskGroup task = tasks.get(0);
+        int taskId = task.taskId;
+        DisplayContent displayContent = mTaskIdToDisplayContents.get(taskId);
+        if (displayContent == null) {
+            Slog.w(TAG, "validateAppTokens: no Display for taskId=" + taskId);
+            return;
+        }
+        AppTokenList appTokens = displayContent.mAppTokens;
+        int m = appTokens.size() - 1;
+
+        for ( ; t >= 0; --t) {
+            task = tasks.get(t);
+            List<IApplicationToken> tokens = task.tokens;
+            int v = task.tokens.size() - 1;
+
+            DisplayContent lastDisplayContent = displayContent;
+            displayContent = mTaskIdToDisplayContents.get(taskId);
+            if (displayContent != lastDisplayContent) {
+                Slog.w(TAG, "validateAppTokens: displayContent changed in TaskGroup list!");
+                return;
+            }
+
+            while (v >= 0 && m >= 0) {
+                AppWindowToken atoken = appTokens.get(m);
+                if (atoken.removed) {
+                    m--;
+                    continue;
+                }
+                if (tokens.get(v) != atoken.token) {
+                    Slog.w(TAG, "Tokens out of sync: external is " + tokens.get(v)
+                          + " @ " + v + ", internal is " + atoken.token + " @ " + m);
+                }
+                v--;
                 m--;
-                continue;
             }
-            if (tokens.get(v) != atoken.token) {
-                Slog.w(TAG, "Tokens out of sync: external is " + tokens.get(v)
-                      + " @ " + v + ", internal is " + atoken.token + " @ " + m);
+            while (v >= 0) {
+                Slog.w(TAG, "External token not found: " + tokens.get(v) + " @ " + v);
+                v--;
             }
-            v--;
-            m--;
         }
-        while (v >= 0) {
-            Slog.w(TAG, "External token not found: " + tokens.get(v) + " @ " + v);
-            v--;
-        }
+
         while (m >= 0) {
-            AppWindowToken atoken = mAppTokens.get(m);
+            AppWindowToken atoken = appTokens.get(m);
             if (!atoken.removed) {
                 Slog.w(TAG, "Invalid internal atoken: " + atoken.token + " @ " + m);
             }
@@ -3171,6 +3191,7 @@
 
         final long origId = Binder.clearCallingIdentity();
         synchronized(mWindowMap) {
+            DisplayContent displayContent = null;
             WindowToken wtoken = mTokenMap.remove(token);
             if (wtoken != null) {
                 boolean delayed = false;
@@ -3180,6 +3201,7 @@
 
                     for (int i=0; i<N; i++) {
                         WindowState win = wtoken.windows.get(i);
+                        displayContent = win.mDisplayContent;
 
                         if (win.mWinAnimator.isAnimating()) {
                             delayed = true;
@@ -3189,13 +3211,12 @@
                             win.mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_EXIT,
                                     false);
                             //TODO (multidisplay): Magnification is supported only for the default
-                            if (mDisplayMagnifier != null
-                                    && win.getDisplayId() == Display.DEFAULT_DISPLAY) {
+                            if (mDisplayMagnifier != null && win.isDefaultDisplay()) {
                                 mDisplayMagnifier.onWindowTransitionLocked(win,
                                         WindowManagerPolicy.TRANSIT_EXIT);
                             }
                             changed = true;
-                            win.mDisplayContent.layoutNeeded = true;
+                            displayContent.layoutNeeded = true;
                         }
                     }
 
@@ -3208,7 +3229,7 @@
                     }
 
                     if (delayed) {
-                        mExitingTokens.add(wtoken);
+                        displayContent.mExitingTokens.add(wtoken);
                     } else if (wtoken.windowType == TYPE_WALLPAPER) {
                         mWallpaperTokens.remove(wtoken);
                     }
@@ -3222,27 +3243,9 @@
         Binder.restoreCallingIdentity(origId);
     }
 
-    /**
-     *  Find the location to insert a new AppWindowToken into the window-ordered app token list.
-     *  Note that mAppTokens.size() == mAnimatingAppTokens.size() + 1.
-     * @param addPos The location the token was inserted into in mAppTokens.
-     * @param atoken The token to insert.
-     */
-    private void addAppTokenToAnimating(final int addPos, final AppWindowToken atoken) {
-        if (addPos == 0 || addPos == mAnimatingAppTokens.size()) {
-            // It was inserted into the beginning or end of mAppTokens. Honor that.
-            mAnimatingAppTokens.add(addPos, atoken);
-            return;
-        }
-        // Find the item immediately above the mAppTokens insertion point and put the token
-        // immediately below that one in mAnimatingAppTokens.
-        final AppWindowToken aboveAnchor = mAppTokens.get(addPos + 1);
-        mAnimatingAppTokens.add(mAnimatingAppTokens.indexOf(aboveAnchor), atoken);
-    }
-
     @Override
     public void addAppToken(int addPos, IApplicationToken token,
-            int groupId, int requestedOrientation, boolean fullscreen, boolean showWhenLocked) {
+            int taskId, int requestedOrientation, boolean fullscreen, boolean showWhenLocked) {
         if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,
                 "addAppToken()")) {
             throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
@@ -3270,15 +3273,21 @@
             }
             atoken = new AppWindowToken(this, token);
             atoken.inputDispatchingTimeoutNanos = inputDispatchingTimeoutNanos;
-            atoken.groupId = groupId;
+            atoken.groupId = taskId;
             atoken.appFullscreen = fullscreen;
             atoken.showWhenLocked = showWhenLocked;
             atoken.requestedOrientation = requestedOrientation;
             if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken
                     + " at " + addPos);
-            mAppTokens.add(addPos, atoken);
-            addAppTokenToAnimating(addPos, atoken);
+
+            DisplayContent displayContent = mTaskIdToDisplayContents.get(taskId);
+            if (displayContent == null) {
+                displayContent = getDefaultDisplayContentLocked();
+                mTaskIdToDisplayContents.put(taskId, displayContent);
+            }
+            displayContent.addAppToken(addPos, atoken);
             mTokenMap.put(token.asBinder(), atoken);
+            mTaskIdToDisplayContents.put(taskId, displayContent);
 
             // Application tokens start out hidden.
             atoken.hidden = true;
@@ -3301,7 +3310,7 @@
                 Slog.w(TAG, "Attempted to set group id of non-existing app token: " + token);
                 return;
             }
-            atoken.groupId = groupId;
+            mTaskIdToDisplayContents.get(atoken.groupId).setAppTaskId(atoken, groupId);
         }
     }
 
@@ -3347,8 +3356,11 @@
         boolean findingBehind = false;
         boolean haveGroup = false;
         boolean lastFullscreen = false;
-        for (int pos = mAppTokens.size() - 1; pos >= 0; pos--) {
-            AppWindowToken atoken = mAppTokens.get(pos);
+        // TODO: Multi window.
+        DisplayContent displayContent = getDefaultDisplayContentLocked();
+        AppTokenList appTokens = displayContent.mAppTokens;
+        for (int pos = appTokens.size() - 1; pos >= 0; pos--) {
+            AppWindowToken atoken = appTokens.get(pos);
 
             if (DEBUG_APP_ORIENTATION) Slog.v(TAG, "Checking app orientation: " + atoken);
 
@@ -4261,7 +4273,7 @@
                     // set the token aside because it has an active animation to be finished
                     if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
                             "removeAppToken make exiting: " + wtoken);
-                    mExitingAppTokens.add(wtoken);
+                    mTaskIdToDisplayContents.get(wtoken.groupId).mExitingAppTokens.add(wtoken);
                 } else {
                     // Make sure there is no animation running on this token,
                     // so any windows associated with it will be removed as
@@ -4271,8 +4283,7 @@
                 }
                 if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
                         "removeAppToken: " + wtoken);
-                mAppTokens.remove(wtoken);
-                mAnimatingAppTokens.remove(wtoken);
+                mTaskIdToDisplayContents.get(wtoken.groupId).removeAppToken(wtoken);
                 wtoken.removed = true;
                 if (wtoken.startingData != null) {
                     startingToken = wtoken;
@@ -4324,14 +4335,26 @@
     }
 
     void dumpAppTokensLocked() {
-        for (int i=mAppTokens.size()-1; i>=0; i--) {
-            Slog.v(TAG, "  #" + i + ": " + mAppTokens.get(i).token);
+        DisplayContentsIterator iterator = new DisplayContentsIterator();
+        while (iterator.hasNext()) {
+            DisplayContent displayContent = iterator.next();
+            Slog.v(TAG, "  Display " + displayContent.getDisplayId());
+            AppTokenList appTokens = displayContent.mAppTokens;
+            for (int i=appTokens.size()-1; i>=0; i--) {
+                Slog.v(TAG, "  #" + i + ": " + appTokens.get(i).token);
+            }
         }
     }
 
     void dumpAnimatingAppTokensLocked() {
-        for (int i=mAnimatingAppTokens.size()-1; i>=0; i--) {
-            Slog.v(TAG, "  #" + i + ": " + mAnimatingAppTokens.get(i).token);
+        DisplayContentsIterator iterator = new DisplayContentsIterator();
+        while (iterator.hasNext()) {
+            DisplayContent displayContent = iterator.next();
+            Slog.v(TAG, "  Display " + displayContent.getDisplayId());
+            AppTokenList appTokens = displayContent.mAnimatingAppTokens;
+            for (int i=appTokens.size()-1; i>=0; i--) {
+                Slog.v(TAG, "  #" + i + ": " + appTokens.get(i).token);
+            }
         }
     }
 
@@ -4344,10 +4367,11 @@
         }
     }
 
-    private int findWindowOffsetLocked(WindowList windows, int tokenPos) {
+    private int findWindowOffsetLocked(DisplayContent displayContent, int tokenPos) {
+        final WindowList windows = displayContent.getWindowList();
         final int NW = windows.size();
 
-        if (tokenPos >= mAnimatingAppTokens.size()) {
+        if (tokenPos >= displayContent.mAnimatingAppTokens.size()) {
             int i = NW;
             while (i > 0) {
                 i--;
@@ -4358,10 +4382,11 @@
             }
         }
 
+        final AppTokenList appTokens = displayContent.mAppTokens;
         while (tokenPos > 0) {
             // Find the first app token below the new position that has
             // a window displayed.
-            final AppWindowToken wtoken = mAppTokens.get(tokenPos-1);
+            final AppWindowToken wtoken = appTokens.get(tokenPos-1);
             if (DEBUG_REORDER) Slog.v(TAG, "Looking for lower windows @ "
                     + tokenPos + " -- " + wtoken.token);
             if (wtoken.sendingToBottom) {
@@ -4455,28 +4480,29 @@
             if (DEBUG_REORDER) Slog.v(TAG, "Initial app tokens:");
             if (DEBUG_REORDER) dumpAppTokensLocked();
             final AppWindowToken wtoken = findAppWindowToken(token);
-            final int oldIndex = mAppTokens.indexOf(wtoken);
+            DisplayContent displayContent = mTaskIdToDisplayContents.get(wtoken.groupId);
+            final AppTokenList appTokens = displayContent.mAppTokens;
+            final AppTokenList animatingAppTokens = displayContent.mAnimatingAppTokens;
+            final int oldIndex = appTokens.indexOf(wtoken);
             if (DEBUG_TOKEN_MOVEMENT || DEBUG_REORDER) Slog.v(TAG,
                     "Start moving token " + wtoken + " initially at "
                     + oldIndex);
             if (oldIndex > index && mAppTransition.isTransitionSet()) {
                 // animation towards back has not started, copy old list for duration of animation.
-                mAnimatingAppTokens.clear();
-                mAnimatingAppTokens.addAll(mAppTokens);
+                displayContent.refillAnimatingAppTokens();
             }
-            if (wtoken == null || !mAppTokens.remove(wtoken)) {
+            if (wtoken == null || !appTokens.remove(wtoken)) {
                 Slog.w(TAG, "Attempting to reorder token that doesn't exist: "
                       + token + " (" + wtoken + ")");
                 return;
             }
-            mAppTokens.add(index, wtoken);
+            appTokens.add(index, wtoken);
             if (DEBUG_REORDER) Slog.v(TAG, "Moved " + token + " to " + index + ":");
             else if (DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, "Moved " + token + " to " + index);
             if (DEBUG_REORDER) dumpAppTokensLocked();
             if (!mAppTransition.isTransitionSet()) {
                 // Not animating, bring animating app list in line with mAppTokens.
-                mAnimatingAppTokens.clear();
-                mAnimatingAppTokens.addAll(mAppTokens);
+                displayContent.refillAnimatingAppTokens();
 
                 // Bring window ordering, window focus and input window in line with new app token
                 final long origId = Binder.clearCallingIdentity();
@@ -4487,9 +4513,8 @@
                     if (DEBUG_REORDER) dumpWindowsLocked();
                     DisplayContentsIterator iterator = new DisplayContentsIterator();
                     while(iterator.hasNext()) {
-                        final DisplayContent displayContent = iterator.next();
-                        final WindowList windows = displayContent.getWindowList();
-                        final int pos = findWindowOffsetLocked(windows, index);
+                        displayContent = iterator.next();
+                        final int pos = findWindowOffsetLocked(displayContent, index);
                         final int newPos = reAddAppWindowsLocked(displayContent, pos, wtoken);
                         if (pos != newPos) {
                             displayContent.layoutNeeded = true;
@@ -4516,18 +4541,22 @@
         for (int i=0; i<N; i++) {
             IBinder token = tokens.get(i);
             final AppWindowToken wtoken = findAppWindowToken(token);
-            if (DEBUG_REORDER || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
-                    "Temporarily removing " + wtoken + " from " + mAppTokens.indexOf(wtoken));
-            if (!mAppTokens.remove(wtoken)) {
-                Slog.w(TAG, "Attempting to reorder token that doesn't exist: "
-                      + token + " (" + wtoken + ")");
-                i--;
-                N--;
+            if (wtoken != null) {
+                final DisplayContent displayContent = mTaskIdToDisplayContents.get(wtoken.groupId);
+                if (DEBUG_REORDER || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, "Temporarily removing "
+                        + wtoken + " from " + displayContent.mAppTokens.indexOf(wtoken));
+                if (!displayContent.mAppTokens.remove(wtoken)) {
+                    Slog.w(TAG, "Attempting to reorder token that doesn't exist: "
+                            + token + " (" + wtoken + ")");
+                    i--;
+                    N--;
+                }
             }
         }
     }
 
-    private void moveAppWindowsLocked(List<IBinder> tokens, int tokenPos) {
+    private void moveAppWindowsLocked(List<IBinder> tokens, DisplayContent displayContent,
+            int tokenPos) {
         // First remove all of the windows from the list.
         final int N = tokens.size();
         int i;
@@ -4539,26 +4568,21 @@
         }
 
         // And now add them back at the correct place.
-        DisplayContentsIterator iterator = new DisplayContentsIterator();
-        while (iterator.hasNext()) {
-            final DisplayContent displayContent = iterator.next();
-            final WindowList windows = displayContent.getWindowList();
-            // Where to start adding?
-            int pos = findWindowOffsetLocked(windows, tokenPos);
-            for (i=0; i<N; i++) {
-                WindowToken token = mTokenMap.get(tokens.get(i));
-                if (token != null) {
-                    final int newPos = reAddAppWindowsLocked(displayContent, pos, token);
-                    if (newPos != pos) {
-                        displayContent.layoutNeeded = true;
-                    }
-                    pos = newPos;
+        // Where to start adding?
+        int pos = findWindowOffsetLocked(displayContent, tokenPos);
+        for (i=0; i<N; i++) {
+            WindowToken token = mTokenMap.get(tokens.get(i));
+            if (token != null) {
+                final int newPos = reAddAppWindowsLocked(displayContent, pos, token);
+                if (newPos != pos) {
+                    displayContent.layoutNeeded = true;
                 }
+                pos = newPos;
             }
-            if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
-                    false /*updateInputWindows*/)) {
-                assignLayersLocked(windows);
-            }
+        }
+        if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
+            false /*updateInputWindows*/)) {
+            assignLayersLocked(displayContent.getWindowList());
         }
 
         mInputMonitor.setUpdateInputWindowsNeededLw();
@@ -4580,23 +4604,28 @@
 
         final long origId = Binder.clearCallingIdentity();
         synchronized(mWindowMap) {
+            DisplayContent displayContent = null;
             removeAppTokensLocked(tokens);
             final int N = tokens.size();
             for (int i=0; i<N; i++) {
                 AppWindowToken wt = findAppWindowToken(tokens.get(i));
                 if (wt != null) {
-                    if (DEBUG_TOKEN_MOVEMENT || DEBUG_REORDER) Slog.v(TAG,
-                            "Adding next to top: " + wt);
-                    mAppTokens.add(wt);
+                    if (DEBUG_TOKEN_MOVEMENT || DEBUG_REORDER) {
+                        Slog.v(TAG, "Adding next to top: " + wt);
+                        if (displayContent != null &&
+                                displayContent != mTaskIdToDisplayContents.get(wt.groupId)) Slog.e(
+                                    TAG, "moveAppTokensToTop: Not all tokens on same display");
+                    }
+                    displayContent = mTaskIdToDisplayContents.get(wt.groupId);
+                    displayContent.mAppTokens.add(wt);
                     if (mAppTransition.isTransitionSet()) {
                         wt.sendingToBottom = false;
                     }
                 }
             }
 
-            mAnimatingAppTokens.clear();
-            mAnimatingAppTokens.addAll(mAppTokens);
-            moveAppWindowsLocked(tokens, mAppTokens.size());
+            displayContent.refillAnimatingAppTokens();
+            moveAppWindowsLocked(tokens, displayContent, displayContent.mAppTokens.size());
         }
         Binder.restoreCallingIdentity(origId);
     }
@@ -4610,20 +4639,29 @@
 
         final long origId = Binder.clearCallingIdentity();
         synchronized(mWindowMap) {
+            DisplayContent displayContent = null;
             final int N = tokens.size();
             if (N > 0) {
                 // animating towards back, hang onto old list for duration of animation.
-                mAnimatingAppTokens.clear();
-                mAnimatingAppTokens.addAll(mAppTokens);
+                AppWindowToken wt = findAppWindowToken(tokens.get(0));
+                if (wt != null) {
+                    displayContent = mTaskIdToDisplayContents.get(wt.groupId);
+                    displayContent.refillAnimatingAppTokens();
+                }
             }
             removeAppTokensLocked(tokens);
             int pos = 0;
             for (int i=0; i<N; i++) {
                 AppWindowToken wt = findAppWindowToken(tokens.get(i));
                 if (wt != null) {
-                    if (DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
-                            "Adding next to bottom: " + wt + " at " + pos);
-                    mAppTokens.add(pos, wt);
+                    if (DEBUG_TOKEN_MOVEMENT) {
+                        Slog.v(TAG, "Adding next to bottom: " + wt + " at " + pos);
+                        if (displayContent != null &&
+                                displayContent != mTaskIdToDisplayContents.get(wt.groupId)) Slog.e(
+                                    TAG, "moveAppTokensToBottom: Not all tokens on same display");
+                    }
+                    displayContent = mTaskIdToDisplayContents.get(wt.groupId);
+                    displayContent.mAppTokens.add(pos, wt);
                     if (mAppTransition.isTransitionSet()) {
                         wt.sendingToBottom = true;
                     }
@@ -4631,9 +4669,8 @@
                 }
             }
 
-            mAnimatingAppTokens.clear();
-            mAnimatingAppTokens.addAll(mAppTokens);
-            moveAppWindowsLocked(tokens, 0);
+            displayContent.refillAnimatingAppTokens();
+            moveAppWindowsLocked(tokens, displayContent, 0);
         }
         Binder.restoreCallingIdentity(origId);
     }
@@ -5598,6 +5635,11 @@
     }
 
     @Override
+    public boolean isRotationFrozen() {
+        return mPolicy.getUserRotationMode() == WindowManagerPolicy.USER_ROTATION_LOCKED;
+    }
+
+    @Override
     public int watchRotation(IRotationWatcher watcher) {
         final IBinder watcherBinder = watcher.asBinder();
         IBinder.DeathRecipient dr = new IBinder.DeathRecipient() {
@@ -6875,8 +6917,7 @@
                         if (mAppTransition.isTransitionSet()) {
                             if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** APP TRANSITION TIMEOUT");
                             mAppTransition.setTimeout();
-                            mAnimatingAppTokens.clear();
-                            mAnimatingAppTokens.addAll(mAppTokens);
+                            getDefaultDisplayContentLocked().refillAnimatingAppTokens();
                             performLayoutAndPlaceSurfacesLocked();
                         }
                     }
@@ -6921,10 +6962,12 @@
                 case APP_FREEZE_TIMEOUT: {
                     synchronized (mWindowMap) {
                         Slog.w(TAG, "App freeze timeout expired.");
-                        int i = mAppTokens.size();
+                        DisplayContent displayContent = getDefaultDisplayContentLocked();
+                        AppTokenList appTokens = displayContent.mAppTokens;
+                        int i = appTokens.size();
                         while (i > 0) {
                             i--;
-                            AppWindowToken tok = mAppTokens.get(i);
+                            AppWindowToken tok = appTokens.get(i);
                             if (tok.mAppAnimator.freezingScreen) {
                                 Slog.w(TAG, "Force clearing freeze: " + tok);
                                 unsetAppFreezingScreenLocked(tok, true, true);
@@ -7378,15 +7421,17 @@
         // in the main app list, but still have windows shown.  We put them
         // in the back because now that the animation is over we no longer
         // will care about them.
-        int NT = mExitingAppTokens.size();
+        AppTokenList exitingAppTokens = displayContent.mExitingAppTokens;
+        int NT = exitingAppTokens.size();
         for (int j=0; j<NT; j++) {
-            i = reAddAppWindowsLocked(displayContent, i, mExitingAppTokens.get(j));
+            i = reAddAppWindowsLocked(displayContent, i, exitingAppTokens.get(j));
         }
 
         // And add in the still active app tokens in Z order.
-        NT = mAnimatingAppTokens.size();
+        AppTokenList animatingAppTokens = displayContent.mAnimatingAppTokens;
+        NT = animatingAppTokens.size();
         for (int j=0; j<NT; j++) {
-            i = reAddAppWindowsLocked(displayContent, i, mAnimatingAppTokens.get(j));
+            i = reAddAppWindowsLocked(displayContent, i, animatingAppTokens.get(j));
         }
 
         i -= lastBelow;
@@ -8052,11 +8097,12 @@
 
         mAppTransition.setIdle();
         // Restore window app tokens to the ActivityManager views
-        for (int i = mAnimatingAppTokens.size() - 1; i >= 0; i--) {
-            mAnimatingAppTokens.get(i).sendingToBottom = false;
+        final DisplayContent displayContent = getDefaultDisplayContentLocked();
+        final AppTokenList animatingAppTokens = displayContent.mAnimatingAppTokens;
+        for (int i = animatingAppTokens.size() - 1; i >= 0; i--) {
+            animatingAppTokens.get(i).sendingToBottom = false;
         }
-        mAnimatingAppTokens.clear();
-        mAnimatingAppTokens.addAll(mAppTokens);
+        displayContent.refillAnimatingAppTokens();
         rebuildAppWindowListLocked();
 
         changes |= PhoneWindowManager.FINISH_LAYOUT_REDO_LAYOUT;
@@ -8210,10 +8256,10 @@
         }
     }
 
-    private void updateAllDrawnLocked() {
+    private void updateAllDrawnLocked(DisplayContent displayContent) {
         // See if any windows have been drawn, so they (and others
         // associated with them) can now be shown.
-        final ArrayList<AppWindowToken> appTokens = mAnimatingAppTokens;
+        final AppTokenList appTokens = displayContent.mAnimatingAppTokens;
         final int NT = appTokens.size();
         for (int i=0; i<NT; i++) {
             AppWindowToken wtoken = appTokens.get(i);
@@ -8248,13 +8294,17 @@
         }
 
         // Initialize state of exiting tokens.
-        for (i=mExitingTokens.size()-1; i>=0; i--) {
-            mExitingTokens.get(i).hasVisible = false;
-        }
+        DisplayContentsIterator iterator = new DisplayContentsIterator();
+        while (iterator.hasNext()) {
+            final DisplayContent displayContent = iterator.next();
+            for (i=displayContent.mExitingTokens.size()-1; i>=0; i--) {
+                displayContent.mExitingTokens.get(i).hasVisible = false;
+            }
 
-        // Initialize state of exiting applications.
-        for (i=mExitingAppTokens.size()-1; i>=0; i--) {
-            mExitingAppTokens.get(i).hasVisible = false;
+            // Initialize state of exiting applications.
+            for (i=displayContent.mExitingAppTokens.size()-1; i>=0; i--) {
+                displayContent.mExitingAppTokens.get(i).hasVisible = false;
+            }
         }
 
         mInnerFields.mHoldScreen = null;
@@ -8283,10 +8333,10 @@
             }
 
             boolean focusDisplayed = false;
-            boolean updateAllDrawn = false;
 
-            DisplayContentsIterator iterator = new DisplayContentsIterator();
+            iterator = new DisplayContentsIterator();
             while (iterator.hasNext()) {
+                boolean updateAllDrawn = false;
                 final DisplayContent displayContent = iterator.next();
                 WindowList windows = displayContent.getWindowList();
                 DisplayInfo displayInfo = displayContent.getDisplayInfo();
@@ -8530,10 +8580,10 @@
                 if (!mInnerFields.mDimming && mAnimator.isDimmingLocked(displayId)) {
                     stopDimmingLocked(displayId);
                 }
-            }
 
-            if (updateAllDrawn) {
-                updateAllDrawnLocked();
+                if (updateAllDrawn) {
+                    updateAllDrawnLocked(displayContent);
+                }
             }
 
             if (focusDisplayed) {
@@ -8678,30 +8728,36 @@
         }
 
         // Time to remove any exiting tokens?
-        for (i=mExitingTokens.size()-1; i>=0; i--) {
-            WindowToken token = mExitingTokens.get(i);
-            if (!token.hasVisible) {
-                mExitingTokens.remove(i);
-                if (token.windowType == TYPE_WALLPAPER) {
-                    mWallpaperTokens.remove(token);
+        iterator = new DisplayContentsIterator();
+        while (iterator.hasNext()) {
+            final DisplayContent displayContent = iterator.next();
+            ArrayList<WindowToken> exitingTokens = displayContent.mExitingTokens;
+            for (i = exitingTokens.size() - 1; i >= 0; i--) {
+                WindowToken token = exitingTokens.get(i);
+                if (!token.hasVisible) {
+                    exitingTokens.remove(i);
+                    if (token.windowType == TYPE_WALLPAPER) {
+                        mWallpaperTokens.remove(token);
+                    }
                 }
             }
-        }
 
-        // Time to remove any exiting applications?
-        for (i=mExitingAppTokens.size()-1; i>=0; i--) {
-            AppWindowToken token = mExitingAppTokens.get(i);
-            if (!token.hasVisible && !mClosingApps.contains(token)) {
-                // Make sure there is no animation running on this token,
-                // so any windows associated with it will be removed as
-                // soon as their animations are complete
-                token.mAppAnimator.clearAnimation();
-                token.mAppAnimator.animating = false;
-                if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
-                        "performLayout: App token exiting now removed" + token);
-                mAppTokens.remove(token);
-                mAnimatingAppTokens.remove(token);
-                mExitingAppTokens.remove(i);
+            // Time to remove any exiting applications?
+            AppTokenList exitingAppTokens = displayContent.mExitingAppTokens;
+            for (i = exitingAppTokens.size() - 1; i >= 0; i--) {
+                AppWindowToken token = exitingAppTokens.get(i);
+                if (!token.hasVisible && !mClosingApps.contains(token)) {
+                    // Make sure there is no animation running on this token,
+                    // so any windows associated with it will be removed as
+                    // soon as their animations are complete
+                    token.mAppAnimator.clearAnimation();
+                    token.mAppAnimator.animating = false;
+                    if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
+                            "performLayout: App token exiting now removed" + token);
+                    displayContent.mAppTokens.remove(token);
+                    displayContent.mAnimatingAppTokens.remove(token);
+                    exitingAppTokens.remove(i);
+                }
             }
         }
 
@@ -8721,7 +8777,7 @@
             defaultDisplay.layoutNeeded = true;
         }
 
-        DisplayContentsIterator iterator = new DisplayContentsIterator();
+        iterator = new DisplayContentsIterator();
         while (iterator.hasNext()) {
             DisplayContent displayContent = iterator.next();
             if (displayContent.pendingLayoutChanges != 0) {
@@ -9136,8 +9192,9 @@
     }
 
     private WindowState findFocusedWindowLocked(DisplayContent displayContent) {
-        int nextAppIndex = mAppTokens.size()-1;
-        WindowToken nextApp = nextAppIndex >= 0 ? mAppTokens.get(nextAppIndex) : null;
+        final AppTokenList appTokens = displayContent.mAppTokens;
+        int nextAppIndex = appTokens.size()-1;
+        WindowToken nextApp = nextAppIndex >= 0 ? appTokens.get(nextAppIndex) : null;
 
         final WindowList windows = displayContent.getWindowList();
         for (int i = windows.size() - 1; i >= 0; i--) {
@@ -9173,7 +9230,7 @@
                         return null;
                     }
                     nextAppIndex--;
-                    nextApp = mAppTokens.get(nextAppIndex);
+                    nextApp = appTokens.get(nextAppIndex);
                     if (nextApp == thisApp) {
                         break;
                     }
@@ -9183,7 +9240,7 @@
                     // happen, but if it does we can get totally hosed...
                     // so restart at the original app.
                     nextAppIndex = origAppIndex;
-                    nextApp = mAppTokens.get(nextAppIndex);
+                    nextApp = appTokens.get(nextAppIndex);
                 }
             }
 
@@ -9548,15 +9605,6 @@
                 }
             }
         }
-        if (mAppTokens.size() > 0) {
-            pw.println();
-            pw.println("  Application tokens in Z order:");
-            for (int i=mAppTokens.size()-1; i>=0; i--) {
-                pw.print("  App #"); pw.print(i);
-                        pw.print(' '); pw.print(mAppTokens.get(i)); pw.println(":");
-                mAppTokens.get(i).dump(pw, "    ");
-            }
-        }
         if (mFinishedStarting.size() > 0) {
             pw.println();
             pw.println("  Finishing start of application tokens:");
@@ -9572,41 +9620,13 @@
                 }
             }
         }
-        if (mExitingTokens.size() > 0) {
-            pw.println();
-            pw.println("  Exiting tokens:");
-            for (int i=mExitingTokens.size()-1; i>=0; i--) {
-                WindowToken token = mExitingTokens.get(i);
-                pw.print("  Exiting #"); pw.print(i);
-                        pw.print(' '); pw.print(token);
-                if (dumpAll) {
-                    pw.println(':');
-                    token.dump(pw, "    ");
-                } else {
-                    pw.println();
-                }
-            }
-        }
-        if (mExitingAppTokens.size() > 0) {
-            pw.println();
-            pw.println("  Exiting application tokens:");
-            for (int i=mExitingAppTokens.size()-1; i>=0; i--) {
-                WindowToken token = mExitingAppTokens.get(i);
-                pw.print("  Exiting App #"); pw.print(i);
-                        pw.print(' '); pw.print(token);
-                if (dumpAll) {
-                    pw.println(':');
-                    token.dump(pw, "    ");
-                } else {
-                    pw.println();
-                }
-            }
-        }
-        if (mAppTransition.isRunning() && mAnimatingAppTokens.size() > 0) {
+        final AppTokenList animatingAppTokens =
+                getDefaultDisplayContentLocked().mAnimatingAppTokens;
+        if (mAppTransition.isRunning() && animatingAppTokens.size() > 0) {
             pw.println();
             pw.println("  Application tokens during animation:");
-            for (int i=mAnimatingAppTokens.size()-1; i>=0; i--) {
-                WindowToken token = mAnimatingAppTokens.get(i);
+            for (int i=animatingAppTokens.size()-1; i>=0; i--) {
+                WindowToken token = animatingAppTokens.get(i);
                 pw.print("  App moving to bottom #"); pw.print(i);
                         pw.print(' '); pw.print(token);
                 if (dumpAll) {
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index cb11be3..6648e56 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -24,6 +24,7 @@
 import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD;
 import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
 
+import android.app.AppOpsManager;
 import com.android.server.input.InputWindowHandle;
 
 import android.content.Context;
@@ -69,6 +70,9 @@
     final Context mContext;
     final Session mSession;
     final IWindow mClient;
+    final int mAppOp;
+    // UserId and appId of the owner. Don't display windows of non-current user.
+    final int mOwnerUid;
     WindowToken mToken;
     WindowToken mRootToken;
     AppWindowToken mAppToken;
@@ -270,18 +274,16 @@
 
     DisplayContent  mDisplayContent;
 
-    // UserId and appId of the owner. Don't display windows of non-current user.
-    int mOwnerUid;
-
     /** When true this window can be displayed on screens owther than mOwnerUid's */
     private boolean mShowToOwnerOnly;
 
     WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token,
-           WindowState attachedWindow, int seq, WindowManager.LayoutParams a,
+           WindowState attachedWindow, int appOp, int seq, WindowManager.LayoutParams a,
            int viewVisibility, final DisplayContent displayContent) {
         mService = service;
         mSession = s;
         mClient = c;
+        mAppOp = appOp;
         mToken = token;
         mOwnerUid = s.mUid;
         mAttrs.copyFrom(a);
@@ -382,6 +384,16 @@
     }
 
     @Override
+    public int getOwningUid() {
+        return mOwnerUid;
+    }
+
+    @Override
+    public String getOwningPackage() {
+        return mAttrs.packageName;
+    }
+
+    @Override
     public void computeFrameLw(Rect pf, Rect df, Rect cf, Rect vf) {
         mHaveFrame = true;
 
@@ -1119,7 +1131,9 @@
                 pw.print(" mSession="); pw.print(mSession);
                 pw.print(" mClient="); pw.println(mClient.asBinder());
         pw.print(prefix); pw.print("mOwnerUid="); pw.print(mOwnerUid);
-                pw.print(" mShowToOwnerOnly="); pw.println(mShowToOwnerOnly);
+                pw.print(" mShowToOwnerOnly="); pw.print(mShowToOwnerOnly);
+                pw.print(" package="); pw.print(mAttrs.packageName);
+                pw.print(" appop="); pw.println(AppOpsManager.opToName(mAppOp));
         pw.print(prefix); pw.print("mAttrs="); pw.println(mAttrs);
         pw.print(prefix); pw.print("Requested w="); pw.print(mRequestedWidth);
                 pw.print(" h="); pw.print(mRequestedHeight);
@@ -1263,9 +1277,12 @@
 
     @Override
     public String toString() {
-        if (mStringNameCache == null || mLastTitle != mAttrs.getTitle()
-                || mWasExiting != mExiting) {
-            mLastTitle = mAttrs.getTitle();
+        CharSequence title = mAttrs.getTitle();
+        if (title == null || title.length() <= 0) {
+            title = mAttrs.packageName;
+        }
+        if (mStringNameCache == null || mLastTitle != title || mWasExiting != mExiting) {
+            mLastTitle = title;
             mWasExiting = mExiting;
             mStringNameCache = "Window{" + Integer.toHexString(System.identityHashCode(this))
                     + " u" + UserHandle.getUserId(mSession.mUid)
diff --git a/services/java/com/android/server/wm/WindowToken.java b/services/java/com/android/server/wm/WindowToken.java
index bd0ace8..2267123 100644
--- a/services/java/com/android/server/wm/WindowToken.java
+++ b/services/java/com/android/server/wm/WindowToken.java
@@ -19,7 +19,6 @@
 import android.os.IBinder;
 
 import java.io.PrintWriter;
-import java.util.ArrayList;
 
 /**
  * Container of a set of related windows in the window manager.  Often this
diff --git a/services/jni/com_android_server_BatteryService.cpp b/services/jni/com_android_server_BatteryService.cpp
index e6133af..485c289 100644
--- a/services/jni/com_android_server_BatteryService.cpp
+++ b/services/jni/com_android_server_BatteryService.cpp
@@ -33,6 +33,8 @@
 #include <unistd.h>
 #include <dirent.h>
 #include <linux/ioctl.h>
+#include <utils/Vector.h>
+#include <utils/String8.h>
 
 namespace android {
 
@@ -70,21 +72,28 @@
 static BatteryManagerConstants gConstants;
 
 struct PowerSupplyPaths {
-    char* acOnlinePath;
-    char* usbOnlinePath;
-    char* wirelessOnlinePath;
-    char* batteryStatusPath;
-    char* batteryHealthPath;
-    char* batteryPresentPath;
-    char* batteryCapacityPath;
-    char* batteryVoltagePath;
-    char* batteryTemperaturePath;
-    char* batteryTechnologyPath;
+    String8 batteryStatusPath;
+    String8 batteryHealthPath;
+    String8 batteryPresentPath;
+    String8 batteryCapacityPath;
+    String8 batteryVoltagePath;
+    String8 batteryTemperaturePath;
+    String8 batteryTechnologyPath;
 };
 static PowerSupplyPaths gPaths;
 
+static Vector<String8> gChargerNames;
+
 static int gVoltageDivisor = 1;
 
+enum PowerSupplyType {
+     ANDROID_POWER_SUPPLY_TYPE_UNKNOWN = 0,
+     ANDROID_POWER_SUPPLY_TYPE_AC,
+     ANDROID_POWER_SUPPLY_TYPE_USB,
+     ANDROID_POWER_SUPPLY_TYPE_WIRELESS,
+     ANDROID_POWER_SUPPLY_TYPE_BATTERY
+};
+
 static jint getBatteryStatus(const char* status)
 {
     switch (status[0]) {
@@ -133,13 +142,13 @@
     }
 }
 
-static int readFromFile(const char* path, char* buf, size_t size)
+static int readFromFile(const String8& path, char* buf, size_t size)
 {
     if (!path)
         return -1;
-    int fd = open(path, O_RDONLY, 0);
+    int fd = open(path.string(), O_RDONLY, 0);
     if (fd == -1) {
-        ALOGE("Could not open '%s'", path);
+        ALOGE("Could not open '%s'", path.string());
         return -1;
     }
     
@@ -156,7 +165,7 @@
     return count;
 }
 
-static void setBooleanField(JNIEnv* env, jobject obj, const char* path, jfieldID fieldID)
+static void setBooleanField(JNIEnv* env, jobject obj, const String8& path, jfieldID fieldID)
 {
     const int SIZE = 16;
     char buf[SIZE];
@@ -170,7 +179,7 @@
     env->SetBooleanField(obj, fieldID, value);
 }
 
-static void setIntField(JNIEnv* env, jobject obj, const char* path, jfieldID fieldID)
+static void setIntField(JNIEnv* env, jobject obj, const String8& path, jfieldID fieldID)
 {
     const int SIZE = 128;
     char buf[SIZE];
@@ -182,7 +191,7 @@
     env->SetIntField(obj, fieldID, value);
 }
 
-static void setVoltageField(JNIEnv* env, jobject obj, const char* path, jfieldID fieldID)
+static void setVoltageField(JNIEnv* env, jobject obj, const String8& path, jfieldID fieldID)
 {
     const int SIZE = 128;
     char buf[SIZE];
@@ -195,12 +204,30 @@
     env->SetIntField(obj, fieldID, value);
 }
 
+static PowerSupplyType readPowerSupplyType(const String8& path) {
+    const int SIZE = 128;
+    char buf[SIZE];
+    int length = readFromFile(path, buf, SIZE);
+
+    if (length <= 0)
+        return ANDROID_POWER_SUPPLY_TYPE_UNKNOWN;
+    if (buf[length - 1] == '\n')
+        buf[length - 1] = 0;
+    if (strcmp(buf, "Battery") == 0)
+        return ANDROID_POWER_SUPPLY_TYPE_BATTERY;
+    else if (strcmp(buf, "Mains") == 0 || strcmp(buf, "USB_DCP") == 0 ||
+             strcmp(buf, "USB_CDP") == 0 || strcmp(buf, "USB_ACA") == 0)
+        return ANDROID_POWER_SUPPLY_TYPE_AC;
+    else if (strcmp(buf, "USB") == 0)
+        return ANDROID_POWER_SUPPLY_TYPE_USB;
+    else if (strcmp(buf, "Wireless") == 0)
+        return ANDROID_POWER_SUPPLY_TYPE_WIRELESS;
+    else
+        return ANDROID_POWER_SUPPLY_TYPE_UNKNOWN;
+}
 
 static void android_server_BatteryService_update(JNIEnv* env, jobject obj)
 {
-    setBooleanField(env, obj, gPaths.acOnlinePath, gFieldIds.mAcOnline);
-    setBooleanField(env, obj, gPaths.usbOnlinePath, gFieldIds.mUsbOnline);
-    setBooleanField(env, obj, gPaths.wirelessOnlinePath, gFieldIds.mWirelessOnline);
     setBooleanField(env, obj, gPaths.batteryPresentPath, gFieldIds.mBatteryPresent);
     
     setIntField(env, obj, gPaths.batteryCapacityPath, gFieldIds.mBatteryLevel);
@@ -221,16 +248,54 @@
 
     if (readFromFile(gPaths.batteryTechnologyPath, buf, SIZE) > 0)
         env->SetObjectField(obj, gFieldIds.mBatteryTechnology, env->NewStringUTF(buf));
+
+    unsigned int i;
+    String8 path;
+    jboolean acOnline = false;
+    jboolean usbOnline = false;
+    jboolean wirelessOnline = false;
+
+    for (i = 0; i < gChargerNames.size(); i++) {
+        path.clear();
+        path.appendFormat("%s/%s/online", POWER_SUPPLY_PATH,
+                          gChargerNames[i].string());
+
+        if (readFromFile(path, buf, SIZE) > 0) {
+            if (buf[0] != '0') {
+                path.clear();
+                path.appendFormat("%s/%s/type", POWER_SUPPLY_PATH,
+                                  gChargerNames[i].string());
+                switch(readPowerSupplyType(path)) {
+                case ANDROID_POWER_SUPPLY_TYPE_AC:
+                    acOnline = true;
+                    break;
+                case ANDROID_POWER_SUPPLY_TYPE_USB:
+                    usbOnline = true;
+                    break;
+                case ANDROID_POWER_SUPPLY_TYPE_WIRELESS:
+                    wirelessOnline = true;
+                    break;
+                default:
+                    ALOGW("%s: Unknown power supply type",
+                          gChargerNames[i].string());
+                }
+            }
+        }
+    }
+
+    env->SetBooleanField(obj, gFieldIds.mAcOnline, acOnline);
+    env->SetBooleanField(obj, gFieldIds.mUsbOnline, usbOnline);
+    env->SetBooleanField(obj, gFieldIds.mWirelessOnline, wirelessOnline);
 }
 
 static JNINativeMethod sMethods[] = {
      /* name, signature, funcPtr */
-	{"native_update", "()V", (void*)android_server_BatteryService_update},
+        {"native_update", "()V", (void*)android_server_BatteryService_update},
 };
 
 int register_android_server_BatteryService(JNIEnv* env)
 {
-    char    path[PATH_MAX];
+    String8 path;
     struct dirent* entry;
 
     DIR* dir = opendir(POWER_SUPPLY_PATH);
@@ -247,76 +312,72 @@
 
             char buf[20];
             // Look for "type" file in each subdirectory
-            snprintf(path, sizeof(path), "%s/%s/type", POWER_SUPPLY_PATH, name);
-            int length = readFromFile(path, buf, sizeof(buf));
-            if (length > 0) {
-                if (buf[length - 1] == '\n')
-                    buf[length - 1] = 0;
+            path.clear();
+            path.appendFormat("%s/%s/type", POWER_SUPPLY_PATH, name);
+            switch(readPowerSupplyType(path)) {
+            case ANDROID_POWER_SUPPLY_TYPE_AC:
+            case ANDROID_POWER_SUPPLY_TYPE_USB:
+            case ANDROID_POWER_SUPPLY_TYPE_WIRELESS:
+                path.clear();
+                path.appendFormat("%s/%s/online", POWER_SUPPLY_PATH, name);
+                if (access(path.string(), R_OK) == 0)
+                    gChargerNames.add(String8(name));
+                break;
 
-                if (strcmp(buf, "Mains") == 0) {
-                    snprintf(path, sizeof(path), "%s/%s/online", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0)
-                        gPaths.acOnlinePath = strdup(path);
-                }
-                else if (strcmp(buf, "USB") == 0) {
-                    snprintf(path, sizeof(path), "%s/%s/online", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0)
-                        gPaths.usbOnlinePath = strdup(path);
-                }
-                else if (strcmp(buf, "Wireless") == 0) {
-                    snprintf(path, sizeof(path), "%s/%s/online", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0)
-                        gPaths.wirelessOnlinePath = strdup(path);
-                }
-                else if (strcmp(buf, "Battery") == 0) {
-                    snprintf(path, sizeof(path), "%s/%s/status", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0)
-                        gPaths.batteryStatusPath = strdup(path);
-                    snprintf(path, sizeof(path), "%s/%s/health", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0)
-                        gPaths.batteryHealthPath = strdup(path);
-                    snprintf(path, sizeof(path), "%s/%s/present", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0)
-                        gPaths.batteryPresentPath = strdup(path);
-                    snprintf(path, sizeof(path), "%s/%s/capacity", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0)
-                        gPaths.batteryCapacityPath = strdup(path);
+            case ANDROID_POWER_SUPPLY_TYPE_BATTERY:
+                path.clear();
+                path.appendFormat("%s/%s/status", POWER_SUPPLY_PATH, name);
+                if (access(path, R_OK) == 0)
+                    gPaths.batteryStatusPath = path;
+                path.clear();
+                path.appendFormat("%s/%s/health", POWER_SUPPLY_PATH, name);
+                if (access(path, R_OK) == 0)
+                    gPaths.batteryHealthPath = path;
+                path.clear();
+                path.appendFormat("%s/%s/present", POWER_SUPPLY_PATH, name);
+                if (access(path, R_OK) == 0)
+                    gPaths.batteryPresentPath = path;
+                path.clear();
+                path.appendFormat("%s/%s/capacity", POWER_SUPPLY_PATH, name);
+                if (access(path, R_OK) == 0)
+                    gPaths.batteryCapacityPath = path;
 
-                    snprintf(path, sizeof(path), "%s/%s/voltage_now", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0) {
-                        gPaths.batteryVoltagePath = strdup(path);
-                        // voltage_now is in microvolts, not millivolts
-                        gVoltageDivisor = 1000;
-                    } else {
-                        snprintf(path, sizeof(path), "%s/%s/batt_vol", POWER_SUPPLY_PATH, name);
-                        if (access(path, R_OK) == 0)
-                            gPaths.batteryVoltagePath = strdup(path);
-                    }
-
-                    snprintf(path, sizeof(path), "%s/%s/temp", POWER_SUPPLY_PATH, name);
-                    if (access(path, R_OK) == 0) {
-                        gPaths.batteryTemperaturePath = strdup(path);
-                    } else {
-                        snprintf(path, sizeof(path), "%s/%s/batt_temp", POWER_SUPPLY_PATH, name);
-                        if (access(path, R_OK) == 0)
-                            gPaths.batteryTemperaturePath = strdup(path);
-                    }
-
-                    snprintf(path, sizeof(path), "%s/%s/technology", POWER_SUPPLY_PATH, name);
+                path.clear();
+                path.appendFormat("%s/%s/voltage_now", POWER_SUPPLY_PATH, name);
+                if (access(path, R_OK) == 0) {
+                    gPaths.batteryVoltagePath = path;
+                    // voltage_now is in microvolts, not millivolts
+                    gVoltageDivisor = 1000;
+                } else {
+                    path.clear();
+                    path.appendFormat("%s/%s/batt_vol", POWER_SUPPLY_PATH, name);
                     if (access(path, R_OK) == 0)
-                        gPaths.batteryTechnologyPath = strdup(path);
+                            gPaths.batteryVoltagePath = path;
                 }
+
+                path.clear();
+                path.appendFormat("%s/%s/temp", POWER_SUPPLY_PATH, name);
+                if (access(path, R_OK) == 0) {
+                    gPaths.batteryTemperaturePath = path;
+                } else {
+                    path.clear();
+                    path.appendFormat("%s/%s/batt_temp", POWER_SUPPLY_PATH, name);
+                    if (access(path, R_OK) == 0)
+                            gPaths.batteryTemperaturePath = path;
+                }
+
+                path.clear();
+                path.appendFormat("%s/%s/technology", POWER_SUPPLY_PATH, name);
+                if (access(path, R_OK) == 0)
+                    gPaths.batteryTechnologyPath = path;
+                break;
             }
         }
         closedir(dir);
     }
 
-    if (!gPaths.acOnlinePath)
-        ALOGE("acOnlinePath not found");
-    if (!gPaths.usbOnlinePath)
-        ALOGE("usbOnlinePath not found");
-    if (!gPaths.wirelessOnlinePath)
-        ALOGE("wirelessOnlinePath not found");
+    if (!gChargerNames.size())
+        ALOGE("No charger supplies found");
     if (!gPaths.batteryStatusPath)
         ALOGE("batteryStatusPath not found");
     if (!gPaths.batteryHealthPath)
diff --git a/services/jni/com_android_server_input_InputManagerService.cpp b/services/jni/com_android_server_input_InputManagerService.cpp
index a97becf..57803e3 100644
--- a/services/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/jni/com_android_server_input_InputManagerService.cpp
@@ -975,6 +975,11 @@
 static jint nativeInit(JNIEnv* env, jclass clazz,
         jobject serviceObj, jobject contextObj, jobject messageQueueObj) {
     sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, messageQueueObj);
+    if (messageQueue == NULL) {
+        jniThrowRuntimeException(env, "MessageQueue is not initialized.");
+        return 0;
+    }
+
     NativeInputManager* im = new NativeInputManager(contextObj, serviceObj,
             messageQueue->getLooper());
     im->incStrong(serviceObj);
diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
index 167b6c2..8b9f718 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
@@ -557,6 +557,25 @@
         }
     }
 
+    public void testCycleTodayJanuary() throws Exception {
+        final NetworkPolicy policy = new NetworkPolicy(
+                sTemplateWifi, 14, "US/Pacific", 1024L, 1024L, false);
+
+        assertTimeEquals(parseTime("2013-01-14T00:00:00.000-08:00"),
+                computeNextCycleBoundary(parseTime("2013-01-13T23:59:59.000-08:00"), policy));
+        assertTimeEquals(parseTime("2013-02-14T00:00:00.000-08:00"),
+                computeNextCycleBoundary(parseTime("2013-01-14T00:00:01.000-08:00"), policy));
+        assertTimeEquals(parseTime("2013-02-14T00:00:00.000-08:00"),
+                computeNextCycleBoundary(parseTime("2013-01-14T15:11:00.000-08:00"), policy));
+
+        assertTimeEquals(parseTime("2012-12-14T00:00:00.000-08:00"),
+                computeLastCycleBoundary(parseTime("2013-01-13T23:59:59.000-08:00"), policy));
+        assertTimeEquals(parseTime("2013-01-14T00:00:00.000-08:00"),
+                computeLastCycleBoundary(parseTime("2013-01-14T00:00:01.000-08:00"), policy));
+        assertTimeEquals(parseTime("2013-01-14T00:00:00.000-08:00"),
+                computeLastCycleBoundary(parseTime("2013-01-14T15:11:00.000-08:00"), policy));
+    }
+
     public void testNetworkPolicyAppliedCycleLastMonth() throws Exception {
         NetworkState[] state = null;
         NetworkStats stats = null;
@@ -845,7 +864,8 @@
 
     private Future<String> expectEnqueueNotification() throws Exception {
         final FutureCapture<String> tag = new FutureCapture<String>();
-        mNotifManager.enqueueNotificationWithTag(isA(String.class), capture(tag.capture), anyInt(),
+        mNotifManager.enqueueNotificationWithTag(isA(String.class), isA(String.class),
+                capture(tag.capture), anyInt(),
                 isA(Notification.class), isA(int[].class), UserHandle.myUserId());
         return tag;
     }
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
index 0f531b7..1ab5f45 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
@@ -139,7 +139,7 @@
         // Write the package files and make sure they're parsed properly the first time
         writeOldFiles();
         Settings settings = new Settings(getContext(), getContext().getFilesDir());
-        assertEquals(true, settings.readLPw(null, 0, false));
+        assertEquals(true, settings.readLPw(null, null, 0, false));
         assertNotNull(settings.peekPackageLPr(PACKAGE_NAME_3));
         assertNotNull(settings.peekPackageLPr(PACKAGE_NAME_1));
 
@@ -157,11 +157,11 @@
         // Write the package files and make sure they're parsed properly the first time
         writeOldFiles();
         Settings settings = new Settings(getContext(), getContext().getFilesDir());
-        assertEquals(true, settings.readLPw(null, 0, false));
+        assertEquals(true, settings.readLPw(null, null, 0, false));
 
         // Create Settings again to make it read from the new files
         settings = new Settings(getContext(), getContext().getFilesDir());
-        assertEquals(true, settings.readLPw(null, 0, false));
+        assertEquals(true, settings.readLPw(null, null, 0, false));
 
         PackageSetting ps = settings.peekPackageLPr(PACKAGE_NAME_2);
         assertEquals(COMPONENT_ENABLED_STATE_DISABLED_USER, ps.getEnabled(0));
@@ -172,7 +172,7 @@
         // Write the package files and make sure they're parsed properly the first time
         writeOldFiles();
         Settings settings = new Settings(getContext(), getContext().getFilesDir());
-        assertEquals(true, settings.readLPw(null, 0, false));
+        assertEquals(true, settings.readLPw(null, null, 0, false));
 
         // Enable/Disable a package
         PackageSetting ps = settings.peekPackageLPr(PACKAGE_NAME_1);
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index e2da53e..3ed9cef 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -335,7 +335,7 @@
         mCdmaEcio = (mCdmaEcio > 0) ? -mCdmaEcio : -160;
 
         mEvdoDbm = (mEvdoDbm > 0) ? -mEvdoDbm : -120;
-        mEvdoEcio = (mEvdoEcio > 0) ? -mEvdoEcio : -1;
+        mEvdoEcio = (mEvdoEcio >= 0) ? -mEvdoEcio : -1;
         mEvdoSnr = ((mEvdoSnr > 0) && (mEvdoSnr <= 8)) ? mEvdoSnr : -1;
 
         // TS 36.214 Physical Layer Section 5.1.3, TS 36.331 RRC
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 6241a49..8c47332 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -59,19 +59,19 @@
 public class TelephonyManager {
     private static final String TAG = "TelephonyManager";
 
-    private static Context sContext;
     private static ITelephonyRegistry sRegistry;
+    private final Context mContext;
 
     /** @hide */
     public TelephonyManager(Context context) {
-        if (sContext == null) {
-            Context appContext = context.getApplicationContext();
-            if (appContext != null) {
-                sContext = appContext;
-            } else {
-                sContext = context;
-            }
+        Context appContext = context.getApplicationContext();
+        if (appContext != null) {
+            mContext = appContext;
+        } else {
+            mContext = context;
+        }
 
+        if (sRegistry == null) {
             sRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
                     "telephony.registry"));
         }
@@ -79,6 +79,7 @@
 
     /** @hide */
     private TelephonyManager() {
+        mContext = null;
     }
 
     private static TelephonyManager sInstance = new TelephonyManager();
@@ -125,6 +126,28 @@
             "android.intent.action.PHONE_STATE";
 
     /**
+     * The Phone app sends this intent when a user opts to respond-via-message during an incoming
+     * call. By default, the MMS app consumes this message and sends a text message to the caller. A
+     * third party app can provide this functionality in lieu of MMS app by consuming this Intent
+     * and sending the message using their own messaging system.  The intent contains a URI
+     * describing the recipient, and an EXTRA containg the message itself.
+     * <p>
+     * The intent-filter which consumes this Intent needs to be in a service which requires the
+     * permission SEND_RESPOND_VIA_MESSAGE.
+     *
+     * <p>
+     * {@link android.content.Intent#getData} is a URI describing the recipient of the message.
+     * <p>
+     * The {@link android.content.Intent#EXTRA_TEXT} extra contains the message
+     * to send.
+     * <p>
+     * Output: nothing.
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_RESPOND_VIA_MESSAGE =
+            "android.intent.action.RESPOND_VIA_MESSAGE";
+
+    /**
      * The lookup key used with the {@link #ACTION_PHONE_STATE_CHANGED} broadcast
      * for a String containing the new call state.
      *
@@ -276,7 +299,7 @@
      */
     public List<NeighboringCellInfo> getNeighboringCellInfo() {
         try {
-            return getITelephony().getNeighboringCellInfo();
+            return getITelephony().getNeighboringCellInfo(mContext.getBasePackageName());
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -361,7 +384,7 @@
      * This function returns the type of the phone, depending
      * on the network mode.
      *
-     * @param network mode
+     * @param networkMode
      * @return Phone Type
      *
      * @hide
@@ -1199,7 +1222,7 @@
      *               LISTEN_ flags.
      */
     public void listen(PhoneStateListener listener, int events) {
-        String pkgForDebug = sContext != null ? sContext.getPackageName() : "<unknown>";
+        String pkgForDebug = mContext != null ? mContext.getPackageName() : "<unknown>";
         try {
             Boolean notifyNow = (getITelephony() != null);
             sRegistry.listen(pkgForDebug, listener.callback, events, notifyNow);
@@ -1277,8 +1300,8 @@
      * @hide pending API review
      */
     public boolean isVoiceCapable() {
-        if (sContext == null) return true;
-        return sContext.getResources().getBoolean(
+        if (mContext == null) return true;
+        return mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_voice_capable);
     }
 
@@ -1294,8 +1317,8 @@
      * @hide pending API review
      */
     public boolean isSmsCapable() {
-        if (sContext == null) return true;
-        return sContext.getResources().getBoolean(
+        if (mContext == null) return true;
+        return mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_sms_capable);
     }
 
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index d5f0467..1449ab1 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -42,7 +42,7 @@
      * Place a call to the specified number.
      * @param number the number to be called.
      */
-    void call(String number);
+    void call(String callingPackage, String number);
 
     /**
      * If there is currently a call in progress, show the call screen.
@@ -218,7 +218,7 @@
     /**
      * Returns the neighboring cell information of the device.
      */
-    List<NeighboringCellInfo> getNeighboringCellInfo();
+    List<NeighboringCellInfo> getNeighboringCellInfo(String callingPkg);
 
      int getCallState();
      int getDataActivity();
diff --git a/telephony/java/com/android/internal/telephony/SmsRawData.aidl b/telephony/java/com/android/internal/telephony/SmsRawData.aidl
deleted file mode 100644
index b0b3e4f..0000000
--- a/telephony/java/com/android/internal/telephony/SmsRawData.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-** Copyright 2007, 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 com.android.internal.telephony;
-
-parcelable SmsRawData;
diff --git a/test-runner/src/android/test/AndroidTestRunner.java b/test-runner/src/android/test/AndroidTestRunner.java
index 30876d0..aa7c677 100644
--- a/test-runner/src/android/test/AndroidTestRunner.java
+++ b/test-runner/src/android/test/AndroidTestRunner.java
@@ -21,6 +21,7 @@
 import android.os.PerformanceCollector.PerformanceResultsWriter;
 
 import com.google.android.collect.Lists;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestListener;
diff --git a/test-runner/src/android/test/InstrumentationTestRunner.java b/test-runner/src/android/test/InstrumentationTestRunner.java
index 8e30875..91d04da 100644
--- a/test-runner/src/android/test/InstrumentationTestRunner.java
+++ b/test-runner/src/android/test/InstrumentationTestRunner.java
@@ -390,12 +390,11 @@
     }
 
     /**
-     * Get the Bundle object that contains the arguments
+     * Get the arguments passed to this instrumentation.
      *
      * @return the Bundle object
-     * @hide
      */
-    public Bundle getBundle(){
+    public Bundle getArguments() {
         return mArguments;
     }
 
diff --git a/test-runner/src/android/test/mock/MockContext.java b/test-runner/src/android/test/mock/MockContext.java
index 248fbf1..cfc6bd7 100644
--- a/test-runner/src/android/test/mock/MockContext.java
+++ b/test-runner/src/android/test/mock/MockContext.java
@@ -299,6 +299,12 @@
         throw new UnsupportedOperationException();
     }
 
+    /** @hide */
+    @Override
+    public void sendBroadcast(Intent intent, String receiverPermission, int appOp) {
+        throw new UnsupportedOperationException();
+    }
+
     @Override
     public void sendOrderedBroadcast(Intent intent,
             String receiverPermission) {
@@ -312,6 +318,14 @@
         throw new UnsupportedOperationException();
     }
 
+    /** @hide */
+    @Override
+    public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp,
+            BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData,
+           Bundle initialExtras) {
+        throw new UnsupportedOperationException();
+    }
+
     @Override
     public void sendBroadcastAsUser(Intent intent, UserHandle user) {
         throw new UnsupportedOperationException();
diff --git a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
index e2cb65d..fbdd333 100644
--- a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
+++ b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
@@ -60,7 +60,7 @@
     public void testMeasureStartUpTime() throws RemoteException {
         InstrumentationTestRunner instrumentation =
                 (InstrumentationTestRunner)getInstrumentation();
-        Bundle args = instrumentation.getBundle();
+        Bundle args = instrumentation.getArguments();
         mAm = ActivityManagerNative.getDefault();
 
         createMappings();
@@ -219,7 +219,7 @@
                             UserHandle.USER_CURRENT);
                 }
 
-                mResult = mAm.startActivityAndWait(null, mLaunchIntent, mimeType,
+                mResult = mAm.startActivityAndWait(null, null, mLaunchIntent, mimeType,
                         null, null, 0, mLaunchIntent.getFlags(), null, null, null,
                         UserHandle.USER_CURRENT);
             } catch (RemoteException e) {
diff --git a/tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java b/tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java
index 6022141..fb818d4 100644
--- a/tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java
+++ b/tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java
@@ -122,6 +122,12 @@
                             paint.setStrokeWidth(5);
                         }
                     });
+                    put("30", new DisplayModifier() {
+                        @Override
+                        public void modifyDrawing(Paint paint, Canvas canvas) {
+                            paint.setStrokeWidth(30);
+                        }
+                    });
                 }
             });
             put("strokeCap", new LinkedHashMap<String, DisplayModifier>() {
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index 57ce1d6..2a9016b 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -42,6 +42,15 @@
         </activity>
 
         <activity
+                android:name="NoAATextActivity"
+                android:label="_NoAAText">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <activity
                 android:name="ScaledPathsActivity"
                 android:label="_ScaledPaths">
             <intent-filter>
@@ -159,6 +168,15 @@
         </activity>
 
         <activity
+                android:name="ClipRegion3Activity"
+                android:label="_ClipRegion3">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <activity
                 android:name="DisplayListLayersActivity"
                 android:label="__DisplayListLayers">
             <intent-filter>
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ClipRegion3Activity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ClipRegion3Activity.java
new file mode 100644
index 0000000..6fd03fb
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ClipRegion3Activity.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2010 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 com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Path;
+import android.os.Bundle;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class ClipRegion3Activity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        final RegionView group = new RegionView(this);
+
+        final TextView text = new TextView(this);
+        text.setText(buildText());
+        group.addView(text);
+
+        setContentView(group);
+    }
+
+    private static CharSequence buildText() {
+        StringBuffer buffer = new StringBuffer();
+        for (int i = 0; i < 10; i++) {
+            buffer.append(LOREM_IPSUM);
+        }
+        return buffer;
+    }
+
+    public static class RegionView extends FrameLayout {
+        private final Path mClipPath = new Path();
+        private float mClipPosition = 0.5f;
+
+        public RegionView(Context c) {
+            super(c);
+            setAlpha(0.5f);
+        }
+
+        @Override
+        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+            super.onSizeChanged(w, h, oldw, oldh);
+            mClipPath.reset();
+            mClipPath.addCircle(0.0f, 0.0f, getWidth() / 4.0f, Path.Direction.CW);
+        }
+
+        @Override
+        protected void dispatchDraw(Canvas canvas) {
+            canvas.drawARGB(255, 255, 255, 255);
+
+            canvas.save(Canvas.MATRIX_SAVE_FLAG);
+            canvas.translate(mClipPosition * getWidth(), getHeight() / 2.0f);
+            canvas.clipPath(mClipPath);
+            canvas.restore();
+
+            super.dispatchDraw(canvas);
+
+            invalidate();
+        }
+    }
+
+    private static final String LOREM_IPSUM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sagittis molestie aliquam. Donec metus metus, laoreet nec sagittis vitae, ultricies sit amet eros. Suspendisse sed massa sit amet felis consectetur gravida. In vitae erat mi, in egestas nisl. Phasellus quis ipsum massa, at scelerisque arcu. Nam lectus est, pellentesque eget lacinia non, congue vitae augue. Aliquam erat volutpat. Pellentesque bibendum tincidunt viverra. Aliquam erat volutpat. Maecenas pretium vulputate placerat. Nulla varius elementum rutrum. Aenean mollis blandit imperdiet. Pellentesque interdum fringilla ligula.";
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ClipRegionActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ClipRegionActivity.java
index 3d3d709..774811e 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/ClipRegionActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ClipRegionActivity.java
@@ -61,6 +61,7 @@
 
         public RegionView(Context c) {
             super(c);
+            setAlpha(0.5f);
         }
 
         public float getClipPosition() {
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/NoAATextActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/NoAATextActivity.java
new file mode 100644
index 0000000..5bd2f583
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/NoAATextActivity.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2010 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 com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.os.Bundle;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class NoAATextActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        final ScaledNoAA view = new ScaledNoAA(this);
+        setContentView(view);
+    }
+
+    public static class ScaledNoAA extends View {
+        private static final String TEXT = "Hello libhwui!";
+
+        private final Paint mPaint;
+
+        public ScaledNoAA(Context c) {
+            super(c);
+
+            mPaint = new Paint();
+            mPaint.setTextSize(60.0f);
+        }
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            super.onDraw(canvas);
+
+            canvas.drawARGB(255, 255, 255, 255);
+            canvas.drawText(TEXT, 30.0f, 150.0f, mPaint);
+        }
+    }
+}
diff --git a/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java b/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
index b550957..397ef13 100644
--- a/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
+++ b/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
@@ -275,7 +275,7 @@
                             UserHandle.USER_CURRENT);
                 }
 
-                mAm.startActivityAndWait(null, mLaunchIntent, mimeType,
+                mAm.startActivityAndWait(null, null, mLaunchIntent, mimeType,
                         null, null, 0, mLaunchIntent.getFlags(), null, null, null,
                         UserHandle.USER_CURRENT_OR_SELF);
             } catch (RemoteException e) {
diff --git a/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/BallsRS.java b/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/BallsRS.java
index 8cab9b8..d9d182c 100644
--- a/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/BallsRS.java
+++ b/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/BallsRS.java
@@ -20,8 +20,9 @@
 import android.renderscript.*;
 import android.util.Log;
 
+
 public class BallsRS {
-    public static final int PART_COUNT = 900;
+    public static final int PART_COUNT = 4000;
 
     public BallsRS() {
     }
@@ -30,11 +31,12 @@
     private RenderScriptGL mRS;
     private ScriptC_balls mScript;
     private ScriptC_ball_physics mPhysicsScript;
-    private ProgramFragment mPFLines;
     private ProgramFragment mPFPoints;
-    private ProgramVertex mPV;
     private ScriptField_Point mPoints;
     private ScriptField_VpConsts mVpConsts;
+    private ScriptField_BallGrid mGrid;
+    private ScriptField_Ball mBalls;
+    private Allocation mGridCache;
 
     void updateProjectionMatrices() {
         mVpConsts = new ScriptField_VpConsts(mRS, 1,
@@ -56,8 +58,8 @@
                     "  vec4 pos = vec4(0.0, 0.0, 0.0, 1.0);\n" +
                     "  pos.xy = ATTRIB_position;\n" +
                     "  gl_Position = UNI_MVP * pos;\n" +
-                    "  varColor = vec4(1.0, 1.0, 1.0, 1.0);\n" +
-                    "  gl_PointSize = ATTRIB_size;\n" +
+                    "  varColor = ATTRIB_color;\n" +
+                    "  gl_PointSize = 12.0;\n" +
                     "}\n";
         sb.setShader(t);
         sb.addConstant(mVpConsts.getType());
@@ -84,22 +86,21 @@
         return builder.create();
     }
 
-    public void init(RenderScriptGL rs, Resources res, int width, int height) {
-        mRS = rs;
-        mRes = res;
-
-        ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
+    private void createPF(int width, int height) {
+        ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(mRS);
         pfb.setPointSpriteTexCoordinateReplacement(true);
         pfb.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.MODULATE,
                            ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
         pfb.setVaryingColor(true);
         mPFPoints = pfb.create();
+    }
 
-        pfb = new ProgramFragmentFixedFunction.Builder(rs);
-        pfb.setVaryingColor(true);
-        mPFLines = pfb.create();
+    public void init(RenderScriptGL rs, Resources res, int width, int height) {
+        mRS = rs;
+        mRes = res;
 
-        android.util.Log.e("rs", "Load texture");
+        createPF(width, height);
+
         mPFPoints.bindTexture(loadTexture(R.drawable.flares), 0);
 
         mPoints = new ScriptField_Point(mRS, PART_COUNT, Allocation.USAGE_SCRIPT);
@@ -109,16 +110,22 @@
         smb.addIndexSetType(Mesh.Primitive.POINT);
         Mesh smP = smb.create();
 
-        mPhysicsScript = new ScriptC_ball_physics(mRS, mRes, R.raw.ball_physics);
+        mGrid = ScriptField_BallGrid.create2D(mRS, (width + 99) / 100, (height + 99) / 100);
+        mGridCache = Allocation.createSized(mRS, Element.F32_2(mRS), PART_COUNT);
+        mBalls = new ScriptField_Ball(mRS, PART_COUNT, Allocation.USAGE_SCRIPT);
 
-        mScript = new ScriptC_balls(mRS, mRes, R.raw.balls);
+        mPhysicsScript = new ScriptC_ball_physics(mRS);
+        mPhysicsScript.set_gGridCache(mGridCache);
+        mPhysicsScript.set_gBalls(mBalls.getAllocation());
+
+        mScript = new ScriptC_balls(mRS);
         mScript.set_partMesh(smP);
         mScript.set_physics_script(mPhysicsScript);
         mScript.bind_point(mPoints);
-        mScript.bind_balls1(new ScriptField_Ball(mRS, PART_COUNT, Allocation.USAGE_SCRIPT));
-        mScript.bind_balls2(new ScriptField_Ball(mRS, PART_COUNT, Allocation.USAGE_SCRIPT));
+        mScript.bind_balls(mBalls);
+        mScript.set_gGrid(mGrid.getAllocation());
+        mScript.bind_gGridCache(mGridCache);
 
-        mScript.set_gPFLines(mPFLines);
         mScript.set_gPFPoints(mPFPoints);
         createProgramVertex();
 
@@ -126,6 +133,7 @@
 
         mPhysicsScript.set_gMinPos(new Float2(5, 5));
         mPhysicsScript.set_gMaxPos(new Float2(width - 5, height - 5));
+        mPhysicsScript.set_gGrid(mGrid.getAllocation());
 
         mScript.invoke_initParts(width, height);
 
@@ -133,7 +141,7 @@
     }
 
     public void newTouchPosition(float x, float y, float pressure, int id) {
-        mPhysicsScript.invoke_touch(x, y, pressure, id);
+        mPhysicsScript.invoke_touch(x, y, pressure * mRS.getWidth() / 1280, id);
     }
 
     public void setAccel(float x, float y) {
diff --git a/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/ball_physics.rs b/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/ball_physics.rs
index 8a3db6d..5b5d2e0 100644
--- a/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/ball_physics.rs
+++ b/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/ball_physics.rs
@@ -10,6 +10,13 @@
 
 static float2 touchPos[10];
 static float touchPressure[10];
+static const float gDT = 1.f / 30.f;
+
+rs_allocation gGrid;
+rs_allocation gGridCache;
+rs_allocation gBalls;
+
+float gScale = 1.f;
 
 void touch(float x, float y, float pressure, int id) {
     if (id >= 10) {
@@ -21,126 +28,128 @@
     touchPressure[id] = pressure;
 }
 
-void root(const Ball_t *ballIn, Ball_t *ballOut, const BallControl_t *ctl, uint32_t x) {
-    float2 fv = {0, 0};
-    float2 pos = ballIn->position;
+void root(Ball_t *ball, uint32_t x) {
+    float2 fv = 0;
+    float pressure = 0;
+    float2 pos = ball->position;
+    int2 gridPos[9];
 
-    int arcID = -1;
-    float arcInvStr = 100000;
+    gridPos[0] = convert_int2((ball->position / 100.f) /*- 0.4999f*/);
+    gridPos[1] = (int2){gridPos[0].x - 1, gridPos[0].y - 1};
+    gridPos[2] = (int2){gridPos[0].x + 0, gridPos[0].y - 1};
+    gridPos[3] = (int2){gridPos[0].x + 1, gridPos[0].y - 1};
+    gridPos[4] = (int2){gridPos[0].x - 1, gridPos[0].y};
+    gridPos[5] = (int2){gridPos[0].x + 1, gridPos[0].y};
+    gridPos[6] = (int2){gridPos[0].x - 1, gridPos[0].y + 1};
+    gridPos[7] = (int2){gridPos[0].x + 0, gridPos[0].y + 1};
+    gridPos[8] = (int2){gridPos[0].x + 1, gridPos[0].y + 1};
 
-    const Ball_t * bPtr = rsGetElementAt(ctl->ain, 0);
-    for (uint32_t xin = 0; xin < ctl->dimX; xin++) {
-        float2 vec = bPtr[xin].position - pos;
-        float2 vec2 = vec * vec;
-        float len2 = vec2.x + vec2.y;
+    for (int gct=0; gct < 9; gct++) {
+        if ((gridPos[gct].x >= rsAllocationGetDimX(gGrid)) ||
+            (gridPos[gct].x < 0) ||
+            (gridPos[gct].y >= rsAllocationGetDimY(gGrid)) ||
+            (gridPos[gct].y < 0)) {
+            continue;
+        }
+        //rsDebug("grid ", gridPos[gct]);
+        const BallGrid_t *bg = (const BallGrid_t *)rsGetElementAt(gGrid, gridPos[gct].x, gridPos[gct].y);
 
-        if (len2 < 10000) {
-            //float minDist = ballIn->size + bPtr[xin].size;
-            float forceScale = ballIn->size * bPtr[xin].size;
-            forceScale *= forceScale;
+        for (int cidx = 0; cidx < bg->count; cidx++) {
+            float2 bcptr = rsGetElementAt_float2(gGridCache, bg->cacheIdx + cidx);
+            float2 vec = bcptr - pos;
+            float2 vec2 = vec * vec;
+            float len2 = vec2.x + vec2.y;
 
-            if (len2 > 16 /* (minDist*minDist)*/)  {
-                // Repulsion
-                float len = sqrt(len2);
-                fv -= (vec / (len * len * len)) * 20000.f * forceScale;
-            } else {
-                if (len2 < 1) {
-                    if (xin == x) {
-                        continue;
-                    }
-                    ballOut->delta = 0.f;
-                    ballOut->position = ballIn->position;
-                    if (xin > x) {
-                        ballOut->position.x += 1.f;
-                    } else {
-                        ballOut->position.x -= 1.f;
-                    }
-                    //ballOut->color.rgb = 1.f;
-                    //ballOut->arcID = -1;
-                    //ballOut->arcStr = 0;
-                    continue;
-                }
-                // Collision
-                float2 axis = normalize(vec);
-                float e1 = dot(axis, ballIn->delta);
-                float e2 = dot(axis, bPtr[xin].delta);
-                float e = (e1 - e2) * 0.45f;
-                if (e1 > 0) {
-                    fv -= axis * e;
-                } else {
-                    fv += axis * e;
-                }
+            if ((len2 < 10000.f) && (len2 > 0.f)) {
+                float t = native_powr(len2, 1.5f) + 16.0f;
+                float2 pfv = (vec / t) * 16000.f;
+                pressure += length(pfv);
+                fv -= pfv;
             }
         }
     }
 
-    fv /= ballIn->size * ballIn->size * ballIn->size;
-    fv -= gGravityVector * 4.f;
-    fv *= ctl->dt;
+    //fv /= ball->size * ball->size * ball->size;
+    fv -= gGravityVector * 4.f * gScale;
+    fv *= gDT;
 
     for (int i=0; i < 10; i++) {
         if (touchPressure[i] > 0.1f) {
-            float2 vec = touchPos[i] - ballIn->position;
+            float2 vec = touchPos[i] - ball->position;
             float2 vec2 = vec * vec;
             float len2 = max(2.f, vec2.x + vec2.y);
-            fv -= (vec / len2) * touchPressure[i] * 300.f;
+            float2 pfv = (vec / len2) * touchPressure[i] * 500.f * gScale;
+            pressure += length(pfv);
+            fv -= pfv;
         }
     }
 
-    ballOut->delta = (ballIn->delta * (1.f - 0.004f)) + fv;
-    ballOut->position = ballIn->position + (ballOut->delta * ctl->dt);
+    ball->delta = (ball->delta * (1.f - 0.008f)) + fv;
+    ball->position = ball->position + (ball->delta * gDT);
 
-    const float wallForce = 400.f;
-    if (ballOut->position.x > (gMaxPos.x - 20.f)) {
-        float d = gMaxPos.x - ballOut->position.x;
+    const float wallForce = 400.f * gScale;
+    if (ball->position.x > (gMaxPos.x - 20.f)) {
+        float d = gMaxPos.x - ball->position.x;
         if (d < 0.f) {
-            if (ballOut->delta.x > 0) {
-                ballOut->delta.x *= -0.7f;
+            if (ball->delta.x > 0) {
+                ball->delta.x *= -0.7f;
             }
-            ballOut->position.x = gMaxPos.x;
+            ball->position.x = gMaxPos.x - 1.f;
         } else {
-            ballOut->delta.x -= min(wallForce / (d * d), 10.f);
+            ball->delta.x -= min(wallForce / (d * d), 10.f);
         }
     }
 
-    if (ballOut->position.x < (gMinPos.x + 20.f)) {
-        float d = ballOut->position.x - gMinPos.x;
+    if (ball->position.x < (gMinPos.x + 20.f)) {
+        float d = ball->position.x - gMinPos.x;
         if (d < 0.f) {
-            if (ballOut->delta.x < 0) {
-                ballOut->delta.x *= -0.7f;
+            if (ball->delta.x < 0) {
+                ball->delta.x *= -0.7f;
             }
-            ballOut->position.x = gMinPos.x + 1.f;
+            ball->position.x = gMinPos.x + 1.f;
         } else {
-            ballOut->delta.x += min(wallForce / (d * d), 10.f);
+            ball->delta.x += min(wallForce / (d * d), 10.f);
         }
     }
 
-    if (ballOut->position.y > (gMaxPos.y - 20.f)) {
-        float d = gMaxPos.y - ballOut->position.y;
+    if (ball->position.y > (gMaxPos.y - 20.f)) {
+        float d = gMaxPos.y - ball->position.y;
         if (d < 0.f) {
-            if (ballOut->delta.y > 0) {
-                ballOut->delta.y *= -0.7f;
+            if (ball->delta.y > 0) {
+                ball->delta.y *= -0.7f;
             }
-            ballOut->position.y = gMaxPos.y;
+            ball->position.y = gMaxPos.y - 1.f;
         } else {
-            ballOut->delta.y -= min(wallForce / (d * d), 10.f);
+            ball->delta.y -= min(wallForce / (d * d), 10.f);
         }
     }
 
-    if (ballOut->position.y < (gMinPos.y + 20.f)) {
-        float d = ballOut->position.y - gMinPos.y;
+    if (ball->position.y < (gMinPos.y + 20.f)) {
+        float d = ball->position.y - gMinPos.y;
         if (d < 0.f) {
-            if (ballOut->delta.y < 0) {
-                ballOut->delta.y *= -0.7f;
+            if (ball->delta.y < 0) {
+                ball->delta.y *= -0.7f;
             }
-            ballOut->position.y = gMinPos.y + 1.f;
+            ball->position.y = gMinPos.y + 1.f;
         } else {
-            ballOut->delta.y += min(wallForce / (d * d * d), 10.f);
+            ball->delta.y += min(wallForce / (d * d * d), 10.f);
         }
     }
 
-    ballOut->size = ballIn->size;
+    // low pressure ~500, high ~2500
+    pressure = max(pressure - 400.f, 0.f);
+    ball->pressure = pressure;
 
-    //rsDebug("physics pos out", ballOut->position);
+    //rsDebug("p ", pressure);
+
+    float4 color = 1.f;
+    color.r = pow(pressure, 0.25f) / 12.f;
+    color.b = 1.f - color.r;
+    color.g = sin(pressure / 1500.f * 3.14f);
+    color.rgb = max(color.rgb, (float3)0);
+    color.rgb = normalize(color.rgb);
+    ball->color = rsPackColorTo8888(color);
+
+    //rsDebug("physics pos out", ball->position);
 }
 
diff --git a/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/balls.rs b/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/balls.rs
index dcdd586..9be9f38 100644
--- a/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/balls.rs
+++ b/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/balls.rs
@@ -8,12 +8,15 @@
 #pragma stateStore(parent)
 
 rs_program_fragment gPFPoints;
-rs_program_fragment gPFLines;
 rs_mesh partMesh;
 
+rs_allocation gGrid;
+BallGrid_t *unused1;
+float2 *gGridCache;
+
 typedef struct __attribute__((packed, aligned(4))) Point {
     float2 position;
-    float size;
+    uchar4 color;
 } Point_t;
 Point_t *point;
 
@@ -24,58 +27,78 @@
 
 rs_script physics_script;
 
-Ball_t *balls1;
-Ball_t *balls2;
-
-static int frame = 0;
 
 void initParts(int w, int h)
 {
-    uint32_t dimX = rsAllocationGetDimX(rsGetAllocation(balls1));
+    uint32_t dimX = rsAllocationGetDimX(rsGetAllocation(balls));
 
     for (uint32_t ct=0; ct < dimX; ct++) {
-        balls1[ct].position.x = rsRand(0.f, (float)w);
-        balls1[ct].position.y = rsRand(0.f, (float)h);
-        balls1[ct].delta.x = 0.f;
-        balls1[ct].delta.y = 0.f;
-        balls1[ct].size = 1.f;
-
-        float r = rsRand(100.f);
-        if (r > 90.f) {
-            balls1[ct].size += pow(10.f, rsRand(0.f, 2.f)) * 0.07f;
-        }
+        balls[ct].position.x = rsRand(0.f, (float)w);
+        balls[ct].position.y = rsRand(0.f, (float)h);
+        balls[ct].delta.x = 0.f;
+        balls[ct].delta.y = 0.f;
     }
 }
 
-
-
 int root() {
     rsgClearColor(0.f, 0.f, 0.f, 1.f);
 
-    BallControl_t bc;
-    Ball_t *bout;
+    int2 gridDims = (int2){ rsAllocationGetDimX(gGrid),
+                            rsAllocationGetDimY(gGrid) };
 
-    if (frame & 1) {
-        bc.ain = rsGetAllocation(balls2);
-        bc.aout = rsGetAllocation(balls1);
-        bout = balls1;
-    } else {
-        bc.ain = rsGetAllocation(balls1);
-        bc.aout = rsGetAllocation(balls2);
-        bout = balls2;
+    rs_allocation ain = rsGetAllocation(balls);
+    int32_t dimX = rsAllocationGetDimX(ain);
+
+    // Binning
+    // Clear the particle list
+    for (uint32_t ct=0; ct < dimX; ct++) {
+        balls[ct].next = -1;
     }
 
-    bc.dimX = rsAllocationGetDimX(bc.ain);
-    bc.dt = 1.f / 30.f;
-
-    rsForEach(physics_script, bc.ain, bc.aout, &bc, sizeof(bc));
-
-    for (uint32_t ct=0; ct < bc.dimX; ct++) {
-        point[ct].position = bout[ct].position;
-        point[ct].size = 6.f /*+ bout[ct].color.g * 6.f*/ * bout[ct].size;
+    // Clear the grid
+    for (uint32_t y=0; y < gridDims.y; y++) {
+        for (uint32_t x=0; x < gridDims.x; x++) {
+            BallGrid_t *bg = (BallGrid_t *)rsGetElementAt(gGrid, x, y);
+            bg->count = 0;
+            bg->idx = -1;
+        }
     }
 
-    frame++;
+    // Create the particle list per grid
+    for (uint32_t ct=0; ct < dimX; ct++) {
+        int2 p = convert_int2(balls[ct].position / 100.f);
+        p.x = rsClamp(p.x, 0, (int)(gridDims.x-1));
+        p.y = rsClamp(p.y, 0, (int)(gridDims.y-1));
+        BallGrid_t *bg = (BallGrid_t *)rsGetElementAt(gGrid, p.x, p.y);
+        bg->count ++;
+        balls[ct].next = bg->idx;
+        bg->idx = ct;
+    }
+
+    // Create the sorted grid cache
+    uint32_t gridIdx = 0;
+    for (uint32_t y=0; y < gridDims.y; y++) {
+        for (uint32_t x=0; x < gridDims.x; x++) {
+            BallGrid_t *bg = (BallGrid_t *)rsGetElementAt(gGrid, x, y);
+            bg->cacheIdx = gridIdx;
+
+            int idx = bg->idx;
+            while (idx >= 0) {
+                const Ball_t * bPtr = &balls[idx];
+                gGridCache[gridIdx++] = bPtr->position;
+                idx = bPtr->next;
+            }
+        }
+    }
+
+
+    rsForEach(physics_script, ain, ain);
+
+    for (uint32_t ct=0; ct < dimX; ct++) {
+        point[ct].position = balls[ct].position;
+        point[ct].color = balls[ct].color;
+    }
+
     rsgBindProgramFragment(gPFPoints);
     rsgDrawMesh(partMesh);
     return 1;
diff --git a/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/balls.rsh b/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/balls.rsh
index fc886f9..ebe23f8 100644
--- a/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/balls.rsh
+++ b/tests/RenderScriptTests/Balls/src/com/example/android/rs/balls/balls.rsh
@@ -2,17 +2,18 @@
 typedef struct __attribute__((packed, aligned(4))) Ball {
     float2 delta;
     float2 position;
-    //float3 color;
-    float size;
+    uchar4 color;
+    float pressure;
+    //float size;
+    int32_t next;
     //int arcID;
     //float arcStr;
 } Ball_t;
 Ball_t *balls;
 
 
-typedef struct BallControl {
-    uint32_t dimX;
-    rs_allocation ain;
-    rs_allocation aout;
-    float dt;
-} BallControl_t;
+typedef struct BallGrid {
+    int32_t idx;
+    int32_t count;
+    int32_t cacheIdx;
+} BallGrid_t;
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/TestBase.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/TestBase.java
index b5df38d..faef83aa 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/TestBase.java
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/TestBase.java
@@ -45,7 +45,6 @@
     protected Allocation mInPixelsAllocation;
     protected Allocation mInPixelsAllocation2;
     protected Allocation mOutPixelsAllocation;
-    protected ScriptC_msg mMessageScript;
 
     protected ImageProcessingActivity act;
 
@@ -110,7 +109,6 @@
         act = ipact;
         mRS = RenderScript.create(act);
         mRS.setMessageHandler(new MessageProcessor(act));
-        mMessageScript = new ScriptC_msg(mRS);
 
         mInPixelsAllocation = Allocation.createFromBitmap(mRS, b);
         mInPixelsAllocation2 = Allocation.createFromBitmap(mRS, b2);
@@ -129,7 +127,7 @@
 
     final public void runTestSendMessage() {
         runTest();
-        mMessageScript.invoke_sendMsg();
+        mRS.sendMessage(0, null);
     }
 
     public void finish() {
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/bwfilter.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/bwfilter.rs
index 2818bf5..03e5a79 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/bwfilter.rs
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/bwfilter.rs
@@ -16,7 +16,7 @@
 
 #pragma version(1)
 #pragma rs java_package_name(com.android.rs.image)
-#pragma rs_fp_relaxed
+//#pragma rs_fp_relaxed
 
 static float sr = 0.f;
 static float sg = 0.f;
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/shadows.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/shadows.rs
index 81cb9d0..7ee3405 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/shadows.rs
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/shadows.rs
@@ -16,7 +16,7 @@
 
 #pragma version(1)
 #pragma rs java_package_name(com.android.rs.image)
-#pragma rs_fp_relaxed
+//#pragma rs_fp_relaxed
 
 static double shadowFilterMap[] = {
     -0.00591,  0.0001,
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/vibrance.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/vibrance.rs
index 677e857..fae94a1 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/vibrance.rs
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/vibrance.rs
@@ -16,7 +16,6 @@
 
 #pragma version(1)
 #pragma rs java_package_name(com.android.rs.image)
-#pragma rs_fp_relaxed
 
 float vibrance = 0.f;
 
@@ -39,7 +38,7 @@
     int g = in->g;
     int b = in->b;
     float red = (r-max(g, b))/256.f;
-    float sx = (float)(Vib/(1+exp(-red*3)));
+    float sx = (float)(Vib/(1+native_exp(-red*3)));
     S = sx+1;
     MS = 1.0f - S;
     Rt = Rf * MS;
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/vignette_approx.rsh b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/vignette_approx.rsh
index 05a5929..5668621 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/vignette_approx.rsh
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/vignette_approx.rsh
@@ -50,8 +50,7 @@
     const float2 inCoord = {(float)x, (float)y};
     const float2 coord = mad(inCoord, inv_dimensions, neg_center);
     const float sloped_dist_ratio = fast_length(axis_scale * coord)  * sloped_inv_max_dist;
-    // TODO:  add half_exp once implemented
-    const float lumen = opp_shade + shade * half_recip(1.f + sloped_neg_range * exp(sloped_dist_ratio));
+    const float lumen = opp_shade + shade * half_recip(1.f + sloped_neg_range * native_exp(sloped_dist_ratio));
     float4 fout;
     fout.rgb = fin.rgb * lumen;
     fout.w = fin.w;
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/wbalance.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/wbalance.rs
index b9c28fc..8c825f2 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/wbalance.rs
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/wbalance.rs
@@ -16,7 +16,7 @@
 
 #pragma version(1)
 #pragma rs java_package_name(com.android.rs.image)
-#pragma rs_fp_relaxed
+//#pragma rs_fp_relaxed
 
 static int histR[256] = {0}, histG[256] = {0}, histB[256] = {0};
 
diff --git a/tests/RenderScriptTests/ImageProcessing2/src/com/android/rs/image/Convolve3x3.java b/tests/RenderScriptTests/ImageProcessing2/src/com/android/rs/image/Convolve3x3.java
index 7635e13..d4852f0 100644
--- a/tests/RenderScriptTests/ImageProcessing2/src/com/android/rs/image/Convolve3x3.java
+++ b/tests/RenderScriptTests/ImageProcessing2/src/com/android/rs/image/Convolve3x3.java
@@ -22,7 +22,7 @@
 import android.util.Log;
 
 public class Convolve3x3 extends TestBase {
-    private ScriptC_convolve3x3 mScript;
+    private ScriptC_ip2_convolve3x3 mScript;
     private ScriptIntrinsicConvolve3x3 mIntrinsic;
 
     private int mWidth;
@@ -47,7 +47,7 @@
             mIntrinsic.setCoefficients(f);
             mIntrinsic.setInput(mInPixelsAllocation);
         } else {
-            mScript = new ScriptC_convolve3x3(mRS, res, R.raw.convolve3x3);
+            mScript = new ScriptC_ip2_convolve3x3(mRS, res, R.raw.ip2_convolve3x3);
             mScript.set_gCoeffs(f);
             mScript.set_gIn(mInPixelsAllocation);
             mScript.set_gWidth(mWidth);
diff --git a/tests/RenderScriptTests/ImageProcessing2/src/com/android/rs/image/convolve3x3.rs b/tests/RenderScriptTests/ImageProcessing2/src/com/android/rs/image/ip2_convolve3x3.rs
similarity index 100%
rename from tests/RenderScriptTests/ImageProcessing2/src/com/android/rs/image/convolve3x3.rs
rename to tests/RenderScriptTests/ImageProcessing2/src/com/android/rs/image/ip2_convolve3x3.rs
diff --git a/tests/RenderScriptTests/MathErr/Android.mk b/tests/RenderScriptTests/MathErr/Android.mk
new file mode 100644
index 0000000..b3edd02
--- /dev/null
+++ b/tests/RenderScriptTests/MathErr/Android.mk
@@ -0,0 +1,27 @@
+#
+# 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src) \
+                   $(call all-renderscript-files-under, src)
+
+LOCAL_PACKAGE_NAME := RsMathErr
+
+include $(BUILD_PACKAGE)
diff --git a/tests/RenderScriptTests/MathErr/AndroidManifest.xml b/tests/RenderScriptTests/MathErr/AndroidManifest.xml
new file mode 100644
index 0000000..6a3db2c
--- /dev/null
+++ b/tests/RenderScriptTests/MathErr/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.rs.matherr">
+
+    <uses-sdk android:minSdkVersion="17" />
+    <application android:label="RS Math Err">
+        <activity android:name="MathErrActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/tests/RenderScriptTests/MathErr/res/layout/main.xml b/tests/RenderScriptTests/MathErr/res/layout/main.xml
new file mode 100644
index 0000000..7b2c76a
--- /dev/null
+++ b/tests/RenderScriptTests/MathErr/res/layout/main.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    <ImageView
+        android:id="@+id/displayin"
+        android:layout_width="320dip"
+        android:layout_height="266dip" />
+
+    <ImageView
+        android:id="@+id/displayout"
+        android:layout_width="320dip"
+        android:layout_height="266dip" />
+
+</LinearLayout>
diff --git a/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/MathErr.java b/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/MathErr.java
new file mode 100644
index 0000000..4561267
--- /dev/null
+++ b/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/MathErr.java
@@ -0,0 +1,86 @@
+/*
+ * 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.
+ */
+
+package com.example.android.rs.matherr;
+
+import android.content.res.Resources;
+import android.renderscript.*;
+import java.lang.Float;
+import java.lang.Math;
+
+public class MathErr {
+    private RenderScript mRS;
+    private Allocation mAllocationSrc;
+    private Allocation mAllocationRes;
+    private ScriptC_math_err mScript;
+    private java.util.Random mRand = new java.util.Random();
+
+    private final int BUF_SIZE = 4096;
+    float mSrc[] = new float[BUF_SIZE];
+    float mRef[] = new float[BUF_SIZE];
+    float mRes[] = new float[BUF_SIZE];
+
+    MathErr(RenderScript rs) {
+        mRS = rs;
+        mScript = new ScriptC_math_err(mRS);
+
+        mAllocationSrc = Allocation.createSized(rs, Element.F32(rs), BUF_SIZE);
+        mAllocationRes = Allocation.createSized(rs, Element.F32(rs), BUF_SIZE);
+
+        testExp2();
+        testLog2();
+    }
+
+    void buildRand() {
+        for (int i=0; i < BUF_SIZE; i++) {
+            mSrc[i] = (((float)i) / 9) - 200;
+            //mSrc[i] = Float.intBitsToFloat(mRand.nextInt());
+        }
+        mAllocationSrc.copyFrom(mSrc);
+    }
+
+    void logErr() {
+        mAllocationRes.copyTo(mRes);
+        for (int i=0; i < BUF_SIZE; i++) {
+            int err = Float.floatToRawIntBits(mRef[i]) - Float.floatToRawIntBits(mRes[i]);
+            err = Math.abs(err);
+            if (err > 8096) {
+                android.util.Log.v("err", "error " + err + " src " + mSrc[i] + " ref " + mRef[i] + " res " + mRes[i]);
+            }
+        }
+    }
+
+    void testExp2() {
+        android.util.Log.v("err", "testing exp2");
+        buildRand();
+        mScript.forEach_testExp2(mAllocationSrc, mAllocationRes);
+        for (int i=0; i < BUF_SIZE; i++) {
+            mRef[i] = (float)Math.pow(2.f, mSrc[i]);
+        }
+        logErr();
+    }
+
+    void testLog2() {
+        android.util.Log.v("err", "testing log2");
+        buildRand();
+        mScript.forEach_testLog2(mAllocationSrc, mAllocationRes);
+        for (int i=0; i < BUF_SIZE; i++) {
+            mRef[i] = (float)Math.log(mSrc[i]) * 1.442695041f;
+        }
+        logErr();
+    }
+
+}
diff --git a/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/MathErrActivity.java b/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/MathErrActivity.java
new file mode 100644
index 0000000..74d7b71
--- /dev/null
+++ b/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/MathErrActivity.java
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+package com.example.android.rs.matherr;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.renderscript.RenderScript;
+import android.renderscript.Allocation;
+import android.util.Log;
+
+public class MathErrActivity extends Activity {
+    private MathErr mME;
+    private RenderScript mRS;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);
+
+        mRS = RenderScript.create(this);
+        mME = new MathErr(mRS);
+    }
+}
diff --git a/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/math_err.rs b/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/math_err.rs
new file mode 100644
index 0000000..a26770b
--- /dev/null
+++ b/tests/RenderScriptTests/MathErr/src/com/example/android/rs/matherr/math_err.rs
@@ -0,0 +1,84 @@
+/*
+ * 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.
+ */
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.android.rs.matherr)
+
+typedef union
+{
+  float fv;
+  int32_t iv;
+} ieee_float_shape_type;
+
+/* Get a 32 bit int from a float.  */
+
+#define GET_FLOAT_WORD(i,d)         \
+do {                                \
+  ieee_float_shape_type gf_u;       \
+  gf_u.fv = (d);                    \
+  (i) = gf_u.iv;                    \
+} while (0)
+
+/* Set a float from a 32 bit int.  */
+
+#define SET_FLOAT_WORD(d,i)         \
+do {                                \
+  ieee_float_shape_type sf_u;       \
+  sf_u.iv = (i);                    \
+  (d) = sf_u.fv;                    \
+} while (0)
+
+
+static float fast_log2(float v) {
+    int32_t ibits;
+    GET_FLOAT_WORD(ibits, v);
+
+    int32_t e = (ibits >> 23) & 0xff;
+
+    ibits &= 0x7fffff;
+    ibits |= 127 << 23;
+
+    float ir;
+    SET_FLOAT_WORD(ir, ibits);
+
+    ir -= 1.5f;
+    float ir2 = ir*ir;
+    float adj2 = 0.405465108f + // -0.00009f +
+                 (0.666666667f * ir) -
+                 (0.222222222f * ir2) +
+                 (0.098765432f * ir*ir2) -
+                 (0.049382716f * ir2*ir2) +
+                 (0.026337449f * ir*ir2*ir2) -
+                 (0.014631916f * ir2*ir2*ir2);
+    adj2 *= (1.f / 0.693147181f);
+
+    return (float)(e - 127) + adj2;
+}
+
+void testExp2(const float *in, float *out) {
+    float i = *in;
+    if (i > (-125.f) && i < 125.f) {
+        *out = native_exp2(i);
+    } else {
+        *out = exp2(i);
+    }
+    *out = native_exp2(i);
+}
+
+void testLog2(const float *in, float *out) {
+    *out = fast_log2(*in);
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/Android.mk b/tests/RenderScriptTests/RSTest_CompatLib/Android.mk
new file mode 100644
index 0000000..0fd0d96
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/Android.mk
@@ -0,0 +1,40 @@
+#
+# 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
+
+LOCAL_PACKAGE_NAME := RSTest_Compat
+
+LOCAL_STATIC_JAVA_LIBRARIES := android.support.v8.renderscript
+
+LOCAL_SDK_VERSION := 8
+LOCAL_RENDERSCRIPT_TARGET_API := 18
+LOCAL_RENDERSCRIPT_COMPATIBILITY := 18
+
+LOCAL_RENDERSCRIPT_CC := $(LLVM_RS_CC)
+LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE := \
+    $(TOPDIR)external/clang/lib/Headers \
+    $(TOPDIR)frameworks/rs/scriptc
+
+LOCAL_RENDERSCRIPT_FLAGS := -rs-package-name=android.support.v8.renderscript
+LOCAL_REQUIRED_MODULES := librsjni
+
+include $(BUILD_PACKAGE)
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/AndroidManifest.xml b/tests/RenderScriptTests/RSTest_CompatLib/AndroidManifest.xml
new file mode 100644
index 0000000..53219e7
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/AndroidManifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.rs.test_compat">
+  <uses-sdk android:minSdkVersion="8" />
+  <uses-sdk android:targetSdkVersion="8" />
+    <application
+        android:label="_RS_Test_Compat"
+        android:icon="@drawable/test_pattern">
+        <activity android:name="RSTest"
+                  android:screenOrientation="portrait">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/res/drawable-nodpi/test_pattern.png b/tests/RenderScriptTests/RSTest_CompatLib/res/drawable-nodpi/test_pattern.png
new file mode 100644
index 0000000..e7d1455
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/res/drawable-nodpi/test_pattern.png
Binary files differ
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/RSTest.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/RSTest.java
new file mode 100644
index 0000000..b76f21e
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/RSTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.support.v8.renderscript.RenderScript;
+
+import android.app.ListActivity;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.provider.Settings.System;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.ArrayAdapter;
+
+import java.lang.Runtime;
+
+public class RSTest extends ListActivity {
+
+    private static final String LOG_TAG = "RSTest_Compat";
+    private static final boolean DEBUG  = false;
+    private static final boolean LOG_ENABLED = false;
+
+    private RenderScript mRS;
+    private RSTestCore RSTC;
+
+    String mTestNames[];
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        mRS = RenderScript.create(this);
+
+        RSTC = new RSTestCore(this);
+        RSTC.init(mRS, getResources());
+
+
+
+
+    }
+
+    static void log(String message) {
+        if (LOG_ENABLED) {
+            Log.v(LOG_TAG, message);
+        }
+    }
+
+
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/RSTestCore.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/RSTestCore.java
new file mode 100644
index 0000000..51f8a4d
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/RSTestCore.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2008-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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+import android.util.Log;
+import java.util.ArrayList;
+import java.util.ListIterator;
+import java.util.Timer;
+import java.util.TimerTask;
+import android.app.ListActivity;
+import android.widget.ArrayAdapter;
+
+public class RSTestCore {
+    ListActivity mCtx;
+
+    public RSTestCore(ListActivity ctx) {
+        mCtx = ctx;
+    }
+
+    private Resources mRes;
+    private RenderScript mRS;
+
+    private ArrayList<UnitTest> unitTests;
+    private ListIterator<UnitTest> test_iter;
+    private UnitTest activeTest;
+    private boolean stopTesting;
+
+    private ScriptField_ListAllocs_s mListAllocs;
+
+    private ArrayAdapter<UnitTest> testAdapter;
+
+    /* Periodic timer for ensuring future tests get scheduled */
+    private Timer mTimer;
+    public static final int RS_TIMER_PERIOD = 100;
+
+    public void init(RenderScript rs, Resources res) {
+        mRS = rs;
+        mRes = res;
+        stopTesting = false;
+
+        unitTests = new ArrayList<UnitTest>();
+
+        unitTests.add(new UT_primitives(this, mRes, mCtx));
+        unitTests.add(new UT_constant(this, mRes, mCtx));
+        unitTests.add(new UT_vector(this, mRes, mCtx));
+        unitTests.add(new UT_unsigned(this, mRes, mCtx));
+        unitTests.add(new UT_array_init(this, mRes, mCtx));
+        unitTests.add(new UT_array_alloc(this, mRes, mCtx));
+        unitTests.add(new UT_kernel(this, mRes, mCtx));
+        unitTests.add(new UT_kernel_struct(this, mRes, mCtx));
+        unitTests.add(new UT_bug_char(this, mRes, mCtx));
+        unitTests.add(new UT_clamp(this, mRes, mCtx));
+        unitTests.add(new UT_clamp_relaxed(this, mRes, mCtx));
+        unitTests.add(new UT_convert(this, mRes, mCtx));
+        unitTests.add(new UT_convert_relaxed(this, mRes, mCtx));
+        unitTests.add(new UT_copy_test(this, mRes, mCtx));
+        unitTests.add(new UT_rsdebug(this, mRes, mCtx));
+        unitTests.add(new UT_rstime(this, mRes, mCtx));
+        unitTests.add(new UT_rstypes(this, mRes, mCtx));
+        unitTests.add(new UT_alloc(this, mRes, mCtx));
+        unitTests.add(new UT_refcount(this, mRes, mCtx));
+        unitTests.add(new UT_foreach(this, mRes, mCtx));
+        unitTests.add(new UT_foreach_bounds(this, mRes, mCtx));
+        unitTests.add(new UT_noroot(this, mRes, mCtx));
+        unitTests.add(new UT_atomic(this, mRes, mCtx));
+        unitTests.add(new UT_struct(this, mRes, mCtx));
+        unitTests.add(new UT_math(this, mRes, mCtx));
+        unitTests.add(new UT_math_conformance(this, mRes, mCtx));
+        unitTests.add(new UT_math_agree(this, mRes, mCtx));
+        unitTests.add(new UT_min(this, mRes, mCtx));
+        unitTests.add(new UT_int4(this, mRes, mCtx));
+        unitTests.add(new UT_element(this, mRes, mCtx));
+        unitTests.add(new UT_sampler(this, mRes, mCtx));
+        unitTests.add(new UT_fp_mad(this, mRes, mCtx));
+
+        /*
+        unitTests.add(new UnitTest(null, "<Pass>", 1));
+        unitTests.add(new UnitTest());
+        unitTests.add(new UnitTest(null, "<Fail>", -1));
+
+        for (int i = 0; i < 20; i++) {
+            unitTests.add(new UnitTest(null, "<Pass>", 1));
+        }
+        */
+
+        UnitTest [] uta = new UnitTest[unitTests.size()];
+        uta = unitTests.toArray(uta);
+
+        mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length);
+        for (int i = 0; i < uta.length; i++) {
+
+            ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item();
+            listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT);
+            listElem.result = uta[i].getResult();
+            mListAllocs.set(listElem, i, false);
+            uta[i].setItem(listElem);
+        }
+
+        mListAllocs.copyAll();
+
+        testAdapter = new ArrayAdapter<UnitTest>(mCtx, android.R.layout.simple_list_item_1, unitTests);
+        mCtx.setListAdapter(testAdapter);
+
+        test_iter = unitTests.listIterator();
+        refreshTestResults(); /* Kick off the first test */
+
+        TimerTask pTask = new TimerTask() {
+            public void run() {
+                refreshTestResults();
+            }
+        };
+
+        mTimer = new Timer();
+        mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD);
+    }
+
+    public void checkAndRunNextTest() {
+        mCtx.runOnUiThread(new Runnable() {
+                public void run() {
+                    if (testAdapter != null)
+                        testAdapter.notifyDataSetChanged();
+                }
+            });
+
+        if (activeTest != null) {
+            if (!activeTest.isAlive()) {
+                /* Properly clean up on our last test */
+                try {
+                    activeTest.join();
+                }
+                catch (InterruptedException e) {
+                }
+                activeTest = null;
+            }
+        }
+
+        if (!stopTesting && activeTest == null) {
+            if (test_iter.hasNext()) {
+                activeTest = test_iter.next();
+                activeTest.start();
+                /* This routine will only get called once when a new test
+                 * should start running. The message handler in UnitTest.java
+                 * ensures this. */
+            }
+            else {
+                if (mTimer != null) {
+                    mTimer.cancel();
+                    mTimer.purge();
+                    mTimer = null;
+                }
+            }
+        }
+    }
+
+    public void refreshTestResults() {
+        checkAndRunNextTest();
+    }
+
+    public void cleanup() {
+        stopTesting = true;
+        UnitTest t = activeTest;
+
+        /* Stop periodic refresh of testing */
+        if (mTimer != null) {
+            mTimer.cancel();
+            mTimer.purge();
+            mTimer = null;
+        }
+
+        /* Wait to exit until we finish the current test */
+        if (t != null) {
+            try {
+                t.join();
+            }
+            catch (InterruptedException e) {
+            }
+            t = null;
+        }
+
+    }
+
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_alloc.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_alloc.java
new file mode 100644
index 0000000..ddc6a99
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_alloc.java
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_alloc extends UnitTest {
+    private Resources mRes;
+
+    protected UT_alloc(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Alloc", ctx);
+        mRes = res;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_alloc s) {
+        Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
+        int X = 5;
+        int Y = 7;
+        int Z = 0;
+        s.set_dimX(X);
+        s.set_dimY(Y);
+        s.set_dimZ(Z);
+        typeBuilder.setX(X).setY(Y);
+        Allocation A = Allocation.createTyped(RS, typeBuilder.create());
+        s.bind_a(A);
+
+        typeBuilder = new Type.Builder(RS, Element.I32(RS));
+        typeBuilder.setX(X).setY(Y).setFaces(true);
+        Allocation AFaces = Allocation.createTyped(RS, typeBuilder.create());
+        s.set_aFaces(AFaces);
+        typeBuilder.setFaces(false).setMipmaps(true);
+        Allocation ALOD = Allocation.createTyped(RS, typeBuilder.create());
+        s.set_aLOD(ALOD);
+        typeBuilder.setFaces(true).setMipmaps(true);
+        Allocation AFacesLOD = Allocation.createTyped(RS, typeBuilder.create());
+        s.set_aFacesLOD(AFacesLOD);
+
+        return;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_alloc s = new ScriptC_alloc(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeGlobals(pRS, s);
+        s.invoke_alloc_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_array_alloc.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_array_alloc.java
new file mode 100644
index 0000000..751187b
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_array_alloc.java
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_array_alloc extends UnitTest {
+    private Resources mRes;
+
+    protected UT_array_alloc(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Array Allocation", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_array_alloc s = new ScriptC_array_alloc(pRS);
+        pRS.setMessageHandler(mRsMessage);
+
+        int dimX = s.get_dimX();
+        Allocation[] Arr = new Allocation[dimX];
+        Type.Builder typeBuilder = new Type.Builder(pRS, Element.I32(pRS));
+        Type T = typeBuilder.setX(1).create();
+        for (int i = 0; i < dimX; i++) {
+            Allocation A = Allocation.createTyped(pRS, T);
+            Arr[i] = A;
+        }
+        s.set_a(Arr);
+
+        s.invoke_array_alloc_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+        passTest();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_array_init.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_array_init.java
new file mode 100644
index 0000000..f8b2fd3
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_array_init.java
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_array_init extends UnitTest {
+    private Resources mRes;
+
+    protected UT_array_init(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Array Init", ctx);
+        mRes = res;
+    }
+
+    private void checkInit(ScriptC_array_init s) {
+        float[] fa = s.get_fa();
+        _RS_ASSERT("fa[0] == 1.0", fa[0] == 1.0);
+        _RS_ASSERT("fa[1] == 9.9999f", fa[1] == 9.9999f);
+        _RS_ASSERT("fa[2] == 0", fa[2] == 0);
+        _RS_ASSERT("fa[3] == 0", fa[3] == 0);
+        _RS_ASSERT("fa.length == 4", fa.length == 4);
+
+        double[] da = s.get_da();
+        _RS_ASSERT("da[0] == 7.0", da[0] == 7.0);
+        _RS_ASSERT("da[1] == 8.88888", da[1] == 8.88888);
+        _RS_ASSERT("da.length == 2", da.length == 2);
+
+        byte[] ca = s.get_ca();
+        _RS_ASSERT("ca[0] == 'a'", ca[0] == 'a');
+        _RS_ASSERT("ca[1] == 7", ca[1] == 7);
+        _RS_ASSERT("ca[2] == 'b'", ca[2] == 'b');
+        _RS_ASSERT("ca[3] == 'c'", ca[3] == 'c');
+        _RS_ASSERT("ca.length == 4", ca.length == 4);
+
+        short[] sa = s.get_sa();
+        _RS_ASSERT("sa[0] == 1", sa[0] == 1);
+        _RS_ASSERT("sa[1] == 1", sa[1] == 1);
+        _RS_ASSERT("sa[2] == 2", sa[2] == 2);
+        _RS_ASSERT("sa[3] == 3", sa[3] == 3);
+        _RS_ASSERT("sa.length == 4", sa.length == 4);
+
+        int[] ia = s.get_ia();
+        _RS_ASSERT("ia[0] == 5", ia[0] == 5);
+        _RS_ASSERT("ia[1] == 8", ia[1] == 8);
+        _RS_ASSERT("ia[2] == 0", ia[2] == 0);
+        _RS_ASSERT("ia[3] == 0", ia[3] == 0);
+        _RS_ASSERT("ia.length == 4", ia.length == 4);
+
+        long[] la = s.get_la();
+        _RS_ASSERT("la[0] == 13", la[0] == 13);
+        _RS_ASSERT("la[1] == 21", la[1] == 21);
+        _RS_ASSERT("la.length == 4", la.length == 2);
+
+        long[] lla = s.get_lla();
+        _RS_ASSERT("lla[0] == 34", lla[0] == 34);
+        _RS_ASSERT("lla[1] == 0", lla[1] == 0);
+        _RS_ASSERT("lla[2] == 0", lla[2] == 0);
+        _RS_ASSERT("lla[3] == 0", lla[3] == 0);
+        _RS_ASSERT("lla.length == 4", lla.length == 4);
+
+        boolean[] ba = s.get_ba();
+        _RS_ASSERT("ba[0] == true", ba[0] == true);
+        _RS_ASSERT("ba[1] == false", ba[1] == false);
+        _RS_ASSERT("ba[2] == false", ba[2] == false);
+        _RS_ASSERT("ba.length == 3", ba.length == 3);
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_array_init s = new ScriptC_array_init(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        checkInit(s);
+        s.invoke_array_init_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+        passTest();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_atomic.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_atomic.java
new file mode 100644
index 0000000..7fe4b36
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_atomic.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_atomic extends UnitTest {
+    private Resources mRes;
+
+    protected UT_atomic(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Atomics", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_atomic s = new ScriptC_atomic(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_atomic_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_bug_char.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_bug_char.java
new file mode 100644
index 0000000..5da5288
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_bug_char.java
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+import android.util.Log;
+import java.util.Arrays;
+
+public class UT_bug_char extends UnitTest {
+    private Resources mRes;
+
+    protected UT_bug_char(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Bug Char", ctx);
+        mRes = res;
+    }
+
+    // packing functions
+    private Byte2 pack_b2(byte[] val) {
+        assert val.length == 2;
+        Log.i("bug_char", "pack_b2 " + val[0] + " " + val[1]);
+        return new Byte2(val[0], val[1]);
+    }
+
+    private byte min(byte v1, byte v2) {
+        return v1 < v2 ? v1 : v2;
+    }
+    private byte[] min(byte[] v1, byte[] v2) {
+        assert v1.length == v2.length;
+        byte[] rv = new byte[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = min(v1[i], v2[i]);
+        return rv;
+    }
+
+    private void initializeValues(ScriptC_bug_char s) {
+        byte rand_sc1_0 = (byte)7;
+        byte[] rand_sc2_0 = new byte[2];
+        rand_sc2_0[0] = 11;
+        rand_sc2_0[1] = 21;
+        Log.i("bug_char", "Generated sc2_0 to " + Arrays.toString(rand_sc2_0));
+        byte rand_sc1_1 = (byte)10;
+        byte[] rand_sc2_1 = new byte[2];
+        rand_sc2_1[0] = 13;
+        rand_sc2_1[1] = 15;
+        Log.i("bug_char", "Generated sc2_1 to " + Arrays.toString(rand_sc2_1));
+
+        s.set_rand_sc1_0(rand_sc1_0);
+        s.set_rand_sc2_0(pack_b2(rand_sc2_0));
+        s.set_rand_sc1_1(rand_sc1_1);
+        s.set_rand_sc2_1(pack_b2(rand_sc2_1));
+        // Set results for min
+        s.set_min_rand_sc1_sc1(min(rand_sc1_0, rand_sc1_1));
+        byte[] min_rand_sc2_raw = min(rand_sc2_0, rand_sc2_1);
+        Log.i("bug_char", "Generating min_rand_sc2_sc2 to " +
+              Arrays.toString(min_rand_sc2_raw));
+        Byte2 min_rand_sc2 = pack_b2(min_rand_sc2_raw);
+        Log.i("bug_char", "Setting min_rand_sc2_sc2 to [" + min_rand_sc2.x +
+              ", " + min_rand_sc2.y + "]");
+        s.set_min_rand_sc2_sc2(min_rand_sc2);
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_bug_char s = new ScriptC_bug_char(pRS, mRes,
+                R.raw.bug_char);
+        pRS.setMessageHandler(mRsMessage);
+        initializeValues(s);
+        s.invoke_bug_char_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_clamp.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_clamp.java
new file mode 100644
index 0000000..1f28abc
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_clamp.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_clamp extends UnitTest {
+    private Resources mRes;
+
+    protected UT_clamp(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Clamp (Full)", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_clamp s = new ScriptC_clamp(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_clamp_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_clamp_relaxed.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_clamp_relaxed.java
new file mode 100644
index 0000000..d880e68
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_clamp_relaxed.java
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_clamp_relaxed extends UnitTest {
+    private Resources mRes;
+
+    protected UT_clamp_relaxed(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Clamp (Relaxed)", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_clamp_relaxed s =
+                new ScriptC_clamp_relaxed(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_clamp_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_constant.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_constant.java
new file mode 100644
index 0000000..3085032
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_constant.java
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_constant extends UnitTest {
+    private Resources mRes;
+
+    protected UT_constant(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Const", ctx);
+        mRes = res;
+    }
+
+    private void Assert(boolean b) {
+        if (!b) {
+            failTest();
+        }
+    }
+
+    public void run() {
+        Assert(ScriptC_constant.const_floatTest == 1.99f);
+        Assert(ScriptC_constant.const_doubleTest == 2.05);
+        Assert(ScriptC_constant.const_charTest == -8);
+        Assert(ScriptC_constant.const_shortTest == -16);
+        Assert(ScriptC_constant.const_intTest == -32);
+        Assert(ScriptC_constant.const_longTest == 17179869184l);
+        Assert(ScriptC_constant.const_longlongTest == 68719476736l);
+
+        Assert(ScriptC_constant.const_ucharTest == 8);
+        Assert(ScriptC_constant.const_ushortTest == 16);
+        Assert(ScriptC_constant.const_uintTest == 32);
+        Assert(ScriptC_constant.const_ulongTest == 4611686018427387904L);
+        Assert(ScriptC_constant.const_int64_tTest == -17179869184l);
+        Assert(ScriptC_constant.const_uint64_tTest == 117179869184l);
+
+        Assert(ScriptC_constant.const_boolTest == true);
+
+        passTest();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_convert.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_convert.java
new file mode 100644
index 0000000..a7cb226
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_convert.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_convert extends UnitTest {
+    private Resources mRes;
+
+    protected UT_convert(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Convert", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_convert s = new ScriptC_convert(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_convert_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_convert_relaxed.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_convert_relaxed.java
new file mode 100644
index 0000000..269bcef
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_convert_relaxed.java
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_convert_relaxed extends UnitTest {
+    private Resources mRes;
+
+    protected UT_convert_relaxed(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Convert (Relaxed)", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_convert_relaxed s =
+                new ScriptC_convert_relaxed(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_convert_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_copy_test.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_copy_test.java
new file mode 100644
index 0000000..f435dde
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_copy_test.java
@@ -0,0 +1,120 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+import android.util.Log;
+
+public class UT_copy_test extends UnitTest {
+    private Resources mRes;
+    boolean pass = true;
+
+    protected UT_copy_test(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Copy", ctx);
+        mRes = res;
+    }
+
+    void testFloat2(RenderScript rs, ScriptC_copy_test s) {
+        Allocation a1 = Allocation.createSized(rs, Element.F32_2(rs), 1024);
+        Allocation a2 = Allocation.createSized(rs, Element.F32_2(rs), 1024);
+
+        float[] f1 = new float[1024 * 2];
+        float[] f2 = new float[1024 * 2];
+        for (int ct=0; ct < f1.length; ct++) {
+            f1[ct] = (float)ct;
+        }
+        a1.copyFrom(f1);
+
+        s.forEach_copyFloat2(a1, a2);
+
+        a2.copyTo(f2);
+        for (int ct=0; ct < f1.length; ct++) {
+            if (f1[ct] != f2[ct]) {
+                failTest();
+                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
+            }
+        }
+        a1.destroy();
+        a2.destroy();
+    }
+
+    void testFloat3(RenderScript rs, ScriptC_copy_test s) {
+        Allocation a1 = Allocation.createSized(rs, Element.F32_3(rs), 1024);
+        Allocation a2 = Allocation.createSized(rs, Element.F32_3(rs), 1024);
+
+        float[] f1 = new float[1024 * 4];
+        float[] f2 = new float[1024 * 4];
+        for (int ct=0; ct < f1.length; ct++) {
+            f1[ct] = (float)ct;
+        }
+        a1.copyFrom(f1);
+
+        s.forEach_copyFloat3(a1, a2);
+
+        a2.copyTo(f2);
+        for (int ct=0; ct < f1.length; ct++) {
+            if ((f1[ct] != f2[ct]) && ((ct&3) != 3)) {
+                failTest();
+                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
+            }
+        }
+        a1.destroy();
+        a2.destroy();
+    }
+
+    void testFloat4(RenderScript rs, ScriptC_copy_test s) {
+        Allocation a1 = Allocation.createSized(rs, Element.F32_4(rs), 1024);
+        Allocation a2 = Allocation.createSized(rs, Element.F32_4(rs), 1024);
+
+        float[] f1 = new float[1024 * 4];
+        float[] f2 = new float[1024 * 4];
+        for (int ct=0; ct < f1.length; ct++) {
+            f1[ct] = (float)ct;
+        }
+        a1.copyFrom(f1);
+
+        s.forEach_copyFloat4(a1, a2);
+
+        a2.copyTo(f2);
+        for (int ct=0; ct < f1.length; ct++) {
+            if (f1[ct] != f2[ct]) {
+                failTest();
+                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
+            }
+        }
+        a1.destroy();
+        a2.destroy();
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_copy_test s = new ScriptC_copy_test(pRS);
+        pRS.setMessageHandler(mRsMessage);
+
+        testFloat2(pRS, s);
+        testFloat3(pRS, s);
+        testFloat4(pRS, s);
+        s.invoke_sendResult(true);
+
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_element.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_element.java
new file mode 100644
index 0000000..abfa44c
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_element.java
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_element extends UnitTest {
+    private Resources mRes;
+
+    Element simpleElem;
+    Element complexElem;
+
+    final String subElemNames[] = {
+        "subElem0",
+        "subElem1",
+        "subElem2",
+        "arrayElem0",
+        "arrayElem1",
+        "subElem3",
+        "subElem4",
+        "subElem5",
+        "subElem6",
+        "subElem_7",
+    };
+
+    final int subElemArraySizes[] = {
+        1,
+        1,
+        1,
+        2,
+        5,
+        1,
+        1,
+        1,
+        1,
+        1,
+    };
+
+    final int subElemOffsets[] = {
+        0,
+        4,
+        8,
+        12,
+        20,
+        40,
+        44,
+        48,
+        64,
+        80,
+    };
+
+    protected UT_element(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Element", ctx);
+        mRes = res;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_element s) {
+        simpleElem = Element.F32_3(RS);
+        complexElem = ScriptField_ComplexStruct.createElement(RS);
+        s.set_simpleElem(simpleElem);
+        s.set_complexElem(complexElem);
+
+        ScriptField_ComplexStruct data = new ScriptField_ComplexStruct(RS, 1);
+        s.bind_complexStruct(data);
+    }
+
+    private void testScriptSide(RenderScript pRS) {
+        ScriptC_element s = new ScriptC_element(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeGlobals(pRS, s);
+        s.invoke_element_test();
+        pRS.finish();
+        waitForMessage();
+    }
+
+    private void testJavaSide(RenderScript RS) {
+
+        int subElemCount = simpleElem.getSubElementCount();
+        _RS_ASSERT("subElemCount == 0", subElemCount == 0);
+
+        subElemCount = complexElem.getSubElementCount();
+        _RS_ASSERT("subElemCount == 10", subElemCount == 10);
+        _RS_ASSERT("complexElem.getSizeBytes() == ScriptField_ComplexStruct.Item.sizeof",
+                   complexElem.getBytesSize() == ScriptField_ComplexStruct.Item.sizeof);
+
+        for (int i = 0; i < subElemCount; i ++) {
+            _RS_ASSERT("complexElem.getSubElement(i) != null",
+                       complexElem.getSubElement(i) != null);
+            _RS_ASSERT("complexElem.getSubElementName(i).equals(subElemNames[i])",
+                       complexElem.getSubElementName(i).equals(subElemNames[i]));
+            _RS_ASSERT("complexElem.getSubElementArraySize(i) == subElemArraySizes[i]",
+                       complexElem.getSubElementArraySize(i) == subElemArraySizes[i]);
+            _RS_ASSERT("complexElem.getSubElementOffsetBytes(i) == subElemOffsets[i]",
+                       complexElem.getSubElementOffsetBytes(i) == subElemOffsets[i]);
+        }
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        testScriptSide(pRS);
+        testJavaSide(pRS);
+        passTest();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_foreach.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_foreach.java
new file mode 100644
index 0000000..c3f3ca0
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_foreach.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011-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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_foreach extends UnitTest {
+    private Resources mRes;
+    private Allocation A;
+
+    protected UT_foreach(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "ForEach", ctx);
+        mRes = res;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_foreach s) {
+        Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
+        int X = 5;
+        int Y = 7;
+        s.set_dimX(X);
+        s.set_dimY(Y);
+        typeBuilder.setX(X).setY(Y);
+        A = Allocation.createTyped(RS, typeBuilder.create());
+        s.bind_a(A);
+
+        return;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_foreach s = new ScriptC_foreach(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeGlobals(pRS, s);
+        s.forEach_root(A);
+        s.invoke_verify_root();
+        s.forEach_foo(A, A);
+        s.invoke_verify_foo();
+        s.invoke_foreach_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_foreach_bounds.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_foreach_bounds.java
new file mode 100644
index 0000000..653ebd5
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_foreach_bounds.java
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_foreach_bounds extends UnitTest {
+    private Resources mRes;
+    private Allocation A;
+
+    protected UT_foreach_bounds(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "ForEach (bounds)", ctx);
+        mRes = res;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_foreach_bounds s) {
+        Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
+        int X = 5;
+        int Y = 7;
+        s.set_dimX(X);
+        s.set_dimY(Y);
+        typeBuilder.setX(X).setY(Y);
+        A = Allocation.createTyped(RS, typeBuilder.create());
+        s.bind_a(A);
+        s.set_s(s);
+        s.set_ain(A);
+        s.set_aout(A);
+        s.set_xStart(2);
+        s.set_xEnd(5);
+        s.set_yStart(3);
+        s.set_yEnd(6);
+        s.forEach_zero(A);
+
+        return;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_foreach_bounds s = new ScriptC_foreach_bounds(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeGlobals(pRS, s);
+        s.invoke_foreach_bounds_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_fp_mad.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_fp_mad.java
new file mode 100644
index 0000000..960df24
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_fp_mad.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_fp_mad extends UnitTest {
+    private Resources mRes;
+
+    protected UT_fp_mad(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Fp_Mad", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_fp_mad s = new ScriptC_fp_mad(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_fp_mad_test(0, 0);
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_int4.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_int4.java
new file mode 100644
index 0000000..9592798
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_int4.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_int4 extends UnitTest {
+    private Resources mRes;
+
+    protected UT_int4(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "int4", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_int4 s = new ScriptC_int4(pRS, mRes, R.raw.int4);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_int4_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_kernel.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_kernel.java
new file mode 100644
index 0000000..ec67665
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_kernel.java
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+import android.util.Log;
+
+public class UT_kernel extends UnitTest {
+    private Resources mRes;
+    private Allocation A;
+    private Allocation B;
+
+    protected UT_kernel(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Kernels (pass-by-value)", ctx);
+        mRes = res;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_kernel s) {
+        Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
+        int X = 5;
+        s.set_dimX(X);
+        typeBuilder.setX(X);
+        A = Allocation.createTyped(RS, typeBuilder.create());
+        s.bind_ain(A);
+        B = Allocation.createTyped(RS, typeBuilder.create());
+        s.bind_aout(B);
+
+        return;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_kernel s = new ScriptC_kernel(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeGlobals(pRS, s);
+        s.forEach_init_vars(A);
+        s.forEach_root(A, B);
+        s.invoke_verify_root();
+        s.invoke_kernel_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_kernel_struct.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_kernel_struct.java
new file mode 100644
index 0000000..07538ec
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_kernel_struct.java
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+import android.util.Log;
+
+public class UT_kernel_struct extends UnitTest {
+    private Resources mRes;
+    private Allocation A;
+    private Allocation B;
+
+    protected UT_kernel_struct(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Kernels (struct pass-by-value)", ctx);
+        mRes = res;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_kernel_struct s) {
+        int X = 5;
+        s.set_dimX(X);
+        ScriptField_simpleStruct t;
+        t = new ScriptField_simpleStruct(RS, X);
+        s.bind_ain(t);
+        A = t.getAllocation();
+        t = new ScriptField_simpleStruct(RS, X);
+        s.bind_aout(t);
+        B = t.getAllocation();
+
+        return;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_kernel_struct s = new ScriptC_kernel_struct(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeGlobals(pRS, s);
+        s.forEach_init_vars(A);
+        s.forEach_root(A, B);
+        s.invoke_verify_root();
+        s.invoke_kernel_struct_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math.java
new file mode 100644
index 0000000..055c454
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_math extends UnitTest {
+    private Resources mRes;
+
+    protected UT_math(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Math", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_math s = new ScriptC_math(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_math_test(0, 0);
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math_agree.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math_agree.java
new file mode 100644
index 0000000..a7e7429
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math_agree.java
@@ -0,0 +1,527 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+import android.util.Log;
+import java.util.Arrays;
+import java.util.Random;
+
+public class UT_math_agree extends UnitTest {
+    private Resources mRes;
+    private Random rand;
+
+    protected UT_math_agree(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Math Agreement", ctx);
+        mRes = res;
+        rand = new Random();
+    }
+
+    // packing functions
+    private Float2 pack_f2(float[] val) {
+        assert val.length == 2;
+        return new Float2(val[0], val[1]);
+    }
+    private Float3 pack_f3(float[] val) {
+        assert val.length == 3;
+        return new Float3(val[0], val[1], val[2]);
+    }
+    private Float4 pack_f4(float[] val) {
+        assert val.length == 4;
+        return new Float4(val[0], val[1], val[2], val[3]);
+    }
+    private Byte2 pack_b2(byte[] val) {
+        assert val.length == 2;
+        return new Byte2(val[0], val[1]);
+    }
+    private Byte3 pack_b3(byte[] val) {
+        assert val.length == 3;
+        return new Byte3(val[0], val[1], val[2]);
+    }
+    private Byte4 pack_b4(byte[] val) {
+        assert val.length == 4;
+        return new Byte4(val[0], val[1], val[2], val[3]);
+    }
+    private Short2 pack_s2(short[] val) {
+        assert val.length == 2;
+        return new Short2(val[0], val[1]);
+    }
+    private Short3 pack_s3(short[] val) {
+        assert val.length == 3;
+        return new Short3(val[0], val[1], val[2]);
+    }
+    private Short4 pack_s4(short[] val) {
+        assert val.length == 4;
+        return new Short4(val[0], val[1], val[2], val[3]);
+    }
+    private Int2 pack_i2(int[] val) {
+        assert val.length == 2;
+        return new Int2(val[0], val[1]);
+    }
+    private Int3 pack_i3(int[] val) {
+        assert val.length == 3;
+        return new Int3(val[0], val[1], val[2]);
+    }
+    private Int4 pack_i4(int[] val) {
+        assert val.length == 4;
+        return new Int4(val[0], val[1], val[2], val[3]);
+    }
+    private Long2 pack_l2(long[] val) {
+        assert val.length == 2;
+        return new Long2(val[0], val[1]);
+    }
+    private Long3 pack_l3(long[] val) {
+        assert val.length == 3;
+        return new Long3(val[0], val[1], val[2]);
+    }
+    private Long4 pack_l4(long[] val) {
+        assert val.length == 4;
+        return new Long4(val[0], val[1], val[2], val[3]);
+    }
+
+    // random vector generation functions
+    private float[] randvec_float(int dim) {
+        float[] fv = new float[dim];
+        for (int i = 0; i < dim; ++i)
+            fv[i] = rand.nextFloat();
+        return fv;
+    }
+    private byte[] randvec_char(int dim) {
+        byte[] cv = new byte[dim];
+        rand.nextBytes(cv);
+        return cv;
+    }
+    private short[] randvec_uchar(int dim) {
+       short[] ucv = new short[dim];
+       for (int i = 0; i < dim; ++i)
+           ucv[i] = (short)rand.nextInt(0x1 << 8);
+       return ucv;
+    }
+    private short[] randvec_short(int dim) {
+        short[] sv = new short[dim];
+        for (int i = 0; i < dim; ++i)
+            sv[i] = (short)rand.nextInt(0x1 << 16);
+        return sv;
+    }
+    private int[] randvec_ushort(int dim) {
+        int[] usv = new int[dim];
+        for (int i = 0; i < dim; ++i)
+            usv[i] = rand.nextInt(0x1 << 16);
+        return usv;
+    }
+    private int[] randvec_int(int dim) {
+        int[] iv = new int[dim];
+        for (int i = 0; i < dim; ++i)
+            iv[i] = rand.nextInt();
+        return iv;
+    }
+    private long[] randvec_uint(int dim) {
+        long[] uiv = new long[dim];
+        for (int i = 0; i < dim; ++i)
+            uiv[i] = (long)rand.nextInt() - (long)Integer.MIN_VALUE;
+        return uiv;
+    }
+    private long[] randvec_long(int dim) {
+        long[] lv = new long[dim];
+        for (int i = 0; i < dim; ++i)
+            lv[i] = rand.nextLong();
+        return lv;
+    }
+    // TODO:  unsigned long generator
+
+    // min reference functions
+    private float min(float v1, float v2) {
+        return v1 < v2 ? v1 : v2;
+    }
+    private float[] min(float[] v1, float[] v2) {
+        assert v1.length == v2.length;
+        float[] rv = new float[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = min(v1[i], v2[i]);
+        return rv;
+    }
+    private byte min(byte v1, byte v2) {
+        return v1 < v2 ? v1 : v2;
+    }
+    private byte[] min(byte[] v1, byte[] v2) {
+        assert v1.length == v2.length;
+        byte[] rv = new byte[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = min(v1[i], v2[i]);
+        return rv;
+    }
+    private short min(short v1, short v2) {
+        return v1 < v2 ? v1 : v2;
+    }
+    private short[] min(short[] v1, short[] v2) {
+        assert v1.length == v2.length;
+        short[] rv = new short[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = min(v1[i], v2[i]);
+        return rv;
+    }
+    private int min(int v1, int v2) {
+        return v1 < v2 ? v1 : v2;
+    }
+    private int[] min(int[] v1, int[] v2) {
+        assert v1.length == v2.length;
+        int[] rv = new int[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = min(v1[i], v2[i]);
+        return rv;
+    }
+    private long min(long v1, long v2) {
+        return v1 < v2 ? v1 : v2;
+    }
+    private long[] min(long[] v1, long[] v2) {
+        assert v1.length == v2.length;
+        long[] rv = new long[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = min(v1[i], v2[i]);
+        return rv;
+    }
+    // TODO:  unsigned long version of min
+
+    // max reference functions
+    private float max(float v1, float v2) {
+        return v1 > v2 ? v1 : v2;
+    }
+    private float[] max(float[] v1, float[] v2) {
+        assert v1.length == v2.length;
+        float[] rv = new float[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = max(v1[i], v2[i]);
+        return rv;
+    }
+    private byte max(byte v1, byte v2) {
+        return v1 > v2 ? v1 : v2;
+    }
+    private byte[] max(byte[] v1, byte[] v2) {
+        assert v1.length == v2.length;
+        byte[] rv = new byte[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = max(v1[i], v2[i]);
+        return rv;
+    }
+    private short max(short v1, short v2) {
+        return v1 > v2 ? v1 : v2;
+    }
+    private short[] max(short[] v1, short[] v2) {
+        assert v1.length == v2.length;
+        short[] rv = new short[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = max(v1[i], v2[i]);
+        return rv;
+    }
+    private int max(int v1, int v2) {
+        return v1 > v2 ? v1 : v2;
+    }
+    private int[] max(int[] v1, int[] v2) {
+        assert v1.length == v2.length;
+        int[] rv = new int[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = max(v1[i], v2[i]);
+        return rv;
+    }
+    private long max(long v1, long v2) {
+        return v1 > v2 ? v1 : v2;
+    }
+    private long[] max(long[] v1, long[] v2) {
+        assert v1.length == v2.length;
+        long[] rv = new long[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = max(v1[i], v2[i]);
+        return rv;
+    }
+    // TODO:  unsigned long version of max
+
+    // fmin reference functions
+    private float fmin(float v1, float v2) {
+        return min(v1, v2);
+    }
+    private float[] fmin(float[] v1, float[] v2) {
+        return min(v1, v2);
+    }
+    private float[] fmin(float[] v1, float v2) {
+        float[] rv = new float[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = min(v1[i], v2);
+        return rv;
+    }
+
+    // fmax reference functions
+    private float fmax(float v1, float v2) {
+        return max(v1, v2);
+    }
+    private float[] fmax(float[] v1, float[] v2) {
+        return max(v1, v2);
+    }
+    private float[] fmax(float[] v1, float v2) {
+        float[] rv = new float[v1.length];
+        for (int i = 0; i < v1.length; ++i)
+            rv[i] = max(v1[i], v2);
+        return rv;
+    }
+
+    private void initializeValues(ScriptC_math_agree s) {
+        float x = rand.nextFloat();
+        float y = rand.nextFloat();
+
+        s.set_x(x);
+        s.set_y(y);
+        s.set_result_add(x + y);
+        s.set_result_sub(x - y);
+        s.set_result_mul(x * y);
+        s.set_result_div(x / y);
+
+        // Generate random vectors of all types
+        float rand_f1_0 = rand.nextFloat();
+        float[] rand_f2_0 = randvec_float(2);
+        float[] rand_f3_0 = randvec_float(3);
+        float[] rand_f4_0 = randvec_float(4);
+        float rand_f1_1 = rand.nextFloat();
+        float[] rand_f2_1 = randvec_float(2);
+        float[] rand_f3_1 = randvec_float(3);
+        float[] rand_f4_1 = randvec_float(4);
+        short rand_uc1_0 = (short)rand.nextInt(0x1 << 8);
+        short[] rand_uc2_0 = randvec_uchar(2);
+        short[] rand_uc3_0 = randvec_uchar(3);
+        short[] rand_uc4_0 = randvec_uchar(4);
+        short rand_uc1_1 = (short)rand.nextInt(0x1 << 8);
+        short[] rand_uc2_1 = randvec_uchar(2);
+        short[] rand_uc3_1 = randvec_uchar(3);
+        short[] rand_uc4_1 = randvec_uchar(4);
+        short rand_ss1_0 = (short)rand.nextInt(0x1 << 16);
+        short[] rand_ss2_0 = randvec_short(2);
+        short[] rand_ss3_0 = randvec_short(3);
+        short[] rand_ss4_0 = randvec_short(4);
+        short rand_ss1_1 = (short)rand.nextInt(0x1 << 16);
+        short[] rand_ss2_1 = randvec_short(2);
+        short[] rand_ss3_1 = randvec_short(3);
+        short[] rand_ss4_1 = randvec_short(4);
+        int rand_us1_0 = rand.nextInt(0x1 << 16);
+        int[] rand_us2_0 = randvec_ushort(2);
+        int[] rand_us3_0 = randvec_ushort(3);
+        int[] rand_us4_0 = randvec_ushort(4);
+        int rand_us1_1 = rand.nextInt(0x1 << 16);
+        int[] rand_us2_1 = randvec_ushort(2);
+        int[] rand_us3_1 = randvec_ushort(3);
+        int[] rand_us4_1 = randvec_ushort(4);
+        int rand_si1_0 = rand.nextInt();
+        int[] rand_si2_0 = randvec_int(2);
+        int[] rand_si3_0 = randvec_int(3);
+        int[] rand_si4_0 = randvec_int(4);
+        int rand_si1_1 = rand.nextInt();
+        int[] rand_si2_1 = randvec_int(2);
+        int[] rand_si3_1 = randvec_int(3);
+        int[] rand_si4_1 = randvec_int(4);
+        long rand_ui1_0 = (long)rand.nextInt() - (long)Integer.MIN_VALUE;
+        long[] rand_ui2_0 = randvec_uint(2);
+        long[] rand_ui3_0 = randvec_uint(3);
+        long[] rand_ui4_0 = randvec_uint(4);
+        long rand_ui1_1 = (long)rand.nextInt() - (long)Integer.MIN_VALUE;
+        long[] rand_ui2_1 = randvec_uint(2);
+        long[] rand_ui3_1 = randvec_uint(3);
+        long[] rand_ui4_1 = randvec_uint(4);
+        long rand_sl1_0 = rand.nextLong();
+        long[] rand_sl2_0 = randvec_long(2);
+        long[] rand_sl3_0 = randvec_long(3);
+        long[] rand_sl4_0 = randvec_long(4);
+        long rand_sl1_1 = rand.nextLong();
+        long[] rand_sl2_1 = randvec_long(2);
+        long[] rand_sl3_1 = randvec_long(3);
+        long[] rand_sl4_1 = randvec_long(4);
+        byte rand_sc1_0 = (byte)rand.nextInt(0x1 << 8);
+        byte[] rand_sc2_0 = randvec_char(2);
+        byte[] rand_sc3_0 = randvec_char(3);
+        byte[] rand_sc4_0 = randvec_char(4);
+        byte rand_sc1_1 = (byte)rand.nextInt(0x1 << 8);
+        byte[] rand_sc2_1 = randvec_char(2);
+        byte[] rand_sc3_1 = randvec_char(3);
+        byte[] rand_sc4_1 = randvec_char(4);
+        // TODO:  generate unsigned long vectors
+
+        // Set random vectors in renderscript code
+        s.set_rand_f1_0(rand_f1_0);
+        s.set_rand_f2_0(pack_f2(rand_f2_0));
+        s.set_rand_f3_0(pack_f3(rand_f3_0));
+        s.set_rand_f4_0(pack_f4(rand_f4_0));
+        s.set_rand_f1_1(rand_f1_1);
+        s.set_rand_f2_1(pack_f2(rand_f2_1));
+        s.set_rand_f3_1(pack_f3(rand_f3_1));
+        s.set_rand_f4_1(pack_f4(rand_f4_1));
+        s.set_rand_uc1_1(rand_uc1_1);
+        s.set_rand_uc2_1(pack_s2(rand_uc2_1));
+        s.set_rand_uc3_1(pack_s3(rand_uc3_1));
+        s.set_rand_uc4_1(pack_s4(rand_uc4_1));
+        s.set_rand_ss1_0(rand_ss1_0);
+        s.set_rand_ss2_0(pack_s2(rand_ss2_0));
+        s.set_rand_ss3_0(pack_s3(rand_ss3_0));
+        s.set_rand_ss4_0(pack_s4(rand_ss4_0));
+        s.set_rand_ss1_1(rand_ss1_1);
+        s.set_rand_ss2_1(pack_s2(rand_ss2_1));
+        s.set_rand_ss3_1(pack_s3(rand_ss3_1));
+        s.set_rand_ss4_1(pack_s4(rand_ss4_1));
+        s.set_rand_us1_0(rand_us1_0);
+        s.set_rand_us2_0(pack_i2(rand_us2_0));
+        s.set_rand_us3_0(pack_i3(rand_us3_0));
+        s.set_rand_us4_0(pack_i4(rand_us4_0));
+        s.set_rand_us1_1(rand_us1_1);
+        s.set_rand_us2_1(pack_i2(rand_us2_1));
+        s.set_rand_us3_1(pack_i3(rand_us3_1));
+        s.set_rand_us4_1(pack_i4(rand_us4_1));
+        s.set_rand_si1_0(rand_si1_0);
+        s.set_rand_si2_0(pack_i2(rand_si2_0));
+        s.set_rand_si3_0(pack_i3(rand_si3_0));
+        s.set_rand_si4_0(pack_i4(rand_si4_0));
+        s.set_rand_si1_1(rand_si1_1);
+        s.set_rand_si2_1(pack_i2(rand_si2_1));
+        s.set_rand_si3_1(pack_i3(rand_si3_1));
+        s.set_rand_si4_1(pack_i4(rand_si4_1));
+        s.set_rand_ui1_0(rand_ui1_0);
+        s.set_rand_ui2_0(pack_l2(rand_ui2_0));
+        s.set_rand_ui3_0(pack_l3(rand_ui3_0));
+        s.set_rand_ui4_0(pack_l4(rand_ui4_0));
+        s.set_rand_ui1_1(rand_ui1_1);
+        s.set_rand_ui2_1(pack_l2(rand_ui2_1));
+        s.set_rand_ui3_1(pack_l3(rand_ui3_1));
+        s.set_rand_ui4_1(pack_l4(rand_ui4_1));
+        s.set_rand_sl1_0(rand_sl1_0);
+        s.set_rand_sl2_0(pack_l2(rand_sl2_0));
+        s.set_rand_sl3_0(pack_l3(rand_sl3_0));
+        s.set_rand_sl4_0(pack_l4(rand_sl4_0));
+        s.set_rand_sl1_1(rand_sl1_1);
+        s.set_rand_sl2_1(pack_l2(rand_sl2_1));
+        s.set_rand_sl3_1(pack_l3(rand_sl3_1));
+        s.set_rand_sl4_1(pack_l4(rand_sl4_1));
+        s.set_rand_uc1_0(rand_uc1_0);
+        s.set_rand_uc2_0(pack_s2(rand_uc2_0));
+        s.set_rand_uc3_0(pack_s3(rand_uc3_0));
+        s.set_rand_uc4_0(pack_s4(rand_uc4_0));
+        s.set_rand_sc1_0(rand_sc1_0);
+        s.set_rand_sc2_0(pack_b2(rand_sc2_0));
+        s.set_rand_sc3_0(pack_b3(rand_sc3_0));
+        s.set_rand_sc4_0(pack_b4(rand_sc4_0));
+        s.set_rand_sc1_1(rand_sc1_1);
+        s.set_rand_sc2_1(pack_b2(rand_sc2_1));
+        s.set_rand_sc3_1(pack_b3(rand_sc3_1));
+        s.set_rand_sc4_1(pack_b4(rand_sc4_1));
+        // TODO:  set unsigned long vectors
+
+        // Set results for min
+        s.set_min_rand_f1_f1(min(rand_f1_0, rand_f1_1));
+        s.set_min_rand_f2_f2(pack_f2(min(rand_f2_0, rand_f2_1)));
+        s.set_min_rand_f3_f3(pack_f3(min(rand_f3_0, rand_f3_1)));
+        s.set_min_rand_f4_f4(pack_f4(min(rand_f4_0, rand_f4_1)));
+        s.set_min_rand_uc1_uc1(min(rand_uc1_0, rand_uc1_1));
+        s.set_min_rand_uc2_uc2(pack_s2(min(rand_uc2_0, rand_uc2_1)));
+        s.set_min_rand_uc3_uc3(pack_s3(min(rand_uc3_0, rand_uc3_1)));
+        s.set_min_rand_uc4_uc4(pack_s4(min(rand_uc4_0, rand_uc4_1)));
+        s.set_min_rand_ss1_ss1(min(rand_ss1_0, rand_ss1_1));
+        s.set_min_rand_ss2_ss2(pack_s2(min(rand_ss2_0, rand_ss2_1)));
+        s.set_min_rand_ss3_ss3(pack_s3(min(rand_ss3_0, rand_ss3_1)));
+        s.set_min_rand_ss4_ss4(pack_s4(min(rand_ss4_0, rand_ss4_1)));
+        s.set_min_rand_us1_us1(min(rand_us1_0, rand_us1_1));
+        s.set_min_rand_us2_us2(pack_i2(min(rand_us2_0, rand_us2_1)));
+        s.set_min_rand_us3_us3(pack_i3(min(rand_us3_0, rand_us3_1)));
+        s.set_min_rand_us4_us4(pack_i4(min(rand_us4_0, rand_us4_1)));
+        s.set_min_rand_si1_si1(min(rand_si1_0, rand_si1_1));
+        s.set_min_rand_si2_si2(pack_i2(min(rand_si2_0, rand_si2_1)));
+        s.set_min_rand_si3_si3(pack_i3(min(rand_si3_0, rand_si3_1)));
+        s.set_min_rand_si4_si4(pack_i4(min(rand_si4_0, rand_si4_1)));
+        s.set_min_rand_ui1_ui1(min(rand_ui1_0, rand_ui1_1));
+        s.set_min_rand_ui2_ui2(pack_l2(min(rand_ui2_0, rand_ui2_1)));
+        s.set_min_rand_ui3_ui3(pack_l3(min(rand_ui3_0, rand_ui3_1)));
+        s.set_min_rand_ui4_ui4(pack_l4(min(rand_ui4_0, rand_ui4_1)));
+        s.set_min_rand_sl1_sl1(min(rand_sl1_0, rand_sl1_1));
+        s.set_min_rand_sl2_sl2(pack_l2(min(rand_sl2_0, rand_sl2_1)));
+        s.set_min_rand_sl3_sl3(pack_l3(min(rand_sl3_0, rand_sl3_1)));
+        s.set_min_rand_sl4_sl4(pack_l4(min(rand_sl4_0, rand_sl4_1)));
+        s.set_min_rand_sc1_sc1(min(rand_sc1_0, rand_sc1_1));
+        s.set_min_rand_sc2_sc2(pack_b2(min(rand_sc2_0, rand_sc2_1)));
+        s.set_min_rand_sc3_sc3(pack_b3(min(rand_sc3_0, rand_sc3_1)));
+        s.set_min_rand_sc4_sc4(pack_b4(min(rand_sc4_0, rand_sc4_1)));
+        // TODO:  set results for unsigned long min
+
+        // Set results for max
+        s.set_max_rand_f1_f1(max(rand_f1_0, rand_f1_1));
+        s.set_max_rand_f2_f2(pack_f2(max(rand_f2_0, rand_f2_1)));
+        s.set_max_rand_f3_f3(pack_f3(max(rand_f3_0, rand_f3_1)));
+        s.set_max_rand_f4_f4(pack_f4(max(rand_f4_0, rand_f4_1)));
+        s.set_max_rand_uc1_uc1(max(rand_uc1_0, rand_uc1_1));
+        s.set_max_rand_uc2_uc2(pack_s2(max(rand_uc2_0, rand_uc2_1)));
+        s.set_max_rand_uc3_uc3(pack_s3(max(rand_uc3_0, rand_uc3_1)));
+        s.set_max_rand_uc4_uc4(pack_s4(max(rand_uc4_0, rand_uc4_1)));
+        s.set_max_rand_ss1_ss1(max(rand_ss1_0, rand_ss1_1));
+        s.set_max_rand_ss2_ss2(pack_s2(max(rand_ss2_0, rand_ss2_1)));
+        s.set_max_rand_ss3_ss3(pack_s3(max(rand_ss3_0, rand_ss3_1)));
+        s.set_max_rand_ss4_ss4(pack_s4(max(rand_ss4_0, rand_ss4_1)));
+        s.set_max_rand_us1_us1(max(rand_us1_0, rand_us1_1));
+        s.set_max_rand_us2_us2(pack_i2(max(rand_us2_0, rand_us2_1)));
+        s.set_max_rand_us3_us3(pack_i3(max(rand_us3_0, rand_us3_1)));
+        s.set_max_rand_us4_us4(pack_i4(max(rand_us4_0, rand_us4_1)));
+        s.set_max_rand_si1_si1(max(rand_si1_0, rand_si1_1));
+        s.set_max_rand_si2_si2(pack_i2(max(rand_si2_0, rand_si2_1)));
+        s.set_max_rand_si3_si3(pack_i3(max(rand_si3_0, rand_si3_1)));
+        s.set_max_rand_si4_si4(pack_i4(max(rand_si4_0, rand_si4_1)));
+        s.set_max_rand_ui1_ui1(max(rand_ui1_0, rand_ui1_1));
+        s.set_max_rand_ui2_ui2(pack_l2(max(rand_ui2_0, rand_ui2_1)));
+        s.set_max_rand_ui3_ui3(pack_l3(max(rand_ui3_0, rand_ui3_1)));
+        s.set_max_rand_ui4_ui4(pack_l4(max(rand_ui4_0, rand_ui4_1)));
+        s.set_max_rand_sl1_sl1(max(rand_sl1_0, rand_sl1_1));
+        s.set_max_rand_sl2_sl2(pack_l2(max(rand_sl2_0, rand_sl2_1)));
+        s.set_max_rand_sl3_sl3(pack_l3(max(rand_sl3_0, rand_sl3_1)));
+        s.set_max_rand_sl4_sl4(pack_l4(max(rand_sl4_0, rand_sl4_1)));
+        s.set_max_rand_sc1_sc1(max(rand_sc1_0, rand_sc1_1));
+        s.set_max_rand_sc2_sc2(pack_b2(max(rand_sc2_0, rand_sc2_1)));
+        s.set_max_rand_sc3_sc3(pack_b3(max(rand_sc3_0, rand_sc3_1)));
+        s.set_max_rand_sc4_sc4(pack_b4(max(rand_sc4_0, rand_sc4_1)));
+
+        // TODO:  set results for unsigned long max
+
+        // Set results for fmin
+        s.set_fmin_rand_f1_f1(fmin(rand_f1_0, rand_f1_1));
+        s.set_fmin_rand_f2_f2(pack_f2(fmin(rand_f2_0, rand_f2_1)));
+        s.set_fmin_rand_f3_f3(pack_f3(fmin(rand_f3_0, rand_f3_1)));
+        s.set_fmin_rand_f4_f4(pack_f4(fmin(rand_f4_0, rand_f4_1)));
+        s.set_fmin_rand_f2_f1(pack_f2(fmin(rand_f2_0, rand_f1_1)));
+        s.set_fmin_rand_f3_f1(pack_f3(fmin(rand_f3_0, rand_f1_1)));
+        s.set_fmin_rand_f4_f1(pack_f4(fmin(rand_f4_0, rand_f1_1)));
+
+        // Set results for fmax
+        s.set_fmax_rand_f1_f1(fmax(rand_f1_0, rand_f1_1));
+        s.set_fmax_rand_f2_f2(pack_f2(fmax(rand_f2_0, rand_f2_1)));
+        s.set_fmax_rand_f3_f3(pack_f3(fmax(rand_f3_0, rand_f3_1)));
+        s.set_fmax_rand_f4_f4(pack_f4(fmax(rand_f4_0, rand_f4_1)));
+        s.set_fmax_rand_f2_f1(pack_f2(fmax(rand_f2_0, rand_f1_1)));
+        s.set_fmax_rand_f3_f1(pack_f3(fmax(rand_f3_0, rand_f1_1)));
+        s.set_fmax_rand_f4_f1(pack_f4(fmax(rand_f4_0, rand_f1_1)));
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_math_agree s = new ScriptC_math_agree(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeValues(s);
+        s.invoke_math_agree_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math_conformance.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math_conformance.java
new file mode 100644
index 0000000..384cd13
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_math_conformance.java
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_math_conformance extends UnitTest {
+    private Resources mRes;
+
+    protected UT_math_conformance(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Math Conformance", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_math_conformance s =
+                new ScriptC_math_conformance(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_math_conformance_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+        passTest();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_min.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_min.java
new file mode 100644
index 0000000..cea9fe5
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_min.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_min extends UnitTest {
+    private Resources mRes;
+
+    protected UT_min(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Min (relaxed)", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_min s = new ScriptC_min(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_min_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_noroot.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_noroot.java
new file mode 100644
index 0000000..69fc97f
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_noroot.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011-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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_noroot extends UnitTest {
+    private Resources mRes;
+    private Allocation A;
+
+    protected UT_noroot(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "ForEach (no root)", ctx);
+        mRes = res;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_noroot s) {
+        Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
+        int X = 5;
+        int Y = 7;
+        s.set_dimX(X);
+        s.set_dimY(Y);
+        typeBuilder.setX(X).setY(Y);
+        A = Allocation.createTyped(RS, typeBuilder.create());
+        s.bind_a(A);
+
+        return;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_noroot s = new ScriptC_noroot(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeGlobals(pRS, s);
+        s.forEach_foo(A, A);
+        s.invoke_verify_foo();
+        s.invoke_noroot_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_primitives.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_primitives.java
new file mode 100644
index 0000000..3c663a8
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_primitives.java
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_primitives extends UnitTest {
+    private Resources mRes;
+
+    protected UT_primitives(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Primitives", ctx);
+        mRes = res;
+    }
+
+    private boolean initializeGlobals(ScriptC_primitives s) {
+        float pF = s.get_floatTest();
+        if (pF != 1.99f) {
+            return false;
+        }
+        s.set_floatTest(2.99f);
+
+        double pD = s.get_doubleTest();
+        if (pD != 2.05) {
+            return false;
+        }
+        s.set_doubleTest(3.05);
+
+        byte pC = s.get_charTest();
+        if (pC != -8) {
+            return false;
+        }
+        s.set_charTest((byte)-16);
+
+        short pS = s.get_shortTest();
+        if (pS != -16) {
+            return false;
+        }
+        s.set_shortTest((short)-32);
+
+        int pI = s.get_intTest();
+        if (pI != -32) {
+            return false;
+        }
+        s.set_intTest(-64);
+
+        long pL = s.get_longTest();
+        if (pL != 17179869184l) {
+            return false;
+        }
+        s.set_longTest(17179869185l);
+
+        long puL = s.get_ulongTest();
+        if (puL != 4611686018427387904L) {
+            return false;
+        }
+        s.set_ulongTest(4611686018427387903L);
+
+
+        long pLL = s.get_longlongTest();
+        if (pLL != 68719476736L) {
+            return false;
+        }
+        s.set_longlongTest(68719476735L);
+
+        long pu64 = s.get_uint64_tTest();
+        if (pu64 != 117179869184l) {
+            return false;
+        }
+        s.set_uint64_tTest(117179869185l);
+
+        return true;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_primitives s = new ScriptC_primitives(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        if (!initializeGlobals(s)) {
+            failTest();
+        } else {
+            s.invoke_primitives_test(0, 0);
+            pRS.finish();
+            waitForMessage();
+        }
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_refcount.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_refcount.java
new file mode 100644
index 0000000..e6317d5
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_refcount.java
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_refcount extends UnitTest {
+    private Resources mRes;
+
+    protected UT_refcount(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Refcount", ctx);
+        mRes = res;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_refcount s) {
+        Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
+        int X = 500;
+        int Y = 700;
+        typeBuilder.setX(X).setY(Y);
+        Allocation A = Allocation.createTyped(RS, typeBuilder.create());
+        s.set_globalA(A);
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        pRS.setMessageHandler(mRsMessage);
+        ScriptC_refcount s = new ScriptC_refcount(pRS);
+        initializeGlobals(pRS, s);
+        s.invoke_refcount_test();
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rsdebug.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rsdebug.java
new file mode 100644
index 0000000..740180e
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rsdebug.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_rsdebug extends UnitTest {
+    private Resources mRes;
+
+    protected UT_rsdebug(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "rsDebug", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_rsdebug s = new ScriptC_rsdebug(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_test_rsdebug(0, 0);
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rstime.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rstime.java
new file mode 100644
index 0000000..86e35a8
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rstime.java
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_rstime extends UnitTest {
+    private Resources mRes;
+
+    protected UT_rstime(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "rsTime", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_rstime s = new ScriptC_rstime(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.setTimeZone("America/Los_Angeles");
+        s.invoke_test_rstime(0, 0);
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rstypes.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rstypes.java
new file mode 100644
index 0000000..3245eca
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_rstypes.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_rstypes extends UnitTest {
+    private Resources mRes;
+
+    protected UT_rstypes(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "rsTypes", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_rstypes s = new ScriptC_rstypes(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        s.invoke_test_rstypes(0, 0);
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_sampler.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_sampler.java
new file mode 100644
index 0000000..d8d5a78
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_sampler.java
@@ -0,0 +1,148 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_sampler extends UnitTest {
+    private Resources mRes;
+
+    Sampler minification;
+    Sampler magnification;
+    Sampler wrapS;
+    Sampler wrapT;
+    Sampler anisotropy;
+
+    protected UT_sampler(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Sampler", ctx);
+        mRes = res;
+    }
+
+    private Sampler.Builder getDefaultBuilder(RenderScript RS) {
+        Sampler.Builder b = new Sampler.Builder(RS);
+        b.setMinification(Sampler.Value.NEAREST);
+        b.setMagnification(Sampler.Value.NEAREST);
+        b.setWrapS(Sampler.Value.CLAMP);
+        b.setWrapT(Sampler.Value.CLAMP);
+        b.setAnisotropy(1.0f);
+        return b;
+    }
+
+    private void initializeGlobals(RenderScript RS, ScriptC_sampler s) {
+        Sampler.Builder b = getDefaultBuilder(RS);
+        b.setMinification(Sampler.Value.LINEAR_MIP_LINEAR);
+        minification = b.create();
+
+        b = getDefaultBuilder(RS);
+        b.setMagnification(Sampler.Value.LINEAR);
+        magnification = b.create();
+
+        b = getDefaultBuilder(RS);
+        b.setWrapS(Sampler.Value.WRAP);
+        wrapS = b.create();
+
+        b = getDefaultBuilder(RS);
+        b.setWrapT(Sampler.Value.WRAP);
+        wrapT = b.create();
+
+        b = getDefaultBuilder(RS);
+        b.setAnisotropy(8.0f);
+        anisotropy = b.create();
+
+        s.set_minification(minification);
+        s.set_magnification(magnification);
+        s.set_wrapS(wrapS);
+        s.set_wrapT(wrapT);
+        s.set_anisotropy(anisotropy);
+    }
+
+    private void testScriptSide(RenderScript pRS) {
+        ScriptC_sampler s = new ScriptC_sampler(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        initializeGlobals(pRS, s);
+        s.invoke_sampler_test();
+        pRS.finish();
+        waitForMessage();
+    }
+
+    private void testJavaSide(RenderScript RS) {
+        _RS_ASSERT("minification.getMagnification() == Sampler.Value.NEAREST",
+                    minification.getMagnification() == Sampler.Value.NEAREST);
+        _RS_ASSERT("minification.getMinification() == Sampler.Value.LINEAR_MIP_LINEAR",
+                    minification.getMinification() == Sampler.Value.LINEAR_MIP_LINEAR);
+        _RS_ASSERT("minification.getWrapS() == Sampler.Value.CLAMP",
+                    minification.getWrapS() == Sampler.Value.CLAMP);
+        _RS_ASSERT("minification.getWrapT() == Sampler.Value.CLAMP",
+                    minification.getWrapT() == Sampler.Value.CLAMP);
+        _RS_ASSERT("minification.getAnisotropy() == 1.0f",
+                    minification.getAnisotropy() == 1.0f);
+
+        _RS_ASSERT("magnification.getMagnification() == Sampler.Value.LINEAR",
+                    magnification.getMagnification() == Sampler.Value.LINEAR);
+        _RS_ASSERT("magnification.getMinification() == Sampler.Value.NEAREST",
+                    magnification.getMinification() == Sampler.Value.NEAREST);
+        _RS_ASSERT("magnification.getWrapS() == Sampler.Value.CLAMP",
+                    magnification.getWrapS() == Sampler.Value.CLAMP);
+        _RS_ASSERT("magnification.getWrapT() == Sampler.Value.CLAMP",
+                    magnification.getWrapT() == Sampler.Value.CLAMP);
+        _RS_ASSERT("magnification.getAnisotropy() == 1.0f",
+                    magnification.getAnisotropy() == 1.0f);
+
+        _RS_ASSERT("wrapS.getMagnification() == Sampler.Value.NEAREST",
+                    wrapS.getMagnification() == Sampler.Value.NEAREST);
+        _RS_ASSERT("wrapS.getMinification() == Sampler.Value.NEAREST",
+                    wrapS.getMinification() == Sampler.Value.NEAREST);
+        _RS_ASSERT("wrapS.getWrapS() == Sampler.Value.WRAP",
+                    wrapS.getWrapS() == Sampler.Value.WRAP);
+        _RS_ASSERT("wrapS.getWrapT() == Sampler.Value.CLAMP",
+                    wrapS.getWrapT() == Sampler.Value.CLAMP);
+        _RS_ASSERT("wrapS.getAnisotropy() == 1.0f",
+                    wrapS.getAnisotropy() == 1.0f);
+
+        _RS_ASSERT("wrapT.getMagnification() == Sampler.Value.NEAREST",
+                    wrapT.getMagnification() == Sampler.Value.NEAREST);
+        _RS_ASSERT("wrapT.getMinification() == Sampler.Value.NEAREST",
+                    wrapT.getMinification() == Sampler.Value.NEAREST);
+        _RS_ASSERT("wrapT.getWrapS() == Sampler.Value.CLAMP",
+                    wrapT.getWrapS() == Sampler.Value.CLAMP);
+        _RS_ASSERT("wrapT.getWrapT() == Sampler.Value.WRAP",
+                    wrapT.getWrapT() == Sampler.Value.WRAP);
+        _RS_ASSERT("wrapT.getAnisotropy() == 1.0f",
+                    wrapT.getAnisotropy() == 1.0f);
+
+        _RS_ASSERT("anisotropy.getMagnification() == Sampler.Value.NEAREST",
+                    anisotropy.getMagnification() == Sampler.Value.NEAREST);
+        _RS_ASSERT("anisotropy.getMinification() == Sampler.Value.NEAREST",
+                    anisotropy.getMinification() == Sampler.Value.NEAREST);
+        _RS_ASSERT("anisotropy.getWrapS() == Sampler.Value.CLAMP",
+                    anisotropy.getWrapS() == Sampler.Value.CLAMP);
+        _RS_ASSERT("anisotropy.getWrapT() == Sampler.Value.CLAMP",
+                    anisotropy.getWrapT() == Sampler.Value.CLAMP);
+        _RS_ASSERT("anisotropy.getAnisotropy() == 1.0f",
+                    anisotropy.getAnisotropy() == 8.0f);
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        testScriptSide(pRS);
+        testJavaSide(pRS);
+        passTest();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_struct.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_struct.java
new file mode 100644
index 0000000..43bbaf7
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_struct.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_struct extends UnitTest {
+    private Resources mRes;
+
+    protected UT_struct(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Struct", ctx);
+        mRes = res;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_struct s = new ScriptC_struct(pRS);
+        pRS.setMessageHandler(mRsMessage);
+
+        ScriptField_Point2 p = new ScriptField_Point2(pRS, 1);
+        ScriptField_Point2.Item i = new ScriptField_Point2.Item();
+        int val = 100;
+        i.x = val;
+        i.y = val;
+        p.set(i, 0, true);
+        s.bind_point2(p);
+        s.invoke_struct_test(val);
+        pRS.finish();
+        waitForMessage();
+
+        val = 200;
+        p.set_x(0, val, true);
+        p.set_y(0, val, true);
+        s.invoke_struct_test(val);
+        pRS.finish();
+        waitForMessage();
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_unsigned.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_unsigned.java
new file mode 100644
index 0000000..0e16240
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_unsigned.java
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_unsigned extends UnitTest {
+    private Resources mRes;
+
+    protected UT_unsigned(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Unsigned", ctx);
+        mRes = res;
+    }
+
+    private boolean initializeGlobals(ScriptC_unsigned s) {
+        short pUC = s.get_uc();
+        if (pUC != 5) {
+            return false;
+        }
+        s.set_uc((short)129);
+
+        long pUI = s.get_ui();
+        if (pUI != 37) {
+            return false;
+        }
+        s.set_ui(0x7fffffff);
+
+        return true;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_unsigned s = new ScriptC_unsigned(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        if (!initializeGlobals(s)) {
+            failTest();
+        } else {
+            s.invoke_unsigned_test();
+            pRS.finish();
+            waitForMessage();
+        }
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_vector.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_vector.java
new file mode 100644
index 0000000..6ba822e
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UT_vector.java
@@ -0,0 +1,318 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v8.renderscript.*;
+
+public class UT_vector extends UnitTest {
+    private Resources mRes;
+
+    protected UT_vector(RSTestCore rstc, Resources res, Context ctx) {
+        super(rstc, "Vector", ctx);
+        mRes = res;
+    }
+
+    private boolean initializeGlobals(ScriptC_vector s) {
+        Float2 F2 = s.get_f2();
+        if (F2.x != 1.0f || F2.y != 2.0f) {
+            return false;
+        }
+        F2.x = 2.99f;
+        F2.y = 3.99f;
+        s.set_f2(F2);
+
+        Float3 F3 = s.get_f3();
+        if (F3.x != 1.0f || F3.y != 2.0f || F3.z != 3.0f) {
+            return false;
+        }
+        F3.x = 2.99f;
+        F3.y = 3.99f;
+        F3.z = 4.99f;
+        s.set_f3(F3);
+
+        Float4 F4 = s.get_f4();
+        if (F4.x != 1.0f || F4.y != 2.0f || F4.z != 3.0f || F4.w != 4.0f) {
+            return false;
+        }
+        F4.x = 2.99f;
+        F4.y = 3.99f;
+        F4.z = 4.99f;
+        F4.w = 5.99f;
+        s.set_f4(F4);
+
+        Double2 D2 = s.get_d2();
+        if (D2.x != 1.0 || D2.y != 2.0) {
+            return false;
+        }
+        D2.x = 2.99;
+        D2.y = 3.99;
+        s.set_d2(D2);
+
+        Double3 D3 = s.get_d3();
+        if (D3.x != 1.0 || D3.y != 2.0 || D3.z != 3.0) {
+            return false;
+        }
+        D3.x = 2.99;
+        D3.y = 3.99;
+        D3.z = 4.99;
+        s.set_d3(D3);
+
+        Double4 D4 = s.get_d4();
+        if (D4.x != 1.0 || D4.y != 2.0 || D4.z != 3.0 || D4.w != 4.0) {
+            return false;
+        }
+        D4.x = 2.99;
+        D4.y = 3.99;
+        D4.z = 4.99;
+        D4.w = 5.99;
+        s.set_d4(D4);
+
+        Byte2 B2 = s.get_i8_2();
+        if (B2.x != 1 || B2.y != 2) {
+            return false;
+        }
+        B2.x = 2;
+        B2.y = 3;
+        s.set_i8_2(B2);
+
+        Byte3 B3 = s.get_i8_3();
+        if (B3.x != 1 || B3.y != 2 || B3.z != 3) {
+            return false;
+        }
+        B3.x = 2;
+        B3.y = 3;
+        B3.z = 4;
+        s.set_i8_3(B3);
+
+        Byte4 B4 = s.get_i8_4();
+        if (B4.x != 1 || B4.y != 2 || B4.z != 3 || B4.w != 4) {
+            return false;
+        }
+        B4.x = 2;
+        B4.y = 3;
+        B4.z = 4;
+        B4.w = 5;
+        s.set_i8_4(B4);
+
+        Short2 S2 = s.get_u8_2();
+        if (S2.x != 1 || S2.y != 2) {
+            return false;
+        }
+        S2.x = 2;
+        S2.y = 3;
+        s.set_u8_2(S2);
+
+        Short3 S3 = s.get_u8_3();
+        if (S3.x != 1 || S3.y != 2 || S3.z != 3) {
+            return false;
+        }
+        S3.x = 2;
+        S3.y = 3;
+        S3.z = 4;
+        s.set_u8_3(S3);
+
+        Short4 S4 = s.get_u8_4();
+        if (S4.x != 1 || S4.y != 2 || S4.z != 3 || S4.w != 4) {
+            return false;
+        }
+        S4.x = 2;
+        S4.y = 3;
+        S4.z = 4;
+        S4.w = 5;
+        s.set_u8_4(S4);
+
+        S2 = s.get_i16_2();
+        if (S2.x != 1 || S2.y != 2) {
+            return false;
+        }
+        S2.x = 2;
+        S2.y = 3;
+        s.set_i16_2(S2);
+
+        S3 = s.get_i16_3();
+        if (S3.x != 1 || S3.y != 2 || S3.z != 3) {
+            return false;
+        }
+        S3.x = 2;
+        S3.y = 3;
+        S3.z = 4;
+        s.set_i16_3(S3);
+
+        S4 = s.get_i16_4();
+        if (S4.x != 1 || S4.y != 2 || S4.z != 3 || S4.w != 4) {
+            return false;
+        }
+        S4.x = 2;
+        S4.y = 3;
+        S4.z = 4;
+        S4.w = 5;
+        s.set_i16_4(S4);
+
+        Int2 I2 = s.get_u16_2();
+        if (I2.x != 1 || I2.y != 2) {
+            return false;
+        }
+        I2.x = 2;
+        I2.y = 3;
+        s.set_u16_2(I2);
+
+        Int3 I3 = s.get_u16_3();
+        if (I3.x != 1 || I3.y != 2 || I3.z != 3) {
+            return false;
+        }
+        I3.x = 2;
+        I3.y = 3;
+        I3.z = 4;
+        s.set_u16_3(I3);
+
+        Int4 I4 = s.get_u16_4();
+        if (I4.x != 1 || I4.y != 2 || I4.z != 3 || I4.w != 4) {
+            return false;
+        }
+        I4.x = 2;
+        I4.y = 3;
+        I4.z = 4;
+        I4.w = 5;
+        s.set_u16_4(I4);
+
+        I2 = s.get_i32_2();
+        if (I2.x != 1 || I2.y != 2) {
+            return false;
+        }
+        I2.x = 2;
+        I2.y = 3;
+        s.set_i32_2(I2);
+
+        I3 = s.get_i32_3();
+        if (I3.x != 1 || I3.y != 2 || I3.z != 3) {
+            return false;
+        }
+        I3.x = 2;
+        I3.y = 3;
+        I3.z = 4;
+        s.set_i32_3(I3);
+
+        I4 = s.get_i32_4();
+        if (I4.x != 1 || I4.y != 2 || I4.z != 3 || I4.w != 4) {
+            return false;
+        }
+        I4.x = 2;
+        I4.y = 3;
+        I4.z = 4;
+        I4.w = 5;
+        s.set_i32_4(I4);
+
+        Long2 L2 = s.get_u32_2();
+        if (L2.x != 1 || L2.y != 2) {
+            return false;
+        }
+        L2.x = 2;
+        L2.y = 3;
+        s.set_u32_2(L2);
+
+        Long3 L3 = s.get_u32_3();
+        if (L3.x != 1 || L3.y != 2 || L3.z != 3) {
+            return false;
+        }
+        L3.x = 2;
+        L3.y = 3;
+        L3.z = 4;
+        s.set_u32_3(L3);
+
+        Long4 L4 = s.get_u32_4();
+        if (L4.x != 1 || L4.y != 2 || L4.z != 3 || L4.w != 4) {
+            return false;
+        }
+        L4.x = 2;
+        L4.y = 3;
+        L4.z = 4;
+        L4.w = 5;
+        s.set_u32_4(L4);
+
+        L2 = s.get_i64_2();
+        if (L2.x != 1 || L2.y != 2) {
+            return false;
+        }
+        L2.x = 2;
+        L2.y = 3;
+        s.set_i64_2(L2);
+
+        L3 = s.get_i64_3();
+        if (L3.x != 1 || L3.y != 2 || L3.z != 3) {
+            return false;
+        }
+        L3.x = 2;
+        L3.y = 3;
+        L3.z = 4;
+        s.set_i64_3(L3);
+
+        L4 = s.get_i64_4();
+        if (L4.x != 1 || L4.y != 2 || L4.z != 3 || L4.w != 4) {
+            return false;
+        }
+        L4.x = 2;
+        L4.y = 3;
+        L4.z = 4;
+        L4.w = 5;
+        s.set_i64_4(L4);
+
+        L2 = s.get_u64_2();
+        if (L2.x != 1 || L2.y != 2) {
+            return false;
+        }
+        L2.x = 2;
+        L2.y = 3;
+        s.set_u64_2(L2);
+
+        L3 = s.get_u64_3();
+        if (L3.x != 1 || L3.y != 2 || L3.z != 3) {
+            return false;
+        }
+        L3.x = 2;
+        L3.y = 3;
+        L3.z = 4;
+        s.set_u64_3(L3);
+
+        L4 = s.get_u64_4();
+        if (L4.x != 1 || L4.y != 2 || L4.z != 3 || L4.w != 4) {
+            return false;
+        }
+        L4.x = 2;
+        L4.y = 3;
+        L4.z = 4;
+        L4.w = 5;
+        s.set_u64_4(L4);
+
+        return true;
+    }
+
+    public void run() {
+        RenderScript pRS = RenderScript.create(mCtx);
+        ScriptC_vector s = new ScriptC_vector(pRS);
+        pRS.setMessageHandler(mRsMessage);
+        if (!initializeGlobals(s)) {
+            failTest();
+        } else {
+            s.invoke_vector_test();
+            pRS.finish();
+            waitForMessage();
+        }
+        pRS.destroy();
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UnitTest.java b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UnitTest.java
new file mode 100644
index 0000000..01abf2f
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/UnitTest.java
@@ -0,0 +1,144 @@
+/*
+ * 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.
+ */
+
+package com.android.rs.test_compat;
+import android.content.Context;
+import android.util.Log;
+import android.support.v8.renderscript.RenderScript.RSMessageHandler;
+
+public class UnitTest extends Thread {
+    public String name;
+    private int result;
+    private ScriptField_ListAllocs_s.Item mItem;
+    private RSTestCore mRSTC;
+    private boolean msgHandled;
+    protected Context mCtx;
+
+    /* These constants must match those in shared.rsh */
+    public static final int RS_MSG_TEST_PASSED = 100;
+    public static final int RS_MSG_TEST_FAILED = 101;
+
+    private static int numTests = 0;
+    public int testID;
+
+    protected UnitTest(RSTestCore rstc, String n, int initResult, Context ctx) {
+        super();
+        mRSTC = rstc;
+        name = n;
+        msgHandled = false;
+        mCtx = ctx;
+        result = initResult;
+        testID = numTests++;
+    }
+
+    protected UnitTest(RSTestCore rstc, String n, Context ctx) {
+        this(rstc, n, 0, ctx);
+    }
+
+    protected UnitTest(RSTestCore rstc, Context ctx) {
+        this (rstc, "<Unknown>", ctx);
+    }
+
+    protected UnitTest(Context ctx) {
+        this (null, ctx);
+    }
+
+    protected void _RS_ASSERT(String message, boolean b) {
+        if(b == false) {
+            Log.e(name, message + " FAILED");
+            failTest();
+        }
+    }
+
+    private void updateUI() {
+        if (mItem != null) {
+            mItem.result = result;
+            msgHandled = true;
+            try {
+                mRSTC.refreshTestResults();
+            }
+            catch (IllegalStateException e) {
+                /* Ignore the case where our message receiver has been
+                   disconnected. This happens when we leave the application
+                   before it finishes running all of the unit tests. */
+            }
+        }
+    }
+
+    protected RSMessageHandler mRsMessage = new RSMessageHandler() {
+        public void run() {
+            if (result == 0) {
+                switch (mID) {
+                    case RS_MSG_TEST_PASSED:
+                        result = 1;
+                        break;
+                    case RS_MSG_TEST_FAILED:
+                        result = -1;
+                        break;
+                    default:
+                        RSTest.log("Unit test got unexpected message");
+                        return;
+                }
+            }
+
+            updateUI();
+        }
+    };
+
+    public void waitForMessage() {
+        while (!msgHandled) {
+            yield();
+        }
+    }
+
+    public int getResult() {
+        return result;
+    }
+
+    public void failTest() {
+        result = -1;
+        updateUI();
+    }
+
+    public void passTest() {
+        if (result != -1) {
+            result = 1;
+        }
+        updateUI();
+    }
+
+    public String toString() {
+        String out = name;
+        if (result == 1) {
+            out += " - PASSED";
+        }
+        else if (result == -1) {
+            out += " - FAILED";
+        }
+        return out;
+    }
+
+    public void setItem(ScriptField_ListAllocs_s.Item item) {
+        mItem = item;
+    }
+
+    public void run() {
+        /* This method needs to be implemented for each subclass */
+        if (mRSTC != null) {
+            mRSTC.refreshTestResults();
+        }
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/alloc.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/alloc.rs
new file mode 100644
index 0000000..3116e5a
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/alloc.rs
@@ -0,0 +1,94 @@
+#include "shared.rsh"
+
+int *a;
+int dimX;
+int dimY;
+int dimZ;
+
+rs_allocation aFaces;
+rs_allocation aLOD;
+rs_allocation aFacesLOD;
+
+static bool test_alloc_dims() {
+    bool failed = false;
+    int i, j;
+
+    for (j = 0; j < dimY; j++) {
+        for (i = 0; i < dimX; i++) {
+            a[i + j * dimX] = i + j * dimX;
+        }
+    }
+
+    rs_allocation alloc = rsGetAllocation(a);
+    _RS_ASSERT(rsAllocationGetDimX(alloc) == dimX);
+    _RS_ASSERT(rsAllocationGetDimY(alloc) == dimY);
+    _RS_ASSERT(rsAllocationGetDimZ(alloc) == dimZ);
+
+    // Test 2D addressing
+    for (j = 0; j < dimY; j++) {
+        for (i = 0; i < dimX; i++) {
+            rsDebug("Verifying ", i + j * dimX);
+            const void *p = rsGetElementAt(alloc, i, j);
+            int val = *(const int *)p;
+            _RS_ASSERT(val == (i + j * dimX));
+        }
+    }
+
+    // Test 1D addressing
+    for (i = 0; i < dimX * dimY; i++) {
+        rsDebug("Verifying ", i);
+        const void *p = rsGetElementAt(alloc, i);
+        int val = *(const int *)p;
+        _RS_ASSERT(val == i);
+    }
+
+    // Test 3D addressing
+    for (j = 0; j < dimY; j++) {
+        for (i = 0; i < dimX; i++) {
+            rsDebug("Verifying ", i + j * dimX);
+            const void *p = rsGetElementAt(alloc, i, j, 0);
+            int val = *(const int *)p;
+            _RS_ASSERT(val == (i + j * dimX));
+        }
+    }
+
+    _RS_ASSERT(rsAllocationGetDimX(aFaces) == dimX);
+    _RS_ASSERT(rsAllocationGetDimY(aFaces) == dimY);
+    _RS_ASSERT(rsAllocationGetDimZ(aFaces) == dimZ);
+    _RS_ASSERT(rsAllocationGetDimFaces(aFaces) != 0);
+    _RS_ASSERT(rsAllocationGetDimLOD(aFaces) == 0);
+
+    _RS_ASSERT(rsAllocationGetDimX(aLOD) == dimX);
+    _RS_ASSERT(rsAllocationGetDimY(aLOD) == dimY);
+    _RS_ASSERT(rsAllocationGetDimZ(aLOD) == dimZ);
+    _RS_ASSERT(rsAllocationGetDimFaces(aLOD) == 0);
+    _RS_ASSERT(rsAllocationGetDimLOD(aLOD) != 0);
+
+    _RS_ASSERT(rsAllocationGetDimX(aFacesLOD) == dimX);
+    _RS_ASSERT(rsAllocationGetDimY(aFacesLOD) == dimY);
+    _RS_ASSERT(rsAllocationGetDimZ(aFacesLOD) == dimZ);
+    _RS_ASSERT(rsAllocationGetDimFaces(aFacesLOD) != 0);
+    _RS_ASSERT(rsAllocationGetDimLOD(aFacesLOD) != 0);
+
+    if (failed) {
+        rsDebug("test_alloc_dims FAILED", 0);
+    }
+    else {
+        rsDebug("test_alloc_dims PASSED", 0);
+    }
+
+    return failed;
+}
+
+void alloc_test() {
+    bool failed = false;
+    failed |= test_alloc_dims();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/array_alloc.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/array_alloc.rs
new file mode 100644
index 0000000..74ffdb1
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/array_alloc.rs
@@ -0,0 +1,21 @@
+#include "shared.rsh"
+
+const int dimX = 20;
+rs_allocation a[dimX];
+
+void array_alloc_test() {
+    bool failed = false;
+
+    for (int i = 0; i < dimX; i++) {
+        rsDebug("i: ", i);
+        _RS_ASSERT(rsAllocationGetDimX(a[i]) == 1);
+    }
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/array_init.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/array_init.rs
new file mode 100644
index 0000000..842249a
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/array_init.rs
@@ -0,0 +1,58 @@
+#include "shared.rsh"
+
+// Testing constant array initialization
+float fa[4] = {1.0, 9.9999f};
+double da[2] = {7.0, 8.88888};
+char ca[4] = {'a', 7, 'b', 'c'};
+short sa[4] = {1, 1, 2, 3};
+int ia[4] = {5, 8};
+long la[2] = {13, 21};
+long long lla[4] = {34};
+bool ba[3] = {true, false};
+
+void array_init_test() {
+    bool failed = false;
+
+    _RS_ASSERT(fa[0] == 1.0);
+    _RS_ASSERT(fa[1] == 9.9999f);
+    _RS_ASSERT(fa[2] == 0);
+    _RS_ASSERT(fa[3] == 0);
+
+    _RS_ASSERT(da[0] == 7.0);
+    _RS_ASSERT(da[1] == 8.88888);
+
+    _RS_ASSERT(ca[0] == 'a');
+    _RS_ASSERT(ca[1] == 7);
+    _RS_ASSERT(ca[2] == 'b');
+    _RS_ASSERT(ca[3] == 'c');
+
+    _RS_ASSERT(sa[0] == 1);
+    _RS_ASSERT(sa[1] == 1);
+    _RS_ASSERT(sa[2] == 2);
+    _RS_ASSERT(sa[3] == 3);
+
+    _RS_ASSERT(ia[0] == 5);
+    _RS_ASSERT(ia[1] == 8);
+    _RS_ASSERT(ia[2] == 0);
+    _RS_ASSERT(ia[3] == 0);
+
+    _RS_ASSERT(la[0] == 13);
+    _RS_ASSERT(la[1] == 21);
+
+    _RS_ASSERT(lla[0] == 34);
+    _RS_ASSERT(lla[1] == 0);
+    _RS_ASSERT(lla[2] == 0);
+    _RS_ASSERT(lla[3] == 0);
+
+    _RS_ASSERT(ba[0] == true);
+    _RS_ASSERT(ba[1] == false);
+    _RS_ASSERT(ba[2] == false);
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/atomic.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/atomic.rs
new file mode 100644
index 0000000..f0a5041
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/atomic.rs
@@ -0,0 +1,77 @@
+#include "shared.rsh"
+
+// Testing atomic operations
+static bool testUMax(uint32_t dst, uint32_t src) {
+    bool failed = false;
+    uint32_t old = dst;
+    uint32_t expect = (dst > src ? dst : src);
+    uint32_t ret = rsAtomicMax(&dst, src);
+    _RS_ASSERT(old == ret);
+    _RS_ASSERT(dst == expect);
+    return failed;
+}
+
+static bool testUMin(uint32_t dst, uint32_t src) {
+    bool failed = false;
+    uint32_t old = dst;
+    uint32_t expect = (dst < src ? dst : src);
+    uint32_t ret = rsAtomicMin(&dst, src);
+    _RS_ASSERT(old == ret);
+    _RS_ASSERT(dst == expect);
+    return failed;
+}
+
+static bool testUCas(uint32_t dst, uint32_t cmp, uint32_t swp) {
+    bool failed = false;
+    uint32_t old = dst;
+    uint32_t expect = (dst == cmp ? swp : dst);
+    uint32_t ret = rsAtomicCas(&dst, cmp, swp);
+    _RS_ASSERT(old == ret);
+    _RS_ASSERT(dst == expect);
+    return failed;
+}
+
+static bool test_atomics() {
+    bool failed = false;
+
+    failed |= testUMax(5, 6);
+    failed |= testUMax(6, 5);
+    failed |= testUMax(5, 0xf0000006);
+    failed |= testUMax(0xf0000006, 5);
+
+    failed |= testUMin(5, 6);
+    failed |= testUMin(6, 5);
+    failed |= testUMin(5, 0xf0000006);
+    failed |= testUMin(0xf0000006, 5);
+
+    failed |= testUCas(4, 4, 5);
+    failed |= testUCas(4, 5, 5);
+    failed |= testUCas(5, 5, 4);
+    failed |= testUCas(5, 4, 4);
+    failed |= testUCas(0xf0000004, 0xf0000004, 0xf0000005);
+    failed |= testUCas(0xf0000004, 0xf0000005, 0xf0000005);
+    failed |= testUCas(0xf0000005, 0xf0000005, 0xf0000004);
+    failed |= testUCas(0xf0000005, 0xf0000004, 0xf0000004);
+
+    if (failed) {
+        rsDebug("test_atomics FAILED", 0);
+    }
+    else {
+        rsDebug("test_atomics PASSED", 0);
+    }
+
+    return failed;
+}
+
+void atomic_test() {
+    bool failed = false;
+    failed |= test_atomics();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/bug_char.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/bug_char.rs
new file mode 100644
index 0000000..dcd7b72
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/bug_char.rs
@@ -0,0 +1,47 @@
+#include "shared.rsh"
+
+char rand_sc1_0, rand_sc1_1;
+char2 rand_sc2_0, rand_sc2_1;
+
+char min_rand_sc1_sc1;
+char2 min_rand_sc2_sc2;
+
+static bool test_bug_char() {
+    bool failed = false;
+
+    rsDebug("rand_sc2_0.x: ", rand_sc2_0.x);
+    rsDebug("rand_sc2_0.y: ", rand_sc2_0.y);
+    rsDebug("rand_sc2_1.x: ", rand_sc2_1.x);
+    rsDebug("rand_sc2_1.y: ", rand_sc2_1.y);
+    char temp_sc1;
+    char2 temp_sc2;
+
+    temp_sc1 = min( rand_sc1_0, rand_sc1_1 );
+    if (temp_sc1 != min_rand_sc1_sc1) {
+        rsDebug("temp_sc1", temp_sc1);
+        failed = true;
+    }
+    rsDebug("broken", 'y');
+
+    temp_sc2 = min( rand_sc2_0, rand_sc2_1 );
+    if (temp_sc2.x != min_rand_sc2_sc2.x
+            || temp_sc2.y != min_rand_sc2_sc2.y) {
+        failed = true;
+    }
+
+
+    return failed;
+}
+
+void bug_char_test() {
+    bool failed = false;
+    failed |= test_bug_char();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/clamp.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/clamp.rs
new file mode 100644
index 0000000..28b00bd
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/clamp.rs
@@ -0,0 +1,56 @@
+#include "shared.rsh"
+
+static bool test_clamp_vector() {
+    bool failed = false;
+
+    float2 src2 = { 2.0f, 2.0f};
+    float2 min2 = { 0.5f, -3.0f};
+    float2 max2 = { 1.0f, 9.0f};
+
+    float2 res2 = clamp(src2, min2, max2);
+    _RS_ASSERT(res2.x == 1.0f);
+    _RS_ASSERT(res2.y == 2.0f);
+
+
+    float3 src3 = { 2.0f, 2.0f, 1.0f};
+    float3 min3 = { 0.5f, -3.0f, 3.0f};
+    float3 max3 = { 1.0f, 9.0f, 4.0f};
+
+    float3 res3 = clamp(src3, min3, max3);
+    _RS_ASSERT(res3.x == 1.0f);
+    _RS_ASSERT(res3.y == 2.0f);
+    _RS_ASSERT(res3.z == 3.0f);
+
+
+    float4 src4 = { 2.0f, 2.0f, 1.0f, 4.0f };
+    float4 min4 = { 0.5f, -3.0f, 3.0f, 4.0f };
+    float4 max4 = { 1.0f, 9.0f, 4.0f, 4.0f };
+
+    float4 res4 = clamp(src4, min4, max4);
+    _RS_ASSERT(res4.x == 1.0f);
+    _RS_ASSERT(res4.y == 2.0f);
+    _RS_ASSERT(res4.z == 3.0f);
+    _RS_ASSERT(res4.w == 4.0f);
+
+    if (failed) {
+        rsDebug("test_clamp_vector FAILED", 0);
+    }
+    else {
+        rsDebug("test_clamp_vector PASSED", 0);
+    }
+
+    return failed;
+}
+
+void clamp_test() {
+    bool failed = false;
+    failed |= test_clamp_vector();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/clamp_relaxed.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/clamp_relaxed.rs
new file mode 100644
index 0000000..71c65ae
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/clamp_relaxed.rs
@@ -0,0 +1,2 @@
+#include "clamp.rs"
+#pragma rs_fp_relaxed
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/constant.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/constant.rs
new file mode 100644
index 0000000..732eaef
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/constant.rs
@@ -0,0 +1,19 @@
+#include "shared.rsh"
+
+const float floatTest = 1.99f;
+const double doubleTest = 2.05;
+const char charTest = -8;
+const short shortTest = -16;
+const int intTest = -32;
+const long longTest = 17179869184l; // 1 << 34
+const long long longlongTest = 68719476736l; // 1 << 36
+
+const uchar ucharTest = 8;
+const ushort ushortTest = 16;
+const uint uintTest = 32;
+const ulong ulongTest = 4611686018427387904L;
+const int64_t int64_tTest = -17179869184l; // - 1 << 34
+const uint64_t uint64_tTest = 117179869184l;
+
+const bool boolTest = true;
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/convert.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/convert.rs
new file mode 100644
index 0000000..e314f2b
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/convert.rs
@@ -0,0 +1,37 @@
+#include "shared.rsh"
+
+float4 f4 = { 2.0f, 4.0f, 6.0f, 8.0f };
+
+char4 i8_4 = { -1, -2, -3, 4 };
+
+static bool test_convert() {
+    bool failed = false;
+
+    f4 = convert_float4(i8_4);
+    _RS_ASSERT(f4.x == -1.0f);
+    _RS_ASSERT(f4.y == -2.0f);
+    _RS_ASSERT(f4.z == -3.0f);
+    _RS_ASSERT(f4.w == 4.0f);
+
+    if (failed) {
+        rsDebug("test_convert FAILED", 0);
+    }
+    else {
+        rsDebug("test_convert PASSED", 0);
+    }
+
+    return failed;
+}
+
+void convert_test() {
+    bool failed = false;
+    failed |= test_convert();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/convert_relaxed.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/convert_relaxed.rs
new file mode 100644
index 0000000..81abb9b
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/convert_relaxed.rs
@@ -0,0 +1,2 @@
+#include "convert.rs"
+#pragma rs_fp_relaxed
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/copy_test.rs
similarity index 60%
copy from tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs
copy to tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/copy_test.rs
index 1a19ffc..f4243eb 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/msg.rs
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/copy_test.rs
@@ -14,10 +14,28 @@
  * limitations under the License.
  */
 
-#pragma version(1)
-#pragma rs java_package_name(com.android.rs.image)
+#include "shared.rsh"
 
-void sendMsg() {
-    rsSendToClientBlocking(0);
+void sendResult(bool pass) {
+    if (pass) {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
 }
 
+
+float2 __attribute((kernel)) copyFloat2(float2 i) {
+    return i;
+}
+
+float3 __attribute((kernel)) copyFloat3(float3 i) {
+    return i;
+}
+
+float4 __attribute((kernel)) copyFloat4(float4 i) {
+    return i;
+}
+
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/element.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/element.rs
new file mode 100644
index 0000000..1f24775
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/element.rs
@@ -0,0 +1,156 @@
+#include "shared.rsh"
+#include "rs_graphics.rsh"
+
+rs_element simpleElem;
+rs_element complexElem;
+typedef struct ComplexStruct {
+    float subElem0;
+    float subElem1;
+    int subElem2;
+    float arrayElem0[2];
+    int arrayElem1[5];
+    char subElem3;
+    float subElem4;
+    float2 subElem5;
+    float3 subElem6;
+    float4 subElem_7;
+} ComplexStruct_t;
+
+ComplexStruct_t *complexStruct;
+
+static const char *subElemNames[] = {
+    "subElem0",
+    "subElem1",
+    "subElem2",
+    "arrayElem0",
+    "arrayElem1",
+    "subElem3",
+    "subElem4",
+    "subElem5",
+    "subElem6",
+    "subElem_7",
+};
+
+static uint32_t subElemNamesSizes[] = {
+    8,
+    8,
+    8,
+    10,
+    10,
+    8,
+    8,
+    8,
+    8,
+    9,
+};
+
+static uint32_t subElemArraySizes[] = {
+    1,
+    1,
+    1,
+    2,
+    5,
+    1,
+    1,
+    1,
+    1,
+    1,
+};
+
+static void resetStruct() {
+    uint8_t *bytePtr = (uint8_t*)complexStruct;
+    uint32_t sizeOfStruct = sizeof(*complexStruct);
+    for(uint32_t i = 0; i < sizeOfStruct; i ++) {
+        bytePtr[i] = 0;
+    }
+}
+
+static bool equals(const char *name0, const char * name1, uint32_t len) {
+    for (uint32_t i = 0; i < len; i ++) {
+        if (name0[i] != name1[i]) {
+            return false;
+        }
+    }
+    return true;
+}
+
+static bool test_element_getters() {
+    bool failed = false;
+
+    uint32_t subElemOffsets[10];
+    uint32_t index = 0;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->subElem0   - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->subElem1   - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->subElem2   - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->arrayElem0 - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->arrayElem1 - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->subElem3   - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->subElem4   - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->subElem5   - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->subElem6   - (uint32_t)complexStruct;
+    subElemOffsets[index++] = (uint32_t)&complexStruct->subElem_7  - (uint32_t)complexStruct;
+
+    uint32_t subElemCount = rsElementGetSubElementCount(simpleElem);
+    _RS_ASSERT(subElemCount == 0);
+    _RS_ASSERT(rsElementGetDataType(simpleElem) == RS_TYPE_FLOAT_32);
+    _RS_ASSERT(rsElementGetVectorSize(simpleElem) == 3);
+
+    subElemCount = rsElementGetSubElementCount(complexElem);
+    _RS_ASSERT(subElemCount == 10);
+    _RS_ASSERT(rsElementGetDataType(complexElem) == RS_TYPE_NONE);
+    _RS_ASSERT(rsElementGetVectorSize(complexElem) == 1);
+    _RS_ASSERT(rsElementGetBytesSize(complexElem) == sizeof(*complexStruct));
+
+    char buffer[64];
+    for (uint32_t i = 0; i < subElemCount; i ++) {
+        rs_element subElem = rsElementGetSubElement(complexElem, i);
+        _RS_ASSERT(rsIsObject(subElem));
+
+        _RS_ASSERT(rsElementGetSubElementNameLength(complexElem, i) == subElemNamesSizes[i] + 1);
+
+        uint32_t written = rsElementGetSubElementName(complexElem, i, buffer, 64);
+        _RS_ASSERT(written == subElemNamesSizes[i]);
+        _RS_ASSERT(equals(buffer, subElemNames[i], written));
+
+        _RS_ASSERT(rsElementGetSubElementArraySize(complexElem, i) == subElemArraySizes[i]);
+        _RS_ASSERT(rsElementGetSubElementOffsetBytes(complexElem, i) == subElemOffsets[i]);
+    }
+
+    // Tests error checking
+    rs_element subElem = rsElementGetSubElement(complexElem, subElemCount);
+    _RS_ASSERT(!rsIsObject(subElem));
+
+    _RS_ASSERT(rsElementGetSubElementNameLength(complexElem, subElemCount) == 0);
+
+    _RS_ASSERT(rsElementGetSubElementName(complexElem, subElemCount, buffer, 64) == 0);
+    _RS_ASSERT(rsElementGetSubElementName(complexElem, 0, NULL, 64) == 0);
+    _RS_ASSERT(rsElementGetSubElementName(complexElem, 0, buffer, 0) == 0);
+    uint32_t written = rsElementGetSubElementName(complexElem, 0, buffer, 5);
+    _RS_ASSERT(written == 4);
+    _RS_ASSERT(buffer[4] == '\0');
+
+    _RS_ASSERT(rsElementGetSubElementArraySize(complexElem, subElemCount) == 0);
+    _RS_ASSERT(rsElementGetSubElementOffsetBytes(complexElem, subElemCount) == 0);
+
+    if (failed) {
+        rsDebug("test_element_getters FAILED", 0);
+    }
+    else {
+        rsDebug("test_element_getters PASSED", 0);
+    }
+
+    return failed;
+}
+
+void element_test() {
+    bool failed = false;
+    failed |= test_element_getters();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/foreach.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/foreach.rs
new file mode 100644
index 0000000..ac527b5
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/foreach.rs
@@ -0,0 +1,74 @@
+#include "shared.rsh"
+
+int *a;
+int dimX;
+int dimY;
+static bool failed = false;
+
+void root(int *out, uint32_t x, uint32_t y) {
+    *out = x + y * dimX;
+}
+
+void foo(const int *in, int *out, uint32_t x, uint32_t y) {
+    _RS_ASSERT(*in == (x + y * dimX));
+    *out = 99 + x + y * dimX;
+    _RS_ASSERT(*out == (99 + x + y * dimX));
+}
+
+static bool test_root_output() {
+    bool failed = false;
+    int i, j;
+
+    for (j = 0; j < dimY; j++) {
+        for (i = 0; i < dimX; i++) {
+            _RS_ASSERT(a[i + j * dimX] == (i + j * dimX));
+        }
+    }
+
+    if (failed) {
+        rsDebug("test_root_output FAILED", 0);
+    }
+    else {
+        rsDebug("test_root_output PASSED", 0);
+    }
+
+    return failed;
+}
+
+static bool test_foo_output() {
+    bool failed = false;
+    int i, j;
+
+    for (j = 0; j < dimY; j++) {
+        for (i = 0; i < dimX; i++) {
+            _RS_ASSERT(a[i + j * dimX] == (99 + i + j * dimX));
+        }
+    }
+
+    if (failed) {
+        rsDebug("test_foo_output FAILED", 0);
+    }
+    else {
+        rsDebug("test_foo_output PASSED", 0);
+    }
+
+    return failed;
+}
+
+void verify_root() {
+    failed |= test_root_output();
+}
+
+void verify_foo() {
+    failed |= test_foo_output();
+}
+
+void foreach_test() {
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/foreach_bounds.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/foreach_bounds.rs
new file mode 100644
index 0000000..ddf17f8
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/foreach_bounds.rs
@@ -0,0 +1,71 @@
+#include "shared.rsh"
+
+int *a;
+int dimX;
+int dimY;
+int xStart = 0;
+int xEnd = 0;
+int yStart = 0;
+int yEnd = 0;
+
+rs_script s;
+rs_allocation ain;
+rs_allocation aout;
+
+void root(int *out, uint32_t x, uint32_t y) {
+    *out = x + y * dimX;
+}
+
+int __attribute__((kernel)) zero() {
+    return 0;
+}
+
+static bool test_root_output() {
+    bool failed = false;
+    int i, j;
+
+    for (j = 0; j < dimY; j++) {
+        for (i = 0; i < dimX; i++) {
+            rsDebug("i: ", i);
+            rsDebug("j: ", j);
+            rsDebug("a[j][i]: ", a[i + j * dimX]);
+            if (i < xStart || i >= xEnd || j < yStart || j >= yEnd) {
+                _RS_ASSERT(a[i + j * dimX] == 0);
+            } else {
+                _RS_ASSERT(a[i + j * dimX] == (i + j * dimX));
+            }
+        }
+    }
+
+    if (failed) {
+        rsDebug("test_root_output FAILED", 0);
+    }
+    else {
+        rsDebug("test_root_output PASSED", 0);
+    }
+
+    return failed;
+}
+
+void foreach_bounds_test() {
+    static bool failed = false;
+
+    rs_script_call_t rssc = {0};
+    rssc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
+    rssc.xStart = xStart;
+    rssc.xEnd = xEnd;
+    rssc.yStart = yStart;
+    rssc.yEnd = yEnd;
+
+    rsForEach(s, ain, aout, NULL, 0, &rssc);
+
+    failed |= test_root_output();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/fp_mad.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/fp_mad.rs
new file mode 100644
index 0000000..b6f2b2a6
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/fp_mad.rs
@@ -0,0 +1,174 @@
+#include "shared.rsh"
+
+const int TEST_COUNT = 1;
+
+static float data_f1[1025];
+static float4 data_f4[1025];
+
+static void test_mad4(uint32_t index) {
+    start();
+
+    float total = 0;
+    // Do ~1 billion ops
+    for (int ct=0; ct < 1000 * (1000 / 80); ct++) {
+        for (int i=0; i < (1000); i++) {
+            data_f4[i] = (data_f4[i] * 0.02f +
+                          data_f4[i+1] * 0.04f +
+                          data_f4[i+2] * 0.05f +
+                          data_f4[i+3] * 0.1f +
+                          data_f4[i+4] * 0.2f +
+                          data_f4[i+5] * 0.2f +
+                          data_f4[i+6] * 0.1f +
+                          data_f4[i+7] * 0.05f +
+                          data_f4[i+8] * 0.04f +
+                          data_f4[i+9] * 0.02f + 1.f);
+        }
+    }
+
+    float time = end(index);
+    rsDebug("fp_mad4 M ops", 1000.f / time);
+}
+
+static void test_mad(uint32_t index) {
+    start();
+
+    float total = 0;
+    // Do ~1 billion ops
+    for (int ct=0; ct < 1000 * (1000 / 20); ct++) {
+        for (int i=0; i < (1000); i++) {
+            data_f1[i] = (data_f1[i] * 0.02f +
+                          data_f1[i+1] * 0.04f +
+                          data_f1[i+2] * 0.05f +
+                          data_f1[i+3] * 0.1f +
+                          data_f1[i+4] * 0.2f +
+                          data_f1[i+5] * 0.2f +
+                          data_f1[i+6] * 0.1f +
+                          data_f1[i+7] * 0.05f +
+                          data_f1[i+8] * 0.04f +
+                          data_f1[i+9] * 0.02f + 1.f);
+        }
+    }
+
+    float time = end(index);
+    rsDebug("fp_mad M ops", 1000.f / time);
+}
+
+static void test_norm(uint32_t index) {
+    start();
+
+    float total = 0;
+    // Do ~10 M ops
+    for (int ct=0; ct < 1000 * 10; ct++) {
+        for (int i=0; i < (1000); i++) {
+            data_f4[i] = normalize(data_f4[i]);
+        }
+    }
+
+    float time = end(index);
+    rsDebug("fp_norm M ops", 10.f / time);
+}
+
+static void test_sincos4(uint32_t index) {
+    start();
+
+    float total = 0;
+    // Do ~10 M ops
+    for (int ct=0; ct < 1000 * 10 / 4; ct++) {
+        for (int i=0; i < (1000); i++) {
+            data_f4[i] = sin(data_f4[i]) * cos(data_f4[i]);
+        }
+    }
+
+    float time = end(index);
+    rsDebug("fp_sincos4 M ops", 10.f / time);
+}
+
+static void test_sincos(uint32_t index) {
+    start();
+
+    float total = 0;
+    // Do ~10 M ops
+    for (int ct=0; ct < 1000 * 10; ct++) {
+        for (int i=0; i < (1000); i++) {
+            data_f1[i] = sin(data_f1[i]) * cos(data_f1[i]);
+        }
+    }
+
+    float time = end(index);
+    rsDebug("fp_sincos M ops", 10.f / time);
+}
+
+static void test_clamp(uint32_t index) {
+    start();
+
+    // Do ~100 M ops
+    for (int ct=0; ct < 1000 * 100; ct++) {
+        for (int i=0; i < (1000); i++) {
+            data_f1[i] = clamp(data_f1[i], -1.f, 1.f);
+        }
+    }
+
+    float time = end(index);
+    rsDebug("fp_clamp M ops", 100.f / time);
+
+    start();
+    // Do ~100 M ops
+    for (int ct=0; ct < 1000 * 100; ct++) {
+        for (int i=0; i < (1000); i++) {
+            if (data_f1[i] < -1.f) data_f1[i] = -1.f;
+            if (data_f1[i] > -1.f) data_f1[i] = 1.f;
+        }
+    }
+
+    time = end(index);
+    rsDebug("fp_clamp ref M ops", 100.f / time);
+}
+
+static void test_clamp4(uint32_t index) {
+    start();
+
+    float total = 0;
+    // Do ~100 M ops
+    for (int ct=0; ct < 1000 * 100 /4; ct++) {
+        for (int i=0; i < (1000); i++) {
+            data_f4[i] = clamp(data_f4[i], -1.f, 1.f);
+        }
+    }
+
+    float time = end(index);
+    rsDebug("fp_clamp4 M ops", 100.f / time);
+}
+
+void fp_mad_test(uint32_t index, int test_num) {
+    int x;
+    for (x=0; x < 1025; x++) {
+        data_f1[x] = (x & 0xf) * 0.1f;
+        data_f4[x].x = (x & 0xf) * 0.1f;
+        data_f4[x].y = (x & 0xf0) * 0.1f;
+        data_f4[x].z = (x & 0x33) * 0.1f;
+        data_f4[x].w = (x & 0x77) * 0.1f;
+    }
+
+    test_mad4(index);
+    test_mad(index);
+
+    for (x=0; x < 1025; x++) {
+        data_f1[x] = (x & 0xf) * 0.1f + 1.f;
+        data_f4[x].x = (x & 0xf) * 0.1f + 1.f;
+        data_f4[x].y = (x & 0xf0) * 0.1f + 1.f;
+        data_f4[x].z = (x & 0x33) * 0.1f + 1.f;
+        data_f4[x].w = (x & 0x77) * 0.1f + 1.f;
+    }
+
+    test_norm(index);
+    test_sincos4(index);
+    test_sincos(index);
+    test_clamp4(index);
+    test_clamp(index);
+
+    // TODO Actually verify test result accuracy
+    rsDebug("fp_mad_test PASSED", 0);
+    rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+}
+
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/int4.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/int4.rs
new file mode 100644
index 0000000..c791cab
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/int4.rs
@@ -0,0 +1,29 @@
+#include "shared.rsh"
+#pragma rs_fp_relaxed
+
+uchar4 u4 = 4;
+int4 gi4 = {2, 2, 2, 2};
+
+void int4_test() {
+    bool failed = false;
+    int4 i4 = {u4.x, u4.y, u4.z, u4.w};
+    i4 *= gi4;
+
+    rsDebug("i4.x", i4.x);
+    rsDebug("i4.y", i4.y);
+    rsDebug("i4.z", i4.z);
+    rsDebug("i4.w", i4.w);
+
+    _RS_ASSERT(i4.x == 8);
+    _RS_ASSERT(i4.y == 8);
+    _RS_ASSERT(i4.z == 8);
+    _RS_ASSERT(i4.w == 8);
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/kernel.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/kernel.rs
new file mode 100644
index 0000000..d6c9df3
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/kernel.rs
@@ -0,0 +1,47 @@
+#include "shared.rsh"
+
+int *ain;
+int *aout;
+int dimX;
+static bool failed = false;
+
+void init_vars(int *out) {
+    *out = 7;
+}
+
+
+int __attribute__((kernel)) root(int ain, uint32_t x) {
+    _RS_ASSERT(ain == 7);
+    return ain + x;
+}
+
+static bool test_root_output() {
+    bool failed = false;
+    int i;
+
+    for (i = 0; i < dimX; i++) {
+        _RS_ASSERT(aout[i] == (i + ain[i]));
+    }
+
+    if (failed) {
+        rsDebug("test_root_output FAILED", 0);
+    }
+    else {
+        rsDebug("test_root_output PASSED", 0);
+    }
+
+    return failed;
+}
+
+void verify_root() {
+    failed |= test_root_output();
+}
+
+void kernel_test() {
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/kernel_struct.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/kernel_struct.rs
new file mode 100644
index 0000000..62c30ae
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/kernel_struct.rs
@@ -0,0 +1,66 @@
+#include "shared.rsh"
+
+struct simpleStruct {
+    int i1;
+    char ignored1;
+    float f1;
+    int i2;
+    char ignored2;
+    float f2;
+};
+
+struct simpleStruct *ain;
+struct simpleStruct *aout;
+int dimX;
+static bool failed = false;
+
+void init_vars(struct simpleStruct *out, uint32_t x) {
+    out->i1 = 0;
+    out->f1 = 0.f;
+    out->i2 = 1;
+    out->f2 = 1.0f;
+}
+
+struct simpleStruct __attribute__((kernel))
+        root(struct simpleStruct in, uint32_t x) {
+    struct simpleStruct s;
+    s.i1 = in.i1 + x;
+    s.f1 = in.f1 + x;
+    s.i2 = in.i2 + x;
+    s.f2 = in.f2 + x;
+    return s;
+}
+
+static bool test_root_output() {
+    bool failed = false;
+    int i;
+
+    for (i = 0; i < dimX; i++) {
+        _RS_ASSERT(aout[i].i1 == (i + ain[i].i1));
+        _RS_ASSERT(aout[i].f1 == (i + ain[i].f1));
+        _RS_ASSERT(aout[i].i2 == (i + ain[i].i2));
+        _RS_ASSERT(aout[i].f2 == (i + ain[i].f2));
+    }
+
+    if (failed) {
+        rsDebug("test_root_output FAILED", 0);
+    }
+    else {
+        rsDebug("test_root_output PASSED", 0);
+    }
+
+    return failed;
+}
+
+void verify_root() {
+    failed |= test_root_output();
+}
+
+void kernel_struct_test() {
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math.rs
new file mode 100644
index 0000000..aae29a4
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math.rs
@@ -0,0 +1,436 @@
+#include "shared.rsh"
+
+// Testing math library
+
+volatile float f1;
+volatile float2 f2;
+volatile float3 f3;
+volatile float4 f4;
+
+volatile int i1;
+volatile int2 i2;
+volatile int3 i3;
+volatile int4 i4;
+
+volatile uint ui1;
+volatile uint2 ui2;
+volatile uint3 ui3;
+volatile uint4 ui4;
+
+volatile short s1;
+volatile short2 s2;
+volatile short3 s3;
+volatile short4 s4;
+
+volatile ushort us1;
+volatile ushort2 us2;
+volatile ushort3 us3;
+volatile ushort4 us4;
+
+volatile char c1;
+volatile char2 c2;
+volatile char3 c3;
+volatile char4 c4;
+
+volatile uchar uc1;
+volatile uchar2 uc2;
+volatile uchar3 uc3;
+volatile uchar4 uc4;
+
+#define DECL_INT(prefix)            \
+volatile char prefix##_c_1 = 1;     \
+volatile char2 prefix##_c_2 = 1;    \
+volatile char3 prefix##_c_3 = 1;    \
+volatile char4 prefix##_c_4 = 1;    \
+volatile uchar prefix##_uc_1 = 1;   \
+volatile uchar2 prefix##_uc_2 = 1;  \
+volatile uchar3 prefix##_uc_3 = 1;  \
+volatile uchar4 prefix##_uc_4 = 1;  \
+volatile short prefix##_s_1 = 1;    \
+volatile short2 prefix##_s_2 = 1;   \
+volatile short3 prefix##_s_3 = 1;   \
+volatile short4 prefix##_s_4 = 1;   \
+volatile ushort prefix##_us_1 = 1;  \
+volatile ushort2 prefix##_us_2 = 1; \
+volatile ushort3 prefix##_us_3 = 1; \
+volatile ushort4 prefix##_us_4 = 1; \
+volatile int prefix##_i_1 = 1;      \
+volatile int2 prefix##_i_2 = 1;     \
+volatile int3 prefix##_i_3 = 1;     \
+volatile int4 prefix##_i_4 = 1;     \
+volatile uint prefix##_ui_1 = 1;    \
+volatile uint2 prefix##_ui_2 = 1;   \
+volatile uint3 prefix##_ui_3 = 1;   \
+volatile uint4 prefix##_ui_4 = 1;   \
+volatile long prefix##_l_1 = 1;     \
+volatile ulong prefix##_ul_1 = 1;
+
+DECL_INT(res)
+DECL_INT(src1)
+DECL_INT(src2)
+
+#define TEST_INT_OP_TYPE(op, type)                      \
+rsDebug("Testing " #op " for " #type "1", i++);         \
+res_##type##_1 = src1_##type##_1 op src2_##type##_1;    \
+rsDebug("Testing " #op " for " #type "2", i++);         \
+res_##type##_2 = src1_##type##_2 op src2_##type##_2;    \
+rsDebug("Testing " #op " for " #type "3", i++);         \
+res_##type##_3 = src1_##type##_3 op src2_##type##_3;    \
+rsDebug("Testing " #op " for " #type "4", i++);         \
+res_##type##_4 = src1_##type##_4 op src2_##type##_4;
+
+#define TEST_INT_OP(op)                     \
+TEST_INT_OP_TYPE(op, c)                     \
+TEST_INT_OP_TYPE(op, uc)                    \
+TEST_INT_OP_TYPE(op, s)                     \
+TEST_INT_OP_TYPE(op, us)                    \
+TEST_INT_OP_TYPE(op, i)                     \
+TEST_INT_OP_TYPE(op, ui)                    \
+rsDebug("Testing " #op " for l1", i++);     \
+res_l_1 = src1_l_1 op src2_l_1;             \
+rsDebug("Testing " #op " for ul1", i++);    \
+res_ul_1 = src1_ul_1 op src2_ul_1;
+
+#define TEST_XN_FUNC_YN(typeout, fnc, typein)   \
+    res_##typeout##_1 = fnc(src1_##typein##_1); \
+    res_##typeout##_2 = fnc(src1_##typein##_2); \
+    res_##typeout##_3 = fnc(src1_##typein##_3); \
+    res_##typeout##_4 = fnc(src1_##typein##_4);
+
+#define TEST_XN_FUNC_XN_XN(type, fnc)                       \
+    res_##type##_1 = fnc(src1_##type##_1, src2_##type##_1); \
+    res_##type##_2 = fnc(src1_##type##_2, src2_##type##_2); \
+    res_##type##_3 = fnc(src1_##type##_3, src2_##type##_3); \
+    res_##type##_4 = fnc(src1_##type##_4, src2_##type##_4);
+
+#define TEST_X_FUNC_X_X_X(type, fnc)    \
+    res_##type##_1 = fnc(src1_##type##_1, src2_##type##_1, src2_##type##_1);
+
+#define TEST_IN_FUNC_IN(fnc)        \
+    rsDebug("Testing " #fnc, 0);    \
+    TEST_XN_FUNC_YN(uc, fnc, uc)    \
+    TEST_XN_FUNC_YN(c, fnc, c)      \
+    TEST_XN_FUNC_YN(us, fnc, us)    \
+    TEST_XN_FUNC_YN(s, fnc, s)      \
+    TEST_XN_FUNC_YN(ui, fnc, ui)    \
+    TEST_XN_FUNC_YN(i, fnc, i)
+
+#define TEST_UIN_FUNC_IN(fnc)       \
+    rsDebug("Testing " #fnc, 0);    \
+    TEST_XN_FUNC_YN(uc, fnc, c)     \
+    TEST_XN_FUNC_YN(us, fnc, s)     \
+    TEST_XN_FUNC_YN(ui, fnc, i)     \
+
+#define TEST_IN_FUNC_IN_IN(fnc)     \
+    rsDebug("Testing " #fnc, 0);    \
+    TEST_XN_FUNC_XN_XN(uc, fnc)     \
+    TEST_XN_FUNC_XN_XN(c, fnc)      \
+    TEST_XN_FUNC_XN_XN(us, fnc)     \
+    TEST_XN_FUNC_XN_XN(s, fnc)      \
+    TEST_XN_FUNC_XN_XN(ui, fnc)     \
+    TEST_XN_FUNC_XN_XN(i, fnc)
+
+#define TEST_I_FUNC_I_I_I(fnc)      \
+    rsDebug("Testing " #fnc, 0);    \
+    TEST_X_FUNC_X_X_X(uc, fnc)      \
+    TEST_X_FUNC_X_X_X(c, fnc)       \
+    TEST_X_FUNC_X_X_X(us, fnc)      \
+    TEST_X_FUNC_X_X_X(s, fnc)       \
+    TEST_X_FUNC_X_X_X(ui, fnc)      \
+    TEST_X_FUNC_X_X_X(i, fnc)
+
+#define TEST_FN_FUNC_FN(fnc)        \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1);                   \
+    f2 = fnc(f2);                   \
+    f3 = fnc(f3);                   \
+    f4 = fnc(f4);
+
+#define TEST_FN_FUNC_FN_PFN(fnc)    \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, (float*) &f1);     \
+    f2 = fnc(f2, (float2*) &f2);    \
+    f3 = fnc(f3, (float3*) &f3);    \
+    f4 = fnc(f4, (float4*) &f4);
+
+#define TEST_FN_FUNC_FN_FN(fnc)     \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, f1);               \
+    f2 = fnc(f2, f2);               \
+    f3 = fnc(f3, f3);               \
+    f4 = fnc(f4, f4);
+
+#define TEST_F34_FUNC_F34_F34(fnc)  \
+    rsDebug("Testing " #fnc, 0);    \
+    f3 = fnc(f3, f3);               \
+    f4 = fnc(f4, f4);
+
+#define TEST_FN_FUNC_FN_F(fnc)      \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, f1);               \
+    f2 = fnc(f2, f1);               \
+    f3 = fnc(f3, f1);               \
+    f4 = fnc(f4, f1);
+
+#define TEST_F_FUNC_FN(fnc)         \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1);                   \
+    f1 = fnc(f2);                   \
+    f1 = fnc(f3);                   \
+    f1 = fnc(f4);
+
+#define TEST_F_FUNC_FN_FN(fnc)      \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, f1);               \
+    f1 = fnc(f2, f2);               \
+    f1 = fnc(f3, f3);               \
+    f1 = fnc(f4, f4);
+
+#define TEST_FN_FUNC_FN_IN(fnc)     \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, i1);               \
+    f2 = fnc(f2, i2);               \
+    f3 = fnc(f3, i3);               \
+    f4 = fnc(f4, i4);
+
+#define TEST_FN_FUNC_FN_I(fnc)      \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, i1);               \
+    f2 = fnc(f2, i1);               \
+    f3 = fnc(f3, i1);               \
+    f4 = fnc(f4, i1);
+
+#define TEST_FN_FUNC_FN_FN_FN(fnc)  \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, f1, f1);           \
+    f2 = fnc(f2, f2, f2);           \
+    f3 = fnc(f3, f3, f3);           \
+    f4 = fnc(f4, f4, f4);
+
+#define TEST_FN_FUNC_FN_FN_F(fnc)   \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, f1, f1);           \
+    f2 = fnc(f2, f1, f1);           \
+    f3 = fnc(f3, f1, f1);           \
+    f4 = fnc(f4, f1, f1);
+
+#define TEST_FN_FUNC_FN_PIN(fnc)    \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, (int*) &i1);       \
+    f2 = fnc(f2, (int2*) &i2);      \
+    f3 = fnc(f3, (int3*) &i3);      \
+    f4 = fnc(f4, (int4*) &i4);
+
+#define TEST_FN_FUNC_FN_FN_PIN(fnc) \
+    rsDebug("Testing " #fnc, 0);    \
+    f1 = fnc(f1, f1, (int*) &i1);   \
+    f2 = fnc(f2, f2, (int2*) &i2);  \
+    f3 = fnc(f3, f3, (int3*) &i3);  \
+    f4 = fnc(f4, f4, (int4*) &i4);
+
+#define TEST_IN_FUNC_FN(fnc)        \
+    rsDebug("Testing " #fnc, 0);    \
+    i1 = fnc(f1);                   \
+    i2 = fnc(f2);                   \
+    i3 = fnc(f3);                   \
+    i4 = fnc(f4);
+
+static bool test_fp_math(uint32_t index) {
+    bool failed = false;
+    start();
+
+    TEST_FN_FUNC_FN(acos);
+    TEST_FN_FUNC_FN(acosh);
+    TEST_FN_FUNC_FN(acospi);
+    TEST_FN_FUNC_FN(asin);
+    TEST_FN_FUNC_FN(asinh);
+    TEST_FN_FUNC_FN(asinpi);
+    TEST_FN_FUNC_FN(atan);
+    TEST_FN_FUNC_FN_FN(atan2);
+    TEST_FN_FUNC_FN(atanh);
+    TEST_FN_FUNC_FN(atanpi);
+    TEST_FN_FUNC_FN_FN(atan2pi);
+    TEST_FN_FUNC_FN(cbrt);
+    TEST_FN_FUNC_FN(ceil);
+    TEST_FN_FUNC_FN_FN_FN(clamp);
+    TEST_FN_FUNC_FN_FN_F(clamp);
+    TEST_FN_FUNC_FN_FN(copysign);
+    TEST_FN_FUNC_FN(cos);
+    TEST_FN_FUNC_FN(cosh);
+    TEST_FN_FUNC_FN(cospi);
+    TEST_F34_FUNC_F34_F34(cross);
+    TEST_FN_FUNC_FN(degrees);
+    TEST_F_FUNC_FN_FN(distance);
+    TEST_F_FUNC_FN_FN(dot);
+    TEST_FN_FUNC_FN(erfc);
+    TEST_FN_FUNC_FN(erf);
+    TEST_FN_FUNC_FN(exp);
+    TEST_FN_FUNC_FN(exp2);
+    TEST_FN_FUNC_FN(exp10);
+    TEST_FN_FUNC_FN(expm1);
+    TEST_FN_FUNC_FN(fabs);
+    TEST_FN_FUNC_FN_FN(fdim);
+    TEST_FN_FUNC_FN(floor);
+    TEST_FN_FUNC_FN_FN_FN(fma);
+    TEST_FN_FUNC_FN_FN(fmax);
+    TEST_FN_FUNC_FN_F(fmax);
+    TEST_FN_FUNC_FN_FN(fmin);
+    TEST_FN_FUNC_FN_F(fmin);
+    TEST_FN_FUNC_FN_FN(fmod);
+    TEST_FN_FUNC_FN_PFN(fract);
+    TEST_FN_FUNC_FN_PIN(frexp);
+    TEST_FN_FUNC_FN_FN(hypot);
+    TEST_IN_FUNC_FN(ilogb);
+    TEST_FN_FUNC_FN_IN(ldexp);
+    TEST_FN_FUNC_FN_I(ldexp);
+    TEST_F_FUNC_FN(length);
+    TEST_FN_FUNC_FN(lgamma);
+    TEST_FN_FUNC_FN_PIN(lgamma);
+    TEST_FN_FUNC_FN(log);
+    TEST_FN_FUNC_FN(log2);
+    TEST_FN_FUNC_FN(log10);
+    TEST_FN_FUNC_FN(log1p);
+    TEST_FN_FUNC_FN(logb);
+    TEST_FN_FUNC_FN_FN_FN(mad);
+    TEST_FN_FUNC_FN_FN(max);
+    TEST_FN_FUNC_FN_F(max);
+    TEST_FN_FUNC_FN_FN(min);
+    TEST_FN_FUNC_FN_F(min);
+    TEST_FN_FUNC_FN_FN_FN(mix);
+    TEST_FN_FUNC_FN_FN_F(mix);
+    TEST_FN_FUNC_FN_PFN(modf);
+    // nan
+    TEST_FN_FUNC_FN_FN(nextafter);
+    TEST_FN_FUNC_FN(normalize);
+    TEST_FN_FUNC_FN_FN(pow);
+    TEST_FN_FUNC_FN_IN(pown);
+    TEST_FN_FUNC_FN_FN(powr);
+    TEST_FN_FUNC_FN(radians);
+    TEST_FN_FUNC_FN_FN(remainder);
+    TEST_FN_FUNC_FN_FN_PIN(remquo);
+    TEST_FN_FUNC_FN(rint);
+    TEST_FN_FUNC_FN_IN(rootn);
+    TEST_FN_FUNC_FN(round);
+    TEST_FN_FUNC_FN(rsqrt);
+    TEST_FN_FUNC_FN(sign);
+    TEST_FN_FUNC_FN(sin);
+    TEST_FN_FUNC_FN_PFN(sincos);
+    TEST_FN_FUNC_FN(sinh);
+    TEST_FN_FUNC_FN(sinpi);
+    TEST_FN_FUNC_FN(sqrt);
+    TEST_FN_FUNC_FN_FN(step);
+    TEST_FN_FUNC_FN_F(step);
+    TEST_FN_FUNC_FN(tan);
+    TEST_FN_FUNC_FN(tanh);
+    TEST_FN_FUNC_FN(tanpi);
+    TEST_FN_FUNC_FN(tgamma);
+    TEST_FN_FUNC_FN(trunc);
+
+    float time = end(index);
+
+    if (failed) {
+        rsDebug("test_fp_math FAILED", time);
+    }
+    else {
+        rsDebug("test_fp_math PASSED", time);
+    }
+
+    return failed;
+}
+
+static bool test_int_math(uint32_t index) {
+    bool failed = false;
+    start();
+
+    TEST_UIN_FUNC_IN(abs);
+    TEST_IN_FUNC_IN(clz);
+    TEST_IN_FUNC_IN_IN(min);
+    TEST_IN_FUNC_IN_IN(max);
+    TEST_I_FUNC_I_I_I(rsClamp);
+
+    float time = end(index);
+
+    if (failed) {
+        rsDebug("test_int_math FAILED", time);
+    }
+    else {
+        rsDebug("test_int_math PASSED", time);
+    }
+
+    return failed;
+}
+
+static bool test_basic_operators() {
+    bool failed = false;
+    int i = 0;
+
+    TEST_INT_OP(+);
+    TEST_INT_OP(-);
+    TEST_INT_OP(*);
+    TEST_INT_OP(/);
+    TEST_INT_OP(%);
+    TEST_INT_OP(<<);
+    TEST_INT_OP(>>);
+
+    if (failed) {
+        rsDebug("test_basic_operators FAILED", 0);
+    }
+    else {
+        rsDebug("test_basic_operators PASSED", 0);
+    }
+
+    return failed;
+}
+
+#define TEST_CVT(to, from, type)                        \
+rsDebug("Testing convert from " #from " to " #to, 0);   \
+to##1 = from##1;                                        \
+to##2 = convert_##type##2(from##2);                     \
+to##3 = convert_##type##3(from##3);                     \
+to##4 = convert_##type##4(from##4);
+
+#define TEST_CVT_MATRIX(to, type)   \
+TEST_CVT(to, c, type);              \
+TEST_CVT(to, uc, type);             \
+TEST_CVT(to, s, type);              \
+TEST_CVT(to, us, type);             \
+TEST_CVT(to, i, type);              \
+TEST_CVT(to, ui, type);             \
+TEST_CVT(to, f, type);              \
+
+static bool test_convert() {
+    bool failed = false;
+
+    TEST_CVT_MATRIX(c, char);
+    TEST_CVT_MATRIX(uc, uchar);
+    TEST_CVT_MATRIX(s, short);
+    TEST_CVT_MATRIX(us, ushort);
+    TEST_CVT_MATRIX(i, int);
+    TEST_CVT_MATRIX(ui, uint);
+    TEST_CVT_MATRIX(f, float);
+
+    if (failed) {
+        rsDebug("test_convert FAILED", 0);
+    }
+    else {
+        rsDebug("test_convert PASSED", 0);
+    }
+
+    return failed;
+}
+
+void math_test(uint32_t index, int test_num) {
+    bool failed = false;
+    failed |= test_convert();
+    failed |= test_fp_math(index);
+    failed |= test_int_math(index);
+    failed |= test_basic_operators();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math_agree.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math_agree.rs
new file mode 100644
index 0000000..5bfbb2b
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math_agree.rs
@@ -0,0 +1,409 @@
+#include "shared.rsh"
+//#pragma rs_fp_relaxed
+
+volatile float x = 0.0f;
+volatile float y = 0.0f;
+volatile float result_add = 0.0f;
+volatile float result_sub = 0.0f;
+volatile float result_mul = 0.0f;
+volatile float result_div = 0.0f;
+
+#define DECLARE_INPUT_SET(type, abbrev)         \
+volatile type    rand_##abbrev##1_0, rand_##abbrev##1_1; \
+volatile type##2 rand_##abbrev##2_0, rand_##abbrev##2_1; \
+volatile type##3 rand_##abbrev##3_0, rand_##abbrev##3_1; \
+volatile type##4 rand_##abbrev##4_0, rand_##abbrev##4_1;
+
+#define DECLARE_ALL_INPUT_SETS()    \
+DECLARE_INPUT_SET(float, f);        \
+DECLARE_INPUT_SET(char, sc);        \
+DECLARE_INPUT_SET(uchar, uc);       \
+DECLARE_INPUT_SET(short, ss);       \
+DECLARE_INPUT_SET(ushort, us);      \
+DECLARE_INPUT_SET(int, si);         \
+DECLARE_INPUT_SET(uint, ui);        \
+DECLARE_INPUT_SET(long, sl);        \
+DECLARE_INPUT_SET(ulong, ul);
+
+DECLARE_ALL_INPUT_SETS();
+
+#define DECLARE_REFERENCE_SET_VEC_VEC(type, abbrev, func)   \
+volatile type    func##_rand_##abbrev##1_##abbrev##1;                \
+volatile type##2 func##_rand_##abbrev##2_##abbrev##2;                \
+volatile type##3 func##_rand_##abbrev##3_##abbrev##3;                \
+volatile type##4 func##_rand_##abbrev##4_##abbrev##4;
+#define DECLARE_REFERENCE_SET_VEC_SCL(type, abbrev, func)   \
+volatile type##2 func##_rand_##abbrev##2_##abbrev##1;                \
+volatile type##3 func##_rand_##abbrev##3_##abbrev##1;                \
+volatile type##4 func##_rand_##abbrev##4_##abbrev##1;
+
+#define DECLARE_ALL_REFERENCE_SETS_VEC_VEC(func)    \
+DECLARE_REFERENCE_SET_VEC_VEC(float, f, func);      \
+DECLARE_REFERENCE_SET_VEC_VEC(char, sc, func);      \
+DECLARE_REFERENCE_SET_VEC_VEC(uchar, uc, func);     \
+DECLARE_REFERENCE_SET_VEC_VEC(short, ss, func);     \
+DECLARE_REFERENCE_SET_VEC_VEC(ushort, us, func);    \
+DECLARE_REFERENCE_SET_VEC_VEC(int, si, func);       \
+DECLARE_REFERENCE_SET_VEC_VEC(uint, ui, func);      \
+DECLARE_REFERENCE_SET_VEC_VEC(long, sl, func);      \
+DECLARE_REFERENCE_SET_VEC_VEC(ulong, ul, func);
+
+DECLARE_ALL_REFERENCE_SETS_VEC_VEC(min);
+DECLARE_ALL_REFERENCE_SETS_VEC_VEC(max);
+DECLARE_REFERENCE_SET_VEC_VEC(float, f, fmin);
+DECLARE_REFERENCE_SET_VEC_SCL(float, f, fmin);
+DECLARE_REFERENCE_SET_VEC_VEC(float, f, fmax);
+DECLARE_REFERENCE_SET_VEC_SCL(float, f, fmax);
+
+static void fail_f1(float v1, float v2, float actual, float expected, char *op_name) {
+    int dist = float_dist(actual, expected);
+    rsDebug("float operation did not match!", op_name);
+    rsDebug("v1", v1);
+    rsDebug("v2", v2);
+    rsDebug("Dalvik result", expected);
+    rsDebug("Renderscript result", actual);
+    rsDebug("ULP difference", dist);
+}
+
+static void fail_f2(float2 v1, float2 v2, float2 actual, float2 expected, char *op_name) {
+    int2 dist;
+    dist.x = float_dist(actual.x, expected.x);
+    dist.y = float_dist(actual.y, expected.y);
+    rsDebug("float2 operation did not match!", op_name);
+    rsDebug("v1.x", v1.x);
+    rsDebug("v1.y", v1.y);
+    rsDebug("v2.x", v2.x);
+    rsDebug("v2.y", v2.y);
+    rsDebug("Dalvik result .x", expected.x);
+    rsDebug("Dalvik result .y", expected.y);
+    rsDebug("Renderscript result .x", actual.x);
+    rsDebug("Renderscript result .y", actual.y);
+    rsDebug("ULP difference .x", dist.x);
+    rsDebug("ULP difference .y", dist.y);
+}
+
+static void fail_f3(float3 v1, float3 v2, float3 actual, float3 expected, char *op_name) {
+    int3 dist;
+    dist.x = float_dist(actual.x, expected.x);
+    dist.y = float_dist(actual.y, expected.y);
+    dist.z = float_dist(actual.z, expected.z);
+    rsDebug("float3 operation did not match!", op_name);
+    rsDebug("v1.x", v1.x);
+    rsDebug("v1.y", v1.y);
+    rsDebug("v1.z", v1.z);
+    rsDebug("v2.x", v2.x);
+    rsDebug("v2.y", v2.y);
+    rsDebug("v2.z", v2.z);
+    rsDebug("Dalvik result .x", expected.x);
+    rsDebug("Dalvik result .y", expected.y);
+    rsDebug("Dalvik result .z", expected.z);
+    rsDebug("Renderscript result .x", actual.x);
+    rsDebug("Renderscript result .y", actual.y);
+    rsDebug("Renderscript result .z", actual.z);
+    rsDebug("ULP difference .x", dist.x);
+    rsDebug("ULP difference .y", dist.y);
+    rsDebug("ULP difference .z", dist.z);
+}
+
+static void fail_f4(float4 v1, float4 v2, float4 actual, float4 expected, char *op_name) {
+    int4 dist;
+    dist.x = float_dist(actual.x, expected.x);
+    dist.y = float_dist(actual.y, expected.y);
+    dist.z = float_dist(actual.z, expected.z);
+    dist.w = float_dist(actual.w, expected.w);
+    rsDebug("float4 operation did not match!", op_name);
+    rsDebug("v1.x", v1.x);
+    rsDebug("v1.y", v1.y);
+    rsDebug("v1.z", v1.z);
+    rsDebug("v1.w", v1.w);
+    rsDebug("v2.x", v2.x);
+    rsDebug("v2.y", v2.y);
+    rsDebug("v2.z", v2.z);
+    rsDebug("v2.w", v2.w);
+    rsDebug("Dalvik result .x", expected.x);
+    rsDebug("Dalvik result .y", expected.y);
+    rsDebug("Dalvik result .z", expected.z);
+    rsDebug("Dalvik result .w", expected.w);
+    rsDebug("Renderscript result .x", actual.x);
+    rsDebug("Renderscript result .y", actual.y);
+    rsDebug("Renderscript result .z", actual.z);
+    rsDebug("Renderscript result .w", actual.w);
+    rsDebug("ULP difference .x", dist.x);
+    rsDebug("ULP difference .y", dist.y);
+    rsDebug("ULP difference .z", dist.z);
+    rsDebug("ULP difference .w", dist.w);
+}
+
+static bool f1_almost_equal(float a, float b) {
+    return float_almost_equal(a, b);
+}
+
+static bool f2_almost_equal(float2 a, float2 b) {
+    return float_almost_equal(a.x, b.x) && float_almost_equal(a.y, b.y);
+}
+
+
+static bool f3_almost_equal(float3 a, float3 b) {
+    return float_almost_equal(a.x, b.x) && float_almost_equal(a.y, b.y)
+            && float_almost_equal(a.z, b.z);
+}
+
+static bool f4_almost_equal(float4 a, float4 b) {
+    return float_almost_equal(a.x, b.x) && float_almost_equal(a.y, b.y)
+            && float_almost_equal(a.z, b.z) && float_almost_equal(a.w, b.w);
+}
+
+#define TEST_BASIC_FLOAT_OP(op, opName)                 \
+temp_f1 = x op y;                                       \
+if (! float_almost_equal(temp_f1, result_##opName)) {   \
+    fail_f1(x, y , temp_f1, result_##opName, #opName);  \
+    failed = true;                                      \
+}
+
+#define TEST_FN_FN(func, size)                                                  \
+temp_f##size = func(rand_f##size##_0, rand_f##size##_1);                        \
+if (! f##size##_almost_equal(temp_f##size , func##_rand_f##size##_f##size)) {   \
+    fail_f##size (x, y , temp_f##size, func##_rand_f##size##_f##size, #func);   \
+    failed = true;                                                              \
+}
+#define TEST_FN_F(func, size)                                               \
+temp_f##size = func(rand_f##size##_0, rand_f1_1);                           \
+if (! f##size##_almost_equal(temp_f##size , func##_rand_f##size##_f1)) {    \
+    fail_f##size (x, y , temp_f##size, func##_rand_f##size##_f1 , #func);   \
+    failed = true;                                                          \
+}
+
+#define TEST_FN_FN_ALL(func)    \
+TEST_FN_FN(func, 1)             \
+TEST_FN_FN(func, 2)             \
+TEST_FN_FN(func, 3)             \
+TEST_FN_FN(func, 4)
+#define TEST_FN_F_ALL(func) \
+TEST_FN_F(func, 2)          \
+TEST_FN_F(func, 3)          \
+TEST_FN_F(func, 4)
+
+#define TEST_VEC1_VEC1(func, type)                              \
+temp_##type##1 = func( rand_##type##1_0, rand_##type##1_1 );    \
+if (temp_##type##1 != func##_rand_##type##1_##type##1) {        \
+    rsDebug(#func " " #type "1 operation did not match!", 0);   \
+    rsDebug("v1", rand_##type##1_0);                            \
+    rsDebug("v2", rand_##type##1_1);                            \
+    rsDebug("Dalvik result", func##_rand_##type##1_##type##1);  \
+    rsDebug("Renderscript result", temp_##type##1);             \
+    failed = true;                                              \
+}
+#define TEST_VEC2_VEC2(func, type)                                      \
+temp_##type##2 = func( rand_##type##2_0, rand_##type##2_1 );            \
+if (temp_##type##2 .x != func##_rand_##type##2_##type##2 .x             \
+        || temp_##type##2 .y != func##_rand_##type##2_##type##2 .y) {   \
+    rsDebug(#func " " #type "2 operation did not match!", 0);           \
+    rsDebug("v1.x", rand_##type##2_0 .x);                               \
+    rsDebug("v1.y", rand_##type##2_0 .y);                               \
+    rsDebug("v2.x", rand_##type##2_1 .x);                               \
+    rsDebug("v2.y", rand_##type##2_1 .y);                               \
+    rsDebug("Dalvik result .x", func##_rand_##type##2_##type##2 .x);    \
+    rsDebug("Dalvik result .y", func##_rand_##type##2_##type##2 .y);    \
+    rsDebug("Renderscript result .x", temp_##type##2 .x);               \
+    rsDebug("Renderscript result .y", temp_##type##2 .y);               \
+    failed = true;                                                      \
+}
+#define TEST_VEC3_VEC3(func, type)                                      \
+temp_##type##3 = func( rand_##type##3_0, rand_##type##3_1 );            \
+if (temp_##type##3 .x != func##_rand_##type##3_##type##3 .x             \
+        || temp_##type##3 .y != func##_rand_##type##3_##type##3 .y      \
+        || temp_##type##3 .z != func##_rand_##type##3_##type##3 .z) {   \
+    rsDebug(#func " " #type "3 operation did not match!", 0);           \
+    rsDebug("v1.x", rand_##type##3_0 .x);                               \
+    rsDebug("v1.y", rand_##type##3_0 .y);                               \
+    rsDebug("v1.z", rand_##type##3_0 .z);                               \
+    rsDebug("v2.x", rand_##type##3_1 .x);                               \
+    rsDebug("v2.y", rand_##type##3_1 .y);                               \
+    rsDebug("v2.z", rand_##type##3_1 .z);                               \
+    rsDebug("Dalvik result .x", func##_rand_##type##3_##type##3 .x);    \
+    rsDebug("Dalvik result .y", func##_rand_##type##3_##type##3 .y);    \
+    rsDebug("Dalvik result .z", func##_rand_##type##3_##type##3 .z);    \
+    rsDebug("Renderscript result .x", temp_##type##3 .x);               \
+    rsDebug("Renderscript result .y", temp_##type##3 .y);               \
+    rsDebug("Renderscript result .z", temp_##type##3 .z);               \
+    failed = true;                                                      \
+}
+#define TEST_VEC4_VEC4(func, type)                                      \
+temp_##type##4 = func( rand_##type##4_0, rand_##type##4_1 );            \
+if (temp_##type##4 .x != func##_rand_##type##4_##type##4 .x             \
+        || temp_##type##4 .y != func##_rand_##type##4_##type##4 .y      \
+        || temp_##type##4 .z != func##_rand_##type##4_##type##4 .z      \
+        || temp_##type##4 .w != func##_rand_##type##4_##type##4 .w) {   \
+    rsDebug(#func " " #type "4 operation did not match!", 0);           \
+    rsDebug("v1.x", rand_##type##4_0 .x);                               \
+    rsDebug("v1.y", rand_##type##4_0 .y);                               \
+    rsDebug("v1.z", rand_##type##4_0 .z);                               \
+    rsDebug("v1.w", rand_##type##4_0 .w);                               \
+    rsDebug("v2.x", rand_##type##4_1 .x);                               \
+    rsDebug("v2.y", rand_##type##4_1 .y);                               \
+    rsDebug("v2.z", rand_##type##4_1 .z);                               \
+    rsDebug("v2.w", rand_##type##4_1 .w);                               \
+    rsDebug("Dalvik result .x", func##_rand_##type##4_##type##4 .x);    \
+    rsDebug("Dalvik result .y", func##_rand_##type##4_##type##4 .y);    \
+    rsDebug("Dalvik result .z", func##_rand_##type##4_##type##4 .z);    \
+    rsDebug("Dalvik result .w", func##_rand_##type##4_##type##4 .w);    \
+    rsDebug("Renderscript result .x", temp_##type##4 .x);               \
+    rsDebug("Renderscript result .y", temp_##type##4 .y);               \
+    rsDebug("Renderscript result .z", temp_##type##4 .z);               \
+    rsDebug("Renderscript result .w", temp_##type##4 .w);               \
+    failed = true;                                                      \
+}
+
+#define TEST_SC1_SC1(func)  TEST_VEC1_VEC1(func, sc)
+#define TEST_SC2_SC2(func)  TEST_VEC2_VEC2(func, sc)
+#define TEST_SC3_SC3(func)  TEST_VEC3_VEC3(func, sc)
+#define TEST_SC4_SC4(func)  TEST_VEC4_VEC4(func, sc)
+
+#define TEST_UC1_UC1(func)  TEST_VEC1_VEC1(func, uc)
+#define TEST_UC2_UC2(func)  TEST_VEC2_VEC2(func, uc)
+#define TEST_UC3_UC3(func)  TEST_VEC3_VEC3(func, uc)
+#define TEST_UC4_UC4(func)  TEST_VEC4_VEC4(func, uc)
+
+#define TEST_SS1_SS1(func)  TEST_VEC1_VEC1(func, ss)
+#define TEST_SS2_SS2(func)  TEST_VEC2_VEC2(func, ss)
+#define TEST_SS3_SS3(func)  TEST_VEC3_VEC3(func, ss)
+#define TEST_SS4_SS4(func)  TEST_VEC4_VEC4(func, ss)
+
+#define TEST_US1_US1(func)  TEST_VEC1_VEC1(func, us)
+#define TEST_US2_US2(func)  TEST_VEC2_VEC2(func, us)
+#define TEST_US3_US3(func)  TEST_VEC3_VEC3(func, us)
+#define TEST_US4_US4(func)  TEST_VEC4_VEC4(func, us)
+
+#define TEST_SI1_SI1(func)  TEST_VEC1_VEC1(func, si)
+#define TEST_SI2_SI2(func)  TEST_VEC2_VEC2(func, si)
+#define TEST_SI3_SI3(func)  TEST_VEC3_VEC3(func, si)
+#define TEST_SI4_SI4(func)  TEST_VEC4_VEC4(func, si)
+
+#define TEST_UI1_UI1(func)  TEST_VEC1_VEC1(func, ui)
+#define TEST_UI2_UI2(func)  TEST_VEC2_VEC2(func, ui)
+#define TEST_UI3_UI3(func)  TEST_VEC3_VEC3(func, ui)
+#define TEST_UI4_UI4(func)  TEST_VEC4_VEC4(func, ui)
+
+#define TEST_SL1_SL1(func)  TEST_VEC1_VEC1(func, sl)
+#define TEST_SL2_SL2(func)  TEST_VEC2_VEC2(func, sl)
+#define TEST_SL3_SL3(func)  TEST_VEC3_VEC3(func, sl)
+#define TEST_SL4_SL4(func)  TEST_VEC4_VEC4(func, sl)
+
+#define TEST_UL1_UL1(func)  TEST_VEC1_VEC1(func, ul)
+#define TEST_UL2_UL2(func)  TEST_VEC2_VEC2(func, ul)
+#define TEST_UL3_UL3(func)  TEST_VEC3_VEC3(func, ul)
+#define TEST_UL4_UL4(func)  TEST_VEC4_VEC4(func, ul)
+
+#define TEST_SC_SC_ALL(func)    \
+TEST_SC1_SC1(func)              \
+TEST_SC2_SC2(func)              \
+TEST_SC3_SC3(func)              \
+TEST_SC4_SC4(func)
+#define TEST_UC_UC_ALL(func)    \
+TEST_UC1_UC1(func)              \
+TEST_UC2_UC2(func)              \
+TEST_UC3_UC3(func)              \
+TEST_UC4_UC4(func)
+
+#define TEST_SS_SS_ALL(func)    \
+TEST_SS1_SS1(func)              \
+TEST_SS2_SS2(func)              \
+TEST_SS3_SS3(func)              \
+TEST_SS4_SS4(func)
+#define TEST_US_US_ALL(func)    \
+TEST_US1_US1(func)              \
+TEST_US2_US2(func)              \
+TEST_US3_US3(func)              \
+TEST_US4_US4(func)
+#define TEST_SI_SI_ALL(func)    \
+TEST_SI1_SI1(func)              \
+TEST_SI2_SI2(func)              \
+TEST_SI3_SI3(func)              \
+TEST_SI4_SI4(func)
+#define TEST_UI_UI_ALL(func)    \
+TEST_UI1_UI1(func)              \
+TEST_UI2_UI2(func)              \
+TEST_UI3_UI3(func)              \
+TEST_UI4_UI4(func)
+#define TEST_SL_SL_ALL(func)    \
+TEST_SL1_SL1(func)              \
+TEST_SL2_SL2(func)              \
+TEST_SL3_SL3(func)              \
+TEST_SL4_SL4(func)
+#define TEST_UL_UL_ALL(func)    \
+TEST_UL1_UL1(func)              \
+TEST_UL2_UL2(func)              \
+TEST_UL3_UL3(func)              \
+TEST_UL4_UL4(func)
+
+#define TEST_VEC_VEC_ALL(func)  \
+TEST_FN_FN_ALL(func)            \
+TEST_SC_SC_ALL(func)            \
+TEST_UC_UC_ALL(func)            \
+TEST_SS_SS_ALL(func)            \
+TEST_US_US_ALL(func)            \
+TEST_SI_SI_ALL(func)            \
+TEST_UI_UI_ALL(func)
+
+// TODO:  add long types to ALL macro
+#if 0
+TEST_SL_SL_ALL(func)            \
+TEST_UL_UL_ALL(func)
+#endif
+
+#define DECLARE_TEMP_SET(type, abbrev)  \
+volatile type    temp_##abbrev##1;               \
+volatile type##2 temp_##abbrev##2;               \
+volatile type##3 temp_##abbrev##3;               \
+volatile type##4 temp_##abbrev##4;
+
+#define DECLARE_ALL_TEMP_SETS() \
+DECLARE_TEMP_SET(float, f);     \
+DECLARE_TEMP_SET(char, sc);     \
+DECLARE_TEMP_SET(uchar, uc);    \
+DECLARE_TEMP_SET(short, ss);    \
+DECLARE_TEMP_SET(ushort, us);   \
+DECLARE_TEMP_SET(int, si);      \
+DECLARE_TEMP_SET(uint, ui);     \
+DECLARE_TEMP_SET(long, sl);     \
+DECLARE_TEMP_SET(ulong, ul);
+
+static bool test_math_agree() {
+    bool failed = false;
+
+    DECLARE_ALL_TEMP_SETS();
+
+    TEST_BASIC_FLOAT_OP(+, add);
+    TEST_BASIC_FLOAT_OP(-, sub);
+    TEST_BASIC_FLOAT_OP(*, mul);
+    TEST_BASIC_FLOAT_OP(/, div);
+
+    TEST_VEC_VEC_ALL(min);
+    TEST_VEC_VEC_ALL(max);
+    TEST_FN_FN_ALL(fmin);
+    TEST_FN_F_ALL(fmin);
+    TEST_FN_FN_ALL(fmax);
+    TEST_FN_F_ALL(fmax);
+
+    if (failed) {
+        rsDebug("test_math_agree FAILED", 0);
+    }
+    else {
+        rsDebug("test_math_agree PASSED", 0);
+    }
+
+    return failed;
+}
+
+void math_agree_test() {
+    bool failed = false;
+    failed |= test_math_agree();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math_conformance.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math_conformance.rs
new file mode 100644
index 0000000..2d62f34
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/math_conformance.rs
@@ -0,0 +1,57 @@
+#include "shared.rsh"
+
+// Testing math conformance
+
+static bool test_rootn() {
+    bool failed = false;
+
+    // rootn(x, 0) -> NaN
+    _RS_ASSERT(isnan(rootn(1.0f, 0)));
+
+    // rootn(+/-0, n) -> +/-inf for odd n < 0
+    _RS_ASSERT(isposinf(rootn(0.f, -3)));
+    _RS_ASSERT(isneginf(rootn(-0.f, -3)));
+
+    // rootn(+/-0, n) -> +inf for even n < 0
+    _RS_ASSERT(isposinf(rootn(0.f, -8)));
+    _RS_ASSERT(isposinf(rootn(-0.f, -8)));
+
+    // rootn(+/-0, n) -> +/-0 for odd n > 0
+    _RS_ASSERT(isposzero(rootn(0.f, 3)));
+    _RS_ASSERT(isnegzero(rootn(-0.f, 3)));
+
+    // rootn(+/-0, n) -> +0 for even n > 0
+    _RS_ASSERT(isposzero(rootn(0.f, 8)));
+    _RS_ASSERT(isposzero(rootn(-0.f, 8)));
+
+    // rootn(x, n) -> NaN for x < 0 and even n
+    _RS_ASSERT(isnan(rootn(-10000.f, -4)));
+    _RS_ASSERT(isnan(rootn(-10000.f, 4)));
+
+    // rootn(x, n) -> value for x < 0 and odd n
+    _RS_ASSERT(!isnan(rootn(-10000.f, -3)));
+    _RS_ASSERT(!isnan(rootn(-10000.f, 3)));
+
+    if (failed) {
+        rsDebug("test_rootn FAILED", -1);
+    }
+    else {
+        rsDebug("test_rootn PASSED", 0);
+    }
+
+    return failed;
+}
+
+void math_conformance_test() {
+    bool failed = false;
+    failed |= test_rootn();
+
+    if (failed) {
+        rsDebug("math_conformance_test FAILED", -1);
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsDebug("math_conformance_test PASSED", 0);
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/min.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/min.rs
new file mode 100644
index 0000000..4b92763
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/min.rs
@@ -0,0 +1,20 @@
+#include "shared.rsh"
+#pragma rs_fp_relaxed
+
+volatile uchar2 res_uc_2 = 1;
+volatile uchar2 src1_uc_2 = 1;
+volatile uchar2 src2_uc_2 = 1;
+
+void min_test() {
+    bool failed = false;
+
+    res_uc_2 = min(src1_uc_2, src2_uc_2);
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/noroot.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/noroot.rs
new file mode 100644
index 0000000..33944aa
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/noroot.rs
@@ -0,0 +1,44 @@
+#include "shared.rsh"
+
+int *a;
+int dimX;
+int dimY;
+static bool failed = false;
+
+void foo(const int *in, int *out, uint32_t x, uint32_t y) {
+    *out = 99 + x + y * dimX;
+}
+
+static bool test_foo_output() {
+    bool failed = false;
+    int i, j;
+
+    for (j = 0; j < dimY; j++) {
+        for (i = 0; i < dimX; i++) {
+            _RS_ASSERT(a[i + j * dimX] == (99 + i + j * dimX));
+        }
+    }
+
+    if (failed) {
+        rsDebug("test_foo_output FAILED", 0);
+    }
+    else {
+        rsDebug("test_foo_output PASSED", 0);
+    }
+
+    return failed;
+}
+
+void verify_foo() {
+    failed |= test_foo_output();
+}
+
+void noroot_test() {
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/primitives.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/primitives.rs
new file mode 100644
index 0000000..ce451da
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/primitives.rs
@@ -0,0 +1,61 @@
+#include "shared.rsh"
+
+// Testing primitive types
+float floatTest = 1.99f;
+double doubleTest = 2.05;
+char charTest = -8;
+short shortTest = -16;
+int intTest = -32;
+long longTest = 17179869184l; // 1 << 34
+long long longlongTest = 68719476736l; // 1 << 36
+
+uchar ucharTest = 8;
+ushort ushortTest = 16;
+uint uintTest = 32;
+ulong ulongTest = 4611686018427387904L;
+int64_t int64_tTest = -17179869184l; // - 1 << 34
+uint64_t uint64_tTest = 117179869184l;
+
+static bool test_primitive_types(uint32_t index) {
+    bool failed = false;
+    start();
+
+    _RS_ASSERT(floatTest == 2.99f);
+    _RS_ASSERT(doubleTest == 3.05);
+    _RS_ASSERT(charTest == -16);
+    _RS_ASSERT(shortTest == -32);
+    _RS_ASSERT(intTest == -64);
+    _RS_ASSERT(longTest == 17179869185l);
+    _RS_ASSERT(longlongTest == 68719476735l);
+
+    _RS_ASSERT(ucharTest == 8);
+    _RS_ASSERT(ushortTest == 16);
+    _RS_ASSERT(uintTest == 32);
+    _RS_ASSERT(ulongTest == 4611686018427387903L);
+    _RS_ASSERT(int64_tTest == -17179869184l);
+    _RS_ASSERT(uint64_tTest == 117179869185l);
+
+    float time = end(index);
+
+    if (failed) {
+        rsDebug("test_primitives FAILED", time);
+    }
+    else {
+        rsDebug("test_primitives PASSED", time);
+    }
+
+    return failed;
+}
+
+void primitives_test(uint32_t index, int test_num) {
+    bool failed = false;
+    failed |= test_primitive_types(index);
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/refcount.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/refcount.rs
new file mode 100644
index 0000000..4ea70e2
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/refcount.rs
@@ -0,0 +1,13 @@
+#include "shared.rsh"
+
+// Testing reference counting of RS object types
+
+rs_allocation globalA;
+static rs_allocation staticGlobalA;
+
+void refcount_test() {
+    staticGlobalA = globalA;
+    rsClearObject(&globalA);
+    rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rsdebug.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rsdebug.rs
new file mode 100644
index 0000000..68ac168
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rsdebug.rs
@@ -0,0 +1,62 @@
+#include "shared.rsh"
+
+// Testing primitive types
+float floatTest = 1.99f;
+float2 float2Test = {2.99f, 12.99f};
+float3 float3Test = {3.99f, 13.99f, 23.99f};
+float4 float4Test = {4.99f, 14.99f, 24.99f, 34.99f};
+double doubleTest = 2.05;
+char charTest = -8;
+short shortTest = -16;
+int intTest = -32;
+long longTest = 17179869184l; // 1 << 34
+long long longlongTest = 68719476736l; // 1 << 36
+
+uchar ucharTest = 8;
+ushort ushortTest = 16;
+uint uintTest = 32;
+ulong ulongTest = 4611686018427387904L;
+int64_t int64_tTest = -17179869184l; // - 1 << 34
+uint64_t uint64_tTest = 117179869184l;
+
+static bool basic_test(uint32_t index) {
+    bool failed = false;
+
+    // This test focuses primarily on compilation-time, not run-time.
+    // For this reason, none of the outputs are actually checked.
+
+    rsDebug("floatTest", floatTest);
+    rsDebug("float2Test", float2Test);
+    rsDebug("float3Test", float3Test);
+    rsDebug("float4Test", float4Test);
+    rsDebug("doubleTest", doubleTest);
+    rsDebug("charTest", charTest);
+    rsDebug("shortTest", shortTest);
+    rsDebug("intTest", intTest);
+    rsDebug("longTest", longTest);
+    rsDebug("longlongTest", longlongTest);
+
+    rsDebug("ucharTest", ucharTest);
+    rsDebug("ushortTest", ushortTest);
+    rsDebug("uintTest", uintTest);
+    rsDebug("ulongTest", ulongTest);
+    rsDebug("int64_tTest", int64_tTest);
+    rsDebug("uint64_tTest", uint64_tTest);
+
+    return failed;
+}
+
+void test_rsdebug(uint32_t index, int test_num) {
+    bool failed = false;
+    failed |= basic_test(index);
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+        rsDebug("rsdebug_test FAILED", -1);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+        rsDebug("rsdebug_test PASSED", 0);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rslist.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rslist.rs
new file mode 100644
index 0000000..650243e
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rslist.rs
@@ -0,0 +1,25 @@
+// 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.
+
+#pragma version(1)
+
+#pragma rs java_package_name(com.android.rs.test_compat)
+
+typedef struct ListAllocs_s {
+    rs_allocation text;
+    int result;
+} ListAllocs;
+
+ListAllocs *gList;
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rstime.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rstime.rs
new file mode 100644
index 0000000..7be955d
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rstime.rs
@@ -0,0 +1,52 @@
+#include "shared.rsh"
+
+static bool basic_test(uint32_t index) {
+    bool failed = false;
+
+    rs_time_t curTime = rsTime(0);
+    rs_tm tm;
+    rsDebug("curTime", curTime);
+
+    rsLocaltime(&tm, &curTime);
+
+    rsDebug("tm.tm_sec", tm.tm_sec);
+    rsDebug("tm.tm_min", tm.tm_min);
+    rsDebug("tm.tm_hour", tm.tm_hour);
+    rsDebug("tm.tm_mday", tm.tm_mday);
+    rsDebug("tm.tm_mon", tm.tm_mon);
+    rsDebug("tm.tm_year", tm.tm_year);
+    rsDebug("tm.tm_wday", tm.tm_wday);
+    rsDebug("tm.tm_yday", tm.tm_yday);
+    rsDebug("tm.tm_isdst", tm.tm_isdst);
+
+    // Test a specific time (since we set America/Los_Angeles localtime)
+    curTime = 1294438893;
+    rsLocaltime(&tm, &curTime);
+
+    _RS_ASSERT(tm.tm_sec == 33);
+    _RS_ASSERT(tm.tm_min == 21);
+    _RS_ASSERT(tm.tm_hour == 14);
+    _RS_ASSERT(tm.tm_mday == 7);
+    _RS_ASSERT(tm.tm_mon == 0);
+    _RS_ASSERT(tm.tm_year == 111);
+    _RS_ASSERT(tm.tm_wday == 5);
+    _RS_ASSERT(tm.tm_yday == 6);
+    _RS_ASSERT(tm.tm_isdst == 0);
+
+    return failed;
+}
+
+void test_rstime(uint32_t index, int test_num) {
+    bool failed = false;
+    failed |= basic_test(index);
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+        rsDebug("rstime_test FAILED", -1);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+        rsDebug("rstime_test PASSED", 0);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rstypes.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rstypes.rs
new file mode 100644
index 0000000..bec124d
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/rstypes.rs
@@ -0,0 +1,61 @@
+#include "shared.rsh"
+#include "rs_graphics.rsh"
+
+rs_element elementTest;
+rs_type typeTest;
+rs_allocation allocationTest;
+rs_sampler samplerTest;
+rs_script scriptTest;
+
+rs_matrix4x4 matrix4x4Test;
+rs_matrix3x3 matrix3x3Test;
+rs_matrix2x2 matrix2x2Test;
+
+struct my_struct {
+    int i;
+    rs_allocation banana;
+};
+
+static bool basic_test(uint32_t index) {
+    bool failed = false;
+
+    rs_matrix4x4 matrix4x4TestLocal;
+    rs_matrix3x3 matrix3x3TestLocal;
+    rs_matrix2x2 matrix2x2TestLocal;
+
+    // This test focuses primarily on compilation-time, not run-time.
+    rs_element elementTestLocal;
+    rs_type typeTestLocal;
+    rs_allocation allocationTestLocal;
+    rs_sampler samplerTestLocal;
+    rs_script scriptTestLocal;
+
+    struct my_struct structTest;
+
+    //allocationTestLocal = allocationTest;
+
+    //allocationTest = allocationTestLocal;
+
+    /*for (int i = 0; i < 4; i++) {
+        fontTestLocalArray[i] = fontTestLocal;
+    }*/
+
+    /*fontTest = fontTestLocalArray[3];*/
+
+    return failed;
+}
+
+void test_rstypes(uint32_t index, int test_num) {
+    bool failed = false;
+    failed |= basic_test(index);
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+        rsDebug("rstypes_test FAILED", -1);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+        rsDebug("rstypes_test PASSED", 0);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/sampler.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/sampler.rs
new file mode 100644
index 0000000..ff1c0a7
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/sampler.rs
@@ -0,0 +1,63 @@
+#include "shared.rsh"
+#include "rs_graphics.rsh"
+rs_sampler minification;
+rs_sampler magnification;
+rs_sampler wrapS;
+rs_sampler wrapT;
+rs_sampler anisotropy;
+
+static bool test_sampler_getters() {
+    bool failed = false;
+
+    _RS_ASSERT(rsSamplerGetMagnification(minification) == RS_SAMPLER_NEAREST);
+    _RS_ASSERT(rsSamplerGetMinification(minification) == RS_SAMPLER_LINEAR_MIP_LINEAR);
+    _RS_ASSERT(rsSamplerGetWrapS(minification) == RS_SAMPLER_CLAMP);
+    _RS_ASSERT(rsSamplerGetWrapT(minification) == RS_SAMPLER_CLAMP);
+    _RS_ASSERT(rsSamplerGetAnisotropy(minification) == 1.0f);
+
+    _RS_ASSERT(rsSamplerGetMagnification(magnification) == RS_SAMPLER_LINEAR);
+    _RS_ASSERT(rsSamplerGetMinification(magnification) == RS_SAMPLER_NEAREST);
+    _RS_ASSERT(rsSamplerGetWrapS(magnification) == RS_SAMPLER_CLAMP);
+    _RS_ASSERT(rsSamplerGetWrapT(magnification) == RS_SAMPLER_CLAMP);
+    _RS_ASSERT(rsSamplerGetAnisotropy(magnification) == 1.0f);
+
+    _RS_ASSERT(rsSamplerGetMagnification(wrapS) == RS_SAMPLER_NEAREST);
+    _RS_ASSERT(rsSamplerGetMinification(wrapS) == RS_SAMPLER_NEAREST);
+    _RS_ASSERT(rsSamplerGetWrapS(wrapS) == RS_SAMPLER_WRAP);
+    _RS_ASSERT(rsSamplerGetWrapT(wrapS) == RS_SAMPLER_CLAMP);
+    _RS_ASSERT(rsSamplerGetAnisotropy(wrapS) == 1.0f);
+
+    _RS_ASSERT(rsSamplerGetMagnification(wrapT) == RS_SAMPLER_NEAREST);
+    _RS_ASSERT(rsSamplerGetMinification(wrapT) == RS_SAMPLER_NEAREST);
+    _RS_ASSERT(rsSamplerGetWrapS(wrapT) == RS_SAMPLER_CLAMP);
+    _RS_ASSERT(rsSamplerGetWrapT(wrapT) == RS_SAMPLER_WRAP);
+    _RS_ASSERT(rsSamplerGetAnisotropy(wrapT) == 1.0f);
+
+    _RS_ASSERT(rsSamplerGetMagnification(anisotropy) == RS_SAMPLER_NEAREST);
+    _RS_ASSERT(rsSamplerGetMinification(anisotropy) == RS_SAMPLER_NEAREST);
+    _RS_ASSERT(rsSamplerGetWrapS(anisotropy) == RS_SAMPLER_CLAMP);
+    _RS_ASSERT(rsSamplerGetWrapT(anisotropy) == RS_SAMPLER_CLAMP);
+    _RS_ASSERT(rsSamplerGetAnisotropy(anisotropy) == 8.0f);
+
+    if (failed) {
+        rsDebug("test_sampler_getters FAILED", 0);
+    }
+    else {
+        rsDebug("test_sampler_getters PASSED", 0);
+    }
+
+    return failed;
+}
+
+void sampler_test() {
+    bool failed = false;
+    failed |= test_sampler_getters();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/shared.rsh b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/shared.rsh
new file mode 100644
index 0000000..b05a354
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/shared.rsh
@@ -0,0 +1,114 @@
+#pragma version(1)
+
+#pragma rs java_package_name(com.android.rs.test_compat)
+
+typedef struct TestResult_s {
+    rs_allocation name;
+    bool pass;
+    float score;
+    int64_t time;
+} TestResult;
+//TestResult *g_results;
+
+static int64_t g_time;
+
+static void start(void) {
+    g_time = rsUptimeMillis();
+}
+
+static float end(uint32_t idx) {
+    int64_t t = rsUptimeMillis() - g_time;
+    //g_results[idx].time = t;
+    //rsDebug("test time", (int)t);
+    return ((float)t) / 1000.f;
+}
+
+#define _RS_ASSERT(b) \
+do { \
+    if (!(b)) { \
+        failed = true; \
+        rsDebug(#b " FAILED", 0); \
+    } \
+\
+} while (0)
+
+static const int iposinf = 0x7f800000;
+static const int ineginf = 0xff800000;
+
+static const float posinf() {
+    float f = *((float*)&iposinf);
+    return f;
+}
+
+static const float neginf() {
+    float f = *((float*)&ineginf);
+    return f;
+}
+
+static bool isposinf(float f) {
+    int i = *((int*)(void*)&f);
+    return (i == iposinf);
+}
+
+static bool isneginf(float f) {
+    int i = *((int*)(void*)&f);
+    return (i == ineginf);
+}
+
+static bool isnan(float f) {
+    int i = *((int*)(void*)&f);
+    return (((i & 0x7f800000) == 0x7f800000) && (i & 0x007fffff));
+}
+
+static bool isposzero(float f) {
+    int i = *((int*)(void*)&f);
+    return (i == 0x00000000);
+}
+
+static bool isnegzero(float f) {
+    int i = *((int*)(void*)&f);
+    return (i == 0x80000000);
+}
+
+static bool iszero(float f) {
+    return isposzero(f) || isnegzero(f);
+}
+
+/* Absolute epsilon used for floats.  Value is similar to float.h. */
+#ifndef FLT_EPSILON
+#define FLT_EPSILON 1.19e7f
+#endif
+/* Max ULPs while still being considered "equal".  Only used when this number
+   of ULPs is of a greater size than FLT_EPSILON. */
+#define FLT_MAX_ULP 1
+
+/* Calculate the difference in ULPs between the two values.  (Return zero on
+   perfect equality.) */
+static int float_dist(float f1, float f2) {
+    return *((int *)(&f1)) - *((int *)(&f2));
+}
+
+/* Check if two floats are essentially equal.  Will fail with some values
+   due to design.  (Validate using FLT_EPSILON or similar if necessary.) */
+static bool float_almost_equal(float f1, float f2) {
+    int *i1 = (int*)(&f1);
+    int *i2 = (int*)(&f2);
+
+    // Check for sign equality
+    if ( ((*i1 >> 31) == 0) != ((*i2 >> 31) == 0) ) {
+        // Handle signed zeroes
+        if (f1 == f2)
+            return true;
+        return false;
+    }
+
+    // Check with ULP distance
+    if (float_dist(f1, f2) > FLT_MAX_ULP)
+        return false;
+    return true;
+}
+
+/* These constants must match those in UnitTest.java */
+static const int RS_MSG_TEST_PASSED = 100;
+static const int RS_MSG_TEST_FAILED = 101;
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/struct.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/struct.rs
new file mode 100644
index 0000000..1cd728e
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/struct.rs
@@ -0,0 +1,37 @@
+#include "shared.rsh"
+
+typedef struct Point2 {
+   int x;
+   int y;
+} Point_2;
+Point_2 *point2;
+
+static bool test_Point_2(int expected) {
+    bool failed = false;
+
+    rsDebug("Point: ", point2[0].x, point2[0].y);
+    _RS_ASSERT(point2[0].x == expected);
+    _RS_ASSERT(point2[0].y == expected);
+
+    if (failed) {
+        rsDebug("test_Point_2 FAILED", 0);
+    }
+    else {
+        rsDebug("test_Point_2 PASSED", 0);
+    }
+
+    return failed;
+}
+
+void struct_test(int expected) {
+    bool failed = false;
+    failed |= test_Point_2(expected);
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/test_root.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/test_root.rs
new file mode 100644
index 0000000..89e7de7
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/test_root.rs
@@ -0,0 +1,23 @@
+// Fountain test script
+#pragma version(1)
+
+#pragma rs java_package_name(com.android.rs.test_compat)
+
+#pragma stateFragment(parent)
+
+#include "rs_graphics.rsh"
+
+
+typedef struct TestResult {
+    rs_allocation name;
+    bool pass;
+    float score;
+} TestResult_t;
+TestResult_t *results;
+
+int root() {
+
+    return 0;
+}
+
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/unsigned.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/unsigned.rs
new file mode 100644
index 0000000..2c056f4
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/unsigned.rs
@@ -0,0 +1,36 @@
+#include "shared.rsh"
+
+// Testing unsigned types for Bug 6764163
+unsigned int ui = 37;
+unsigned char uc = 5;
+
+static bool test_unsigned() {
+    bool failed = false;
+
+    rsDebug("ui", ui);
+    rsDebug("uc", uc);
+    _RS_ASSERT(ui == 0x7fffffff);
+    _RS_ASSERT(uc == 129);
+
+    if (failed) {
+        rsDebug("test_unsigned FAILED", -1);
+    }
+    else {
+        rsDebug("test_unsigned PASSED", 0);
+    }
+
+    return failed;
+}
+
+void unsigned_test() {
+    bool failed = false;
+    failed |= test_unsigned();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/vector.rs b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/vector.rs
new file mode 100644
index 0000000..0430a2f
--- /dev/null
+++ b/tests/RenderScriptTests/RSTest_CompatLib/src/com/android/rs/test/vector.rs
@@ -0,0 +1,198 @@
+#include "shared.rsh"
+
+// Testing vector types
+float2 f2 = { 1.0f, 2.0f };
+float3 f3 = { 1.0f, 2.0f, 3.0f };
+float4 f4 = { 1.0f, 2.0f, 3.0f, 4.0f };
+
+double2 d2 = { 1.0, 2.0 };
+double3 d3 = { 1.0, 2.0, 3.0 };
+double4 d4 = { 1.0, 2.0, 3.0, 4.0 };
+
+char2 i8_2 = { 1, 2 };
+char3 i8_3 = { 1, 2, 3 };
+char4 i8_4 = { 1, 2, 3, 4 };
+
+uchar2 u8_2 = { 1, 2 };
+uchar3 u8_3 = { 1, 2, 3 };
+uchar4 u8_4 = { 1, 2, 3, 4 };
+
+short2 i16_2 = { 1, 2 };
+short3 i16_3 = { 1, 2, 3 };
+short4 i16_4 = { 1, 2, 3, 4 };
+
+ushort2 u16_2 = { 1, 2 };
+ushort3 u16_3 = { 1, 2, 3 };
+ushort4 u16_4 = { 1, 2, 3, 4 };
+
+int2 i32_2 = { 1, 2 };
+int3 i32_3 = { 1, 2, 3 };
+int4 i32_4 = { 1, 2, 3, 4 };
+
+uint2 u32_2 = { 1, 2 };
+uint3 u32_3 = { 1, 2, 3 };
+uint4 u32_4 = { 1, 2, 3, 4 };
+
+long2 i64_2 = { 1, 2 };
+long3 i64_3 = { 1, 2, 3 };
+long4 i64_4 = { 1, 2, 3, 4 };
+
+ulong2 u64_2 = { 1, 2 };
+ulong3 u64_3 = { 1, 2, 3 };
+ulong4 u64_4 = { 1, 2, 3, 4 };
+
+static bool test_vector_types() {
+    bool failed = false;
+
+    rsDebug("Testing F32", 0);
+    _RS_ASSERT(f2.x == 2.99f);
+    _RS_ASSERT(f2.y == 3.99f);
+
+    _RS_ASSERT(f3.x == 2.99f);
+    _RS_ASSERT(f3.y == 3.99f);
+    _RS_ASSERT(f3.z == 4.99f);
+
+    _RS_ASSERT(f4.x == 2.99f);
+    _RS_ASSERT(f4.y == 3.99f);
+    _RS_ASSERT(f4.z == 4.99f);
+    _RS_ASSERT(f4.w == 5.99f);
+
+    rsDebug("Testing F64", 0);
+    _RS_ASSERT(d2.x == 2.99);
+    _RS_ASSERT(d2.y == 3.99);
+
+    _RS_ASSERT(d3.x == 2.99);
+    _RS_ASSERT(d3.y == 3.99);
+    _RS_ASSERT(d3.z == 4.99);
+
+    _RS_ASSERT(d4.x == 2.99);
+    _RS_ASSERT(d4.y == 3.99);
+    _RS_ASSERT(d4.z == 4.99);
+    _RS_ASSERT(d4.w == 5.99);
+
+    rsDebug("Testing I8", 0);
+    _RS_ASSERT(i8_2.x == 2);
+    _RS_ASSERT(i8_2.y == 3);
+
+    _RS_ASSERT(i8_3.x == 2);
+    _RS_ASSERT(i8_3.y == 3);
+    _RS_ASSERT(i8_3.z == 4);
+
+    _RS_ASSERT(i8_4.x == 2);
+    _RS_ASSERT(i8_4.y == 3);
+    _RS_ASSERT(i8_4.z == 4);
+    _RS_ASSERT(i8_4.w == 5);
+
+    rsDebug("Testing U8", 0);
+    _RS_ASSERT(u8_2.x == 2);
+    _RS_ASSERT(u8_2.y == 3);
+
+    _RS_ASSERT(u8_3.x == 2);
+    _RS_ASSERT(u8_3.y == 3);
+    _RS_ASSERT(u8_3.z == 4);
+
+    _RS_ASSERT(u8_4.x == 2);
+    _RS_ASSERT(u8_4.y == 3);
+    _RS_ASSERT(u8_4.z == 4);
+    _RS_ASSERT(u8_4.w == 5);
+
+    rsDebug("Testing I16", 0);
+    _RS_ASSERT(i16_2.x == 2);
+    _RS_ASSERT(i16_2.y == 3);
+
+    _RS_ASSERT(i16_3.x == 2);
+    _RS_ASSERT(i16_3.y == 3);
+    _RS_ASSERT(i16_3.z == 4);
+
+    _RS_ASSERT(i16_4.x == 2);
+    _RS_ASSERT(i16_4.y == 3);
+    _RS_ASSERT(i16_4.z == 4);
+    _RS_ASSERT(i16_4.w == 5);
+
+    rsDebug("Testing U16", 0);
+    _RS_ASSERT(u16_2.x == 2);
+    _RS_ASSERT(u16_2.y == 3);
+
+    _RS_ASSERT(u16_3.x == 2);
+    _RS_ASSERT(u16_3.y == 3);
+    _RS_ASSERT(u16_3.z == 4);
+
+    _RS_ASSERT(u16_4.x == 2);
+    _RS_ASSERT(u16_4.y == 3);
+    _RS_ASSERT(u16_4.z == 4);
+    _RS_ASSERT(u16_4.w == 5);
+
+    rsDebug("Testing I32", 0);
+    _RS_ASSERT(i32_2.x == 2);
+    _RS_ASSERT(i32_2.y == 3);
+
+    _RS_ASSERT(i32_3.x == 2);
+    _RS_ASSERT(i32_3.y == 3);
+    _RS_ASSERT(i32_3.z == 4);
+
+    _RS_ASSERT(i32_4.x == 2);
+    _RS_ASSERT(i32_4.y == 3);
+    _RS_ASSERT(i32_4.z == 4);
+    _RS_ASSERT(i32_4.w == 5);
+
+    rsDebug("Testing U32", 0);
+    _RS_ASSERT(u32_2.x == 2);
+    _RS_ASSERT(u32_2.y == 3);
+
+    _RS_ASSERT(u32_3.x == 2);
+    _RS_ASSERT(u32_3.y == 3);
+    _RS_ASSERT(u32_3.z == 4);
+
+    _RS_ASSERT(u32_4.x == 2);
+    _RS_ASSERT(u32_4.y == 3);
+    _RS_ASSERT(u32_4.z == 4);
+    _RS_ASSERT(u32_4.w == 5);
+
+    rsDebug("Testing I64", 0);
+    _RS_ASSERT(i64_2.x == 2);
+    _RS_ASSERT(i64_2.y == 3);
+
+    _RS_ASSERT(i64_3.x == 2);
+    _RS_ASSERT(i64_3.y == 3);
+    _RS_ASSERT(i64_3.z == 4);
+
+    _RS_ASSERT(i64_4.x == 2);
+    _RS_ASSERT(i64_4.y == 3);
+    _RS_ASSERT(i64_4.z == 4);
+    _RS_ASSERT(i64_4.w == 5);
+
+    rsDebug("Testing U64", 0);
+    _RS_ASSERT(u64_2.x == 2);
+    _RS_ASSERT(u64_2.y == 3);
+
+    _RS_ASSERT(u64_3.x == 2);
+    _RS_ASSERT(u64_3.y == 3);
+    _RS_ASSERT(u64_3.z == 4);
+
+    _RS_ASSERT(u64_4.x == 2);
+    _RS_ASSERT(u64_4.y == 3);
+    _RS_ASSERT(u64_4.z == 4);
+    _RS_ASSERT(u64_4.w == 5);
+
+    if (failed) {
+        rsDebug("test_vector FAILED", 0);
+    }
+    else {
+        rsDebug("test_vector PASSED", 0);
+    }
+
+    return failed;
+}
+
+void vector_test() {
+    bool failed = false;
+    failed |= test_vector_types();
+
+    if (failed) {
+        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+    }
+    else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
index ec39aab..4345098 100644
--- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
+++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
@@ -796,6 +796,7 @@
                     INotificationManager directLine = mNM.getService();
                     directLine.enqueueNotificationWithTag(
                             getPackageName(),
+                            getPackageName(),
                             null, 
                             100, 
                             n,
@@ -821,7 +822,8 @@
                     INotificationManager directLine = mNM.getService();
                     directLine.enqueueNotificationWithTag(
                             getPackageName(),
-                            null, 
+                            getPackageName(),
+                            null,
                             200, 
                             n,
                             idOut,
@@ -846,7 +848,8 @@
                     INotificationManager directLine = mNM.getService();
                     directLine.enqueueNotificationWithTag(
                             getPackageName(),
-                            null, 
+                            getPackageName(),
+                            null,
                             1, 
                             n,
                             idOut,
diff --git a/tests/permission/src/com/android/framework/permission/tests/VibratorServicePermissionTest.java b/tests/permission/src/com/android/framework/permission/tests/VibratorServicePermissionTest.java
index 2416828..90b6abc 100644
--- a/tests/permission/src/com/android/framework/permission/tests/VibratorServicePermissionTest.java
+++ b/tests/permission/src/com/android/framework/permission/tests/VibratorServicePermissionTest.java
@@ -20,6 +20,7 @@
 
 import android.os.Binder;
 import android.os.IVibratorService;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.test.suitebuilder.annotation.SmallTest;
@@ -46,7 +47,7 @@
      */
     public void testVibrate() throws RemoteException {
         try {
-            mVibratorService.vibrate(null, 2000, new Binder());
+            mVibratorService.vibrate(Process.myUid(), null, 2000, new Binder());
             fail("vibrate did not throw SecurityException as expected");
         } catch (SecurityException e) {
             // expected
@@ -62,7 +63,7 @@
      */
     public void testVibratePattern() throws RemoteException {
         try {
-            mVibratorService.vibratePattern(null, new long[] {0}, 0, new Binder());
+            mVibratorService.vibratePattern(Process.myUid(), null, new long[] {0}, 0, new Binder());
             fail("vibratePattern did not throw SecurityException as expected");
         } catch (SecurityException e) {
             // expected
diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
index 2414d70..8701cc8 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
@@ -188,11 +188,6 @@
         return delegate.mStyle;
     }
 
-    @LayoutlibDelegate
-    /*package*/ static void setGammaForText(float blackGamma, float whiteGamma) {
-        // This is for device testing only: pass
-    }
-
     // ---- Private delegate/helper methods ----
 
     private Typeface_Delegate(String family, int style) {
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index f012bcb..9f116fc 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -487,4 +487,10 @@
         // TODO Auto-generated method stub
         return null;
     }
+
+    @Override
+    public boolean isRotationFrozen() throws RemoteException {
+        // TODO Auto-generated method stub
+        return false;
+    }
 }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index e682da7..8b643c0 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -1206,6 +1206,11 @@
     }
 
     @Override
+    public void sendBroadcast(Intent intent, String receiverPermission, int appOp) {
+        // pass
+    }
+
+    @Override
     public void sendOrderedBroadcast(Intent arg0, String arg1) {
         // pass
 
@@ -1220,6 +1225,13 @@
     }
 
     @Override
+    public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp,
+            BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
+            String initialData, Bundle initialExtras) {
+        // pass
+    }
+
+    @Override
     public void sendBroadcastAsUser(Intent intent, UserHandle user) {
         // pass
     }
diff --git a/voip/java/android/net/rtp/AudioCodec.java b/voip/java/android/net/rtp/AudioCodec.java
deleted file mode 100644
index 85255c8..0000000
--- a/voip/java/android/net/rtp/AudioCodec.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.rtp;
-
-import java.util.Arrays;
-
-/**
- * This class defines a collection of audio codecs to be used with
- * {@link AudioStream}s. Their parameters are designed to be exchanged using
- * Session Description Protocol (SDP). Most of the values listed here can be
- * found in RFC 3551, while others are described in separated standards.
- *
- * <p>Few simple configurations are defined as public static instances for the
- * convenience of direct uses. More complicated ones could be obtained using
- * {@link #getCodec(int, String, String)}. For example, one can use the
- * following snippet to create a mode-1-only AMR codec.</p>
- * <pre>
- * AudioCodec codec = AudioCodec.getCodec(100, "AMR/8000", "mode-set=1");
- * </pre>
- *
- * @see AudioStream
- */
-public class AudioCodec {
-    /**
-     * The RTP payload type of the encoding.
-     */
-    public final int type;
-
-    /**
-     * The encoding parameters to be used in the corresponding SDP attribute.
-     */
-    public final String rtpmap;
-
-    /**
-     * The format parameters to be used in the corresponding SDP attribute.
-     */
-    public final String fmtp;
-
-    /**
-     * G.711 u-law audio codec.
-     */
-    public static final AudioCodec PCMU = new AudioCodec(0, "PCMU/8000", null);
-
-    /**
-     * G.711 a-law audio codec.
-     */
-    public static final AudioCodec PCMA = new AudioCodec(8, "PCMA/8000", null);
-
-    /**
-     * GSM Full-Rate audio codec, also known as GSM-FR, GSM 06.10, GSM, or
-     * simply FR.
-     */
-    public static final AudioCodec GSM = new AudioCodec(3, "GSM/8000", null);
-
-    /**
-     * GSM Enhanced Full-Rate audio codec, also known as GSM-EFR, GSM 06.60, or
-     * simply EFR.
-     */
-    public static final AudioCodec GSM_EFR = new AudioCodec(96, "GSM-EFR/8000", null);
-
-    /**
-     * Adaptive Multi-Rate narrowband audio codec, also known as AMR or AMR-NB.
-     * Currently CRC, robust sorting, and interleaving are not supported. See
-     * more details about these features in RFC 4867.
-     */
-    public static final AudioCodec AMR = new AudioCodec(97, "AMR/8000", null);
-
-    private static final AudioCodec[] sCodecs = {GSM_EFR, AMR, GSM, PCMU, PCMA};
-
-    private AudioCodec(int type, String rtpmap, String fmtp) {
-        this.type = type;
-        this.rtpmap = rtpmap;
-        this.fmtp = fmtp;
-    }
-
-    /**
-     * Returns system supported audio codecs.
-     */
-    public static AudioCodec[] getCodecs() {
-        return Arrays.copyOf(sCodecs, sCodecs.length);
-    }
-
-    /**
-     * Creates an AudioCodec according to the given configuration.
-     *
-     * @param type The payload type of the encoding defined in RTP/AVP.
-     * @param rtpmap The encoding parameters specified in the corresponding SDP
-     *     attribute, or null if it is not available.
-     * @param fmtp The format parameters specified in the corresponding SDP
-     *     attribute, or null if it is not available.
-     * @return The configured AudioCodec or {@code null} if it is not supported.
-     */
-    public static AudioCodec getCodec(int type, String rtpmap, String fmtp) {
-        if (type < 0 || type > 127) {
-            return null;
-        }
-
-        AudioCodec hint = null;
-        if (rtpmap != null) {
-            String clue = rtpmap.trim().toUpperCase();
-            for (AudioCodec codec : sCodecs) {
-                if (clue.startsWith(codec.rtpmap)) {
-                    String channels = clue.substring(codec.rtpmap.length());
-                    if (channels.length() == 0 || channels.equals("/1")) {
-                        hint = codec;
-                    }
-                    break;
-                }
-            }
-        } else if (type < 96) {
-            for (AudioCodec codec : sCodecs) {
-                if (type == codec.type) {
-                    hint = codec;
-                    rtpmap = codec.rtpmap;
-                    break;
-                }
-            }
-        }
-
-        if (hint == null) {
-            return null;
-        }
-        if (hint == AMR && fmtp != null) {
-            String clue = fmtp.toLowerCase();
-            if (clue.contains("crc=1") || clue.contains("robust-sorting=1") ||
-                    clue.contains("interleaving=")) {
-                return null;
-            }
-        }
-        return new AudioCodec(type, rtpmap, fmtp);
-    }
-}
diff --git a/voip/java/android/net/rtp/AudioGroup.java b/voip/java/android/net/rtp/AudioGroup.java
deleted file mode 100644
index 8faeb88..0000000
--- a/voip/java/android/net/rtp/AudioGroup.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.rtp;
-
-import android.media.AudioManager;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * An AudioGroup is an audio hub for the speaker, the microphone, and
- * {@link AudioStream}s. Each of these components can be logically turned on
- * or off by calling {@link #setMode(int)} or {@link RtpStream#setMode(int)}.
- * The AudioGroup will go through these components and process them one by one
- * within its execution loop. The loop consists of four steps. First, for each
- * AudioStream not in {@link RtpStream#MODE_SEND_ONLY}, decodes its incoming
- * packets and stores in its buffer. Then, if the microphone is enabled,
- * processes the recorded audio and stores in its buffer. Third, if the speaker
- * is enabled, mixes all AudioStream buffers and plays back. Finally, for each
- * AudioStream not in {@link RtpStream#MODE_RECEIVE_ONLY}, mixes all other
- * buffers and sends back the encoded packets. An AudioGroup does nothing if
- * there is no AudioStream in it.
- *
- * <p>Few things must be noticed before using these classes. The performance is
- * highly related to the system load and the network bandwidth. Usually a
- * simpler {@link AudioCodec} costs fewer CPU cycles but requires more network
- * bandwidth, and vise versa. Using two AudioStreams at the same time doubles
- * not only the load but also the bandwidth. The condition varies from one
- * device to another, and developers should choose the right combination in
- * order to get the best result.</p>
- *
- * <p>It is sometimes useful to keep multiple AudioGroups at the same time. For
- * example, a Voice over IP (VoIP) application might want to put a conference
- * call on hold in order to make a new call but still allow people in the
- * conference call talking to each other. This can be done easily using two
- * AudioGroups, but there are some limitations. Since the speaker and the
- * microphone are globally shared resources, only one AudioGroup at a time is
- * allowed to run in a mode other than {@link #MODE_ON_HOLD}. The others will
- * be unable to acquire these resources and fail silently.</p>
- *
- * <p class="note">Using this class requires
- * {@link android.Manifest.permission#RECORD_AUDIO} permission. Developers
- * should set the audio mode to {@link AudioManager#MODE_IN_COMMUNICATION}
- * using {@link AudioManager#setMode(int)} and change it back when none of
- * the AudioGroups is in use.</p>
- *
- * @see AudioStream
- */
-public class AudioGroup {
-    /**
-     * This mode is similar to {@link #MODE_NORMAL} except the speaker and
-     * the microphone are both disabled.
-     */
-    public static final int MODE_ON_HOLD = 0;
-
-    /**
-     * This mode is similar to {@link #MODE_NORMAL} except the microphone is
-     * disabled.
-     */
-    public static final int MODE_MUTED = 1;
-
-    /**
-     * This mode indicates that the speaker, the microphone, and all
-     * {@link AudioStream}s in the group are enabled. First, the packets
-     * received from the streams are decoded and mixed with the audio recorded
-     * from the microphone. Then, the results are played back to the speaker,
-     * encoded and sent back to each stream.
-     */
-    public static final int MODE_NORMAL = 2;
-
-    /**
-     * This mode is similar to {@link #MODE_NORMAL} except the echo suppression
-     * is enabled. It should be only used when the speaker phone is on.
-     */
-    public static final int MODE_ECHO_SUPPRESSION = 3;
-
-    private static final int MODE_LAST = 3;
-
-    private final Map<AudioStream, Integer> mStreams;
-    private int mMode = MODE_ON_HOLD;
-
-    private int mNative;
-    static {
-        System.loadLibrary("rtp_jni");
-    }
-
-    /**
-     * Creates an empty AudioGroup.
-     */
-    public AudioGroup() {
-        mStreams = new HashMap<AudioStream, Integer>();
-    }
-
-    /**
-     * Returns the {@link AudioStream}s in this group.
-     */
-    public AudioStream[] getStreams() {
-        synchronized (this) {
-            return mStreams.keySet().toArray(new AudioStream[mStreams.size()]);
-        }
-    }
-
-    /**
-     * Returns the current mode.
-     */
-    public int getMode() {
-        return mMode;
-    }
-
-    /**
-     * Changes the current mode. It must be one of {@link #MODE_ON_HOLD},
-     * {@link #MODE_MUTED}, {@link #MODE_NORMAL}, and
-     * {@link #MODE_ECHO_SUPPRESSION}.
-     *
-     * @param mode The mode to change to.
-     * @throws IllegalArgumentException if the mode is invalid.
-     */
-    public void setMode(int mode) {
-        if (mode < 0 || mode > MODE_LAST) {
-            throw new IllegalArgumentException("Invalid mode");
-        }
-        synchronized (this) {
-            nativeSetMode(mode);
-            mMode = mode;
-        }
-    }
-
-    private native void nativeSetMode(int mode);
-
-    // Package-private method used by AudioStream.join().
-    synchronized void add(AudioStream stream) {
-        if (!mStreams.containsKey(stream)) {
-            try {
-                AudioCodec codec = stream.getCodec();
-                String codecSpec = String.format(Locale.US, "%d %s %s", codec.type,
-                        codec.rtpmap, codec.fmtp);
-                int id = nativeAdd(stream.getMode(), stream.getSocket(),
-                        stream.getRemoteAddress().getHostAddress(),
-                        stream.getRemotePort(), codecSpec, stream.getDtmfType());
-                mStreams.put(stream, id);
-            } catch (NullPointerException e) {
-                throw new IllegalStateException(e);
-            }
-        }
-    }
-
-    private native int nativeAdd(int mode, int socket, String remoteAddress,
-            int remotePort, String codecSpec, int dtmfType);
-
-    // Package-private method used by AudioStream.join().
-    synchronized void remove(AudioStream stream) {
-        Integer id = mStreams.remove(stream);
-        if (id != null) {
-            nativeRemove(id);
-        }
-    }
-
-    private native void nativeRemove(int id);
-
-    /**
-     * Sends a DTMF digit to every {@link AudioStream} in this group. Currently
-     * only event {@code 0} to {@code 15} are supported.
-     *
-     * @throws IllegalArgumentException if the event is invalid.
-     */
-    public void sendDtmf(int event) {
-        if (event < 0 || event > 15) {
-            throw new IllegalArgumentException("Invalid event");
-        }
-        synchronized (this) {
-            nativeSendDtmf(event);
-        }
-    }
-
-    private native void nativeSendDtmf(int event);
-
-    /**
-     * Removes every {@link AudioStream} in this group.
-     */
-    public void clear() {
-        for (AudioStream stream : getStreams()) {
-            stream.join(null);
-        }
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        nativeRemove(0);
-        super.finalize();
-    }
-}
diff --git a/voip/java/android/net/rtp/AudioStream.java b/voip/java/android/net/rtp/AudioStream.java
deleted file mode 100644
index 5cd1abc..0000000
--- a/voip/java/android/net/rtp/AudioStream.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.rtp;
-
-import java.net.InetAddress;
-import java.net.SocketException;
-
-/**
- * An AudioStream is a {@link RtpStream} which carrys audio payloads over
- * Real-time Transport Protocol (RTP). Two different classes are developed in
- * order to support various usages such as audio conferencing. An AudioStream
- * represents a remote endpoint which consists of a network mapping and a
- * configured {@link AudioCodec}. On the other side, An {@link AudioGroup}
- * represents a local endpoint which mixes all the AudioStreams and optionally
- * interacts with the speaker and the microphone at the same time. The simplest
- * usage includes one for each endpoints. For other combinations, developers
- * should be aware of the limitations described in {@link AudioGroup}.
- *
- * <p>An AudioStream becomes busy when it joins an AudioGroup. In this case most
- * of the setter methods are disabled. This is designed to ease the task of
- * managing native resources. One can always make an AudioStream leave its
- * AudioGroup by calling {@link #join(AudioGroup)} with {@code null} and put it
- * back after the modification is done.</p>
- *
- * <p class="note">Using this class requires
- * {@link android.Manifest.permission#INTERNET} permission.</p>
- *
- * @see RtpStream
- * @see AudioGroup
- */
-public class AudioStream extends RtpStream {
-    private AudioCodec mCodec;
-    private int mDtmfType = -1;
-    private AudioGroup mGroup;
-
-    /**
-     * Creates an AudioStream on the given local address. Note that the local
-     * port is assigned automatically to conform with RFC 3550.
-     *
-     * @param address The network address of the local host to bind to.
-     * @throws SocketException if the address cannot be bound or a problem
-     *     occurs during binding.
-     */
-    public AudioStream(InetAddress address) throws SocketException {
-        super(address);
-    }
-
-    /**
-     * Returns {@code true} if the stream has already joined an
-     * {@link AudioGroup}.
-     */
-    @Override
-    public final boolean isBusy() {
-        return mGroup != null;
-    }
-
-    /**
-     * Returns the joined {@link AudioGroup}.
-     */
-    public AudioGroup getGroup() {
-        return mGroup;
-    }
-
-    /**
-     * Joins an {@link AudioGroup}. Each stream can join only one group at a
-     * time. The group can be changed by passing a different one or removed
-     * by calling this method with {@code null}.
-     *
-     * @param group The AudioGroup to join or {@code null} to leave.
-     * @throws IllegalStateException if the stream is not properly configured.
-     * @see AudioGroup
-     */
-    public void join(AudioGroup group) {
-        synchronized (this) {
-            if (mGroup == group) {
-                return;
-            }
-            if (mGroup != null) {
-                mGroup.remove(this);
-                mGroup = null;
-            }
-            if (group != null) {
-                group.add(this);
-                mGroup = group;
-            }
-        }
-    }
-
-    /**
-     * Returns the {@link AudioCodec}, or {@code null} if it is not set.
-     *
-     * @see #setCodec(AudioCodec)
-     */
-    public AudioCodec getCodec() {
-        return mCodec;
-    }
-
-    /**
-     * Sets the {@link AudioCodec}.
-     *
-     * @param codec The AudioCodec to be used.
-     * @throws IllegalArgumentException if its type is used by DTMF.
-     * @throws IllegalStateException if the stream is busy.
-     */
-    public void setCodec(AudioCodec codec) {
-        if (isBusy()) {
-            throw new IllegalStateException("Busy");
-        }
-        if (codec.type == mDtmfType) {
-            throw new IllegalArgumentException("The type is used by DTMF");
-        }
-        mCodec = codec;
-    }
-
-    /**
-     * Returns the RTP payload type for dual-tone multi-frequency (DTMF) digits,
-     * or {@code -1} if it is not enabled.
-     *
-     * @see #setDtmfType(int)
-     */
-    public int getDtmfType() {
-        return mDtmfType;
-    }
-
-    /**
-     * Sets the RTP payload type for dual-tone multi-frequency (DTMF) digits.
-     * The primary usage is to send digits to the remote gateway to perform
-     * certain tasks, such as second-stage dialing. According to RFC 2833, the
-     * RTP payload type for DTMF is assigned dynamically, so it must be in the
-     * range of 96 and 127. One can use {@code -1} to disable DTMF and free up
-     * the previous assigned type. This method cannot be called when the stream
-     * already joined an {@link AudioGroup}.
-     *
-     * @param type The RTP payload type to be used or {@code -1} to disable it.
-     * @throws IllegalArgumentException if the type is invalid or used by codec.
-     * @throws IllegalStateException if the stream is busy.
-     * @see AudioGroup#sendDtmf(int)
-     */
-    public void setDtmfType(int type) {
-        if (isBusy()) {
-            throw new IllegalStateException("Busy");
-        }
-        if (type != -1) {
-            if (type < 96 || type > 127) {
-                throw new IllegalArgumentException("Invalid type");
-            }
-            if (mCodec != null && type == mCodec.type) {
-                throw new IllegalArgumentException("The type is used by codec");
-            }
-        }
-        mDtmfType = type;
-    }
-}
diff --git a/voip/java/android/net/rtp/RtpStream.java b/voip/java/android/net/rtp/RtpStream.java
deleted file mode 100644
index b9d75cd..0000000
--- a/voip/java/android/net/rtp/RtpStream.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.rtp;
-
-import java.net.InetAddress;
-import java.net.Inet4Address;
-import java.net.Inet6Address;
-import java.net.SocketException;
-
-/**
- * RtpStream represents the base class of streams which send and receive network
- * packets with media payloads over Real-time Transport Protocol (RTP).
- *
- * <p class="note">Using this class requires
- * {@link android.Manifest.permission#INTERNET} permission.</p>
- */
-public class RtpStream {
-    /**
-     * This mode indicates that the stream sends and receives packets at the
-     * same time. This is the initial mode for new streams.
-     */
-    public static final int MODE_NORMAL = 0;
-
-    /**
-     * This mode indicates that the stream only sends packets.
-     */
-    public static final int MODE_SEND_ONLY = 1;
-
-    /**
-     * This mode indicates that the stream only receives packets.
-     */
-    public static final int MODE_RECEIVE_ONLY = 2;
-
-    private static final int MODE_LAST = 2;
-
-    private final InetAddress mLocalAddress;
-    private final int mLocalPort;
-
-    private InetAddress mRemoteAddress;
-    private int mRemotePort = -1;
-    private int mMode = MODE_NORMAL;
-
-    private int mSocket = -1;
-    static {
-        System.loadLibrary("rtp_jni");
-    }
-
-    /**
-     * Creates a RtpStream on the given local address. Note that the local
-     * port is assigned automatically to conform with RFC 3550.
-     *
-     * @param address The network address of the local host to bind to.
-     * @throws SocketException if the address cannot be bound or a problem
-     *     occurs during binding.
-     */
-    RtpStream(InetAddress address) throws SocketException {
-        mLocalPort = create(address.getHostAddress());
-        mLocalAddress = address;
-    }
-
-    private native int create(String address) throws SocketException;
-
-    /**
-     * Returns the network address of the local host.
-     */
-    public InetAddress getLocalAddress() {
-        return mLocalAddress;
-    }
-
-    /**
-     * Returns the network port of the local host.
-     */
-    public int getLocalPort() {
-        return mLocalPort;
-    }
-
-    /**
-     * Returns the network address of the remote host or {@code null} if the
-     * stream is not associated.
-     */
-    public InetAddress getRemoteAddress() {
-        return mRemoteAddress;
-    }
-
-    /**
-     * Returns the network port of the remote host or {@code -1} if the stream
-     * is not associated.
-     */
-    public int getRemotePort() {
-        return mRemotePort;
-    }
-
-    /**
-     * Returns {@code true} if the stream is busy. In this case most of the
-     * setter methods are disabled. This method is intended to be overridden
-     * by subclasses.
-     */
-    public boolean isBusy() {
-        return false;
-    }
-
-    /**
-     * Returns the current mode.
-     */
-    public int getMode() {
-        return mMode;
-    }
-
-    /**
-     * Changes the current mode. It must be one of {@link #MODE_NORMAL},
-     * {@link #MODE_SEND_ONLY}, and {@link #MODE_RECEIVE_ONLY}.
-     *
-     * @param mode The mode to change to.
-     * @throws IllegalArgumentException if the mode is invalid.
-     * @throws IllegalStateException if the stream is busy.
-     * @see #isBusy()
-     */
-    public void setMode(int mode) {
-        if (isBusy()) {
-            throw new IllegalStateException("Busy");
-        }
-        if (mode < 0 || mode > MODE_LAST) {
-            throw new IllegalArgumentException("Invalid mode");
-        }
-        mMode = mode;
-    }
-
-    /**
-     * Associates with a remote host. This defines the destination of the
-     * outgoing packets.
-     *
-     * @param address The network address of the remote host.
-     * @param port The network port of the remote host.
-     * @throws IllegalArgumentException if the address is not supported or the
-     *     port is invalid.
-     * @throws IllegalStateException if the stream is busy.
-     * @see #isBusy()
-     */
-    public void associate(InetAddress address, int port) {
-        if (isBusy()) {
-            throw new IllegalStateException("Busy");
-        }
-        if (!(address instanceof Inet4Address && mLocalAddress instanceof Inet4Address) &&
-                !(address instanceof Inet6Address && mLocalAddress instanceof Inet6Address)) {
-            throw new IllegalArgumentException("Unsupported address");
-        }
-        if (port < 0 || port > 65535) {
-            throw new IllegalArgumentException("Invalid port");
-        }
-        mRemoteAddress = address;
-        mRemotePort = port;
-    }
-
-    int getSocket() {
-        return mSocket;
-    }
-
-    /**
-     * Releases allocated resources. The stream becomes inoperable after calling
-     * this method.
-     *
-     * @throws IllegalStateException if the stream is busy.
-     * @see #isBusy()
-     */
-    public void release() {
-        synchronized (this) {
-            if (isBusy()) {
-                throw new IllegalStateException("Busy");
-            }
-            close();
-        }
-    }
-
-    private native void close();
-
-    @Override
-    protected void finalize() throws Throwable {
-        close();
-        super.finalize();
-    }
-}
diff --git a/voip/java/android/net/rtp/package.html b/voip/java/android/net/rtp/package.html
deleted file mode 100644
index 4506b09..0000000
--- a/voip/java/android/net/rtp/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<html>
-<body>
-<p>Provides APIs for RTP (Real-time Transport Protocol), allowing applications to manage on-demand
-or interactive data streaming. In particular, apps that provide VOIP, push-to-talk, conferencing,
-and audio streaming can use these APIs to initiate sessions and transmit or receive data streams
-over any available network.</p>
-
-<p>To support audio conferencing and similar usages, you need to instantiate two classes as
-endpoints for the stream:</p>
-
-<ul>
-<li>{@link android.net.rtp.AudioStream} specifies a remote endpoint and consists of network mapping
-and a configured {@link android.net.rtp.AudioCodec}.</li>
-
-<li>{@link android.net.rtp.AudioGroup} represents the local endpoint for one or more {@link
-android.net.rtp.AudioStream}s. The {@link android.net.rtp.AudioGroup} mixes all the {@link
-android.net.rtp.AudioStream}s and optionally interacts with the device speaker and the microphone at
-the same time.</li>
-</ul>
-
-<p>The simplest usage involves a single remote endpoint and local endpoint. For more complex usages,
-refer to the limitations described for {@link android.net.rtp.AudioGroup}.</p>
-
-<p class="note"><strong>Note:</strong> To use the RTP APIs, you must request the {@link
-android.Manifest.permission#INTERNET} and {@link
-android.Manifest.permission#RECORD_AUDIO} permissions in your manifest file.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/voip/java/android/net/sip/ISipService.aidl b/voip/java/android/net/sip/ISipService.aidl
deleted file mode 100644
index 3250bf9..0000000
--- a/voip/java/android/net/sip/ISipService.aidl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-import android.app.PendingIntent;
-import android.net.sip.ISipSession;
-import android.net.sip.ISipSessionListener;
-import android.net.sip.SipProfile;
-
-/**
- * {@hide}
- */
-interface ISipService {
-    void open(in SipProfile localProfile);
-    void open3(in SipProfile localProfile,
-            in PendingIntent incomingCallPendingIntent,
-            in ISipSessionListener listener);
-    void close(in String localProfileUri);
-    boolean isOpened(String localProfileUri);
-    boolean isRegistered(String localProfileUri);
-    void setRegistrationListener(String localProfileUri,
-            ISipSessionListener listener);
-
-    ISipSession createSession(in SipProfile localProfile,
-            in ISipSessionListener listener);
-    ISipSession getPendingSession(String callId);
-
-    SipProfile[] getListOfProfiles();
-}
diff --git a/voip/java/android/net/sip/ISipSession.aidl b/voip/java/android/net/sip/ISipSession.aidl
deleted file mode 100644
index 2d515db..0000000
--- a/voip/java/android/net/sip/ISipSession.aidl
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-import android.net.sip.ISipSessionListener;
-import android.net.sip.SipProfile;
-
-/**
- * A SIP session that is associated with a SIP dialog or a transaction that is
- * not within a dialog.
- * @hide
- */
-interface ISipSession {
-    /**
-     * Gets the IP address of the local host on which this SIP session runs.
-     *
-     * @return the IP address of the local host
-     */
-    String getLocalIp();
-
-    /**
-     * Gets the SIP profile that this session is associated with.
-     *
-     * @return the SIP profile that this session is associated with
-     */
-    SipProfile getLocalProfile();
-
-    /**
-     * Gets the SIP profile that this session is connected to. Only available
-     * when the session is associated with a SIP dialog.
-     *
-     * @return the SIP profile that this session is connected to
-     */
-    SipProfile getPeerProfile();
-
-    /**
-     * Gets the session state. The value returned must be one of the states in
-     * {@link SipSessionState}.
-     *
-     * @return the session state
-     */
-    int getState();
-
-    /**
-     * Checks if the session is in a call.
-     *
-     * @return true if the session is in a call
-     */
-    boolean isInCall();
-
-    /**
-     * Gets the call ID of the session.
-     *
-     * @return the call ID
-     */
-    String getCallId();
-
-
-    /**
-     * Sets the listener to listen to the session events. A {@link ISipSession}
-     * can only hold one listener at a time. Subsequent calls to this method
-     * override the previous listener.
-     *
-     * @param listener to listen to the session events of this object
-     */
-    void setListener(in ISipSessionListener listener);
-
-
-    /**
-     * Performs registration to the server specified by the associated local
-     * profile. The session listener is called back upon success or failure of
-     * registration. The method is only valid to call when the session state is
-     * in {@link SipSessionState#READY_TO_CALL}.
-     *
-     * @param duration duration in second before the registration expires
-     * @see ISipSessionListener
-     */
-    void register(int duration);
-
-    /**
-     * Performs unregistration to the server specified by the associated local
-     * profile. Unregistration is technically the same as registration with zero
-     * expiration duration. The session listener is called back upon success or
-     * failure of unregistration. The method is only valid to call when the
-     * session state is in {@link SipSessionState#READY_TO_CALL}.
-     *
-     * @see ISipSessionListener
-     */
-    void unregister();
-
-    /**
-     * Initiates a call to the specified profile. The session listener is called
-     * back upon defined session events. The method is only valid to call when
-     * the session state is in {@link SipSessionState#READY_TO_CALL}.
-     *
-     * @param callee the SIP profile to make the call to
-     * @param sessionDescription the session description of this call
-     * @param timeout the session will be timed out if the call is not
-     *        established within {@code timeout} seconds
-     * @see ISipSessionListener
-     */
-    void makeCall(in SipProfile callee, String sessionDescription, int timeout);
-
-    /**
-     * Answers an incoming call with the specified session description. The
-     * method is only valid to call when the session state is in
-     * {@link SipSessionState#INCOMING_CALL}.
-     *
-     * @param sessionDescription the session description to answer this call
-     * @param timeout the session will be timed out if the call is not
-     *        established within {@code timeout} seconds
-     */
-    void answerCall(String sessionDescription, int timeout);
-
-    /**
-     * Ends an established call, terminates an outgoing call or rejects an
-     * incoming call. The method is only valid to call when the session state is
-     * in {@link SipSessionState#IN_CALL},
-     * {@link SipSessionState#INCOMING_CALL},
-     * {@link SipSessionState#OUTGOING_CALL} or
-     * {@link SipSessionState#OUTGOING_CALL_RING_BACK}.
-     */
-    void endCall();
-
-    /**
-     * Changes the session description during a call. The method is only valid
-     * to call when the session state is in {@link SipSessionState#IN_CALL}.
-     *
-     * @param sessionDescription the new session description
-     * @param timeout the session will be timed out if the call is not
-     *        established within {@code timeout} seconds
-     */
-    void changeCall(String sessionDescription, int timeout);
-}
diff --git a/voip/java/android/net/sip/ISipSessionListener.aidl b/voip/java/android/net/sip/ISipSessionListener.aidl
deleted file mode 100644
index 690700c..0000000
--- a/voip/java/android/net/sip/ISipSessionListener.aidl
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-import android.net.sip.ISipSession;
-import android.net.sip.SipProfile;
-
-/**
- * Listener class to listen to SIP session events.
- * @hide
- */
-interface ISipSessionListener {
-    /**
-     * Called when an INVITE request is sent to initiate a new call.
-     *
-     * @param session the session object that carries out the transaction
-     */
-    void onCalling(in ISipSession session);
-
-    /**
-     * Called when an INVITE request is received.
-     *
-     * @param session the session object that carries out the transaction
-     * @param caller the SIP profile of the caller
-     * @param sessionDescription the caller's session description
-     */
-    void onRinging(in ISipSession session, in SipProfile caller,
-            String sessionDescription);
-
-    /**
-     * Called when a RINGING response is received for the INVITE request sent
-     *
-     * @param session the session object that carries out the transaction
-     */
-    void onRingingBack(in ISipSession session);
-
-    /**
-     * Called when the session is established.
-     *
-     * @param session the session object that is associated with the dialog
-     * @param sessionDescription the peer's session description
-     */
-    void onCallEstablished(in ISipSession session,
-            String sessionDescription);
-
-    /**
-     * Called when the session is terminated.
-     *
-     * @param session the session object that is associated with the dialog
-     */
-    void onCallEnded(in ISipSession session);
-
-    /**
-     * Called when the peer is busy during session initialization.
-     *
-     * @param session the session object that carries out the transaction
-     */
-    void onCallBusy(in ISipSession session);
-
-    /**
-     * Called when the call is being transferred to a new one.
-     *
-     * @param newSession the new session that the call will be transferred to
-     * @param sessionDescription the new peer's session description
-     */
-    void onCallTransferring(in ISipSession newSession, String sessionDescription);
-
-    /**
-     * Called when an error occurs during session initialization and
-     * termination.
-     *
-     * @param session the session object that carries out the transaction
-     * @param errorCode error code defined in {@link SipErrorCode}
-     * @param errorMessage error message
-     */
-    void onError(in ISipSession session, int errorCode, String errorMessage);
-
-    /**
-     * Called when an error occurs during session modification negotiation.
-     *
-     * @param session the session object that carries out the transaction
-     * @param errorCode error code defined in {@link SipErrorCode}
-     * @param errorMessage error message
-     */
-    void onCallChangeFailed(in ISipSession session, int errorCode,
-            String errorMessage);
-
-    /**
-     * Called when a registration request is sent.
-     *
-     * @param session the session object that carries out the transaction
-     */
-    void onRegistering(in ISipSession session);
-
-    /**
-     * Called when registration is successfully done.
-     *
-     * @param session the session object that carries out the transaction
-     * @param duration duration in second before the registration expires
-     */
-    void onRegistrationDone(in ISipSession session, int duration);
-
-    /**
-     * Called when the registration fails.
-     *
-     * @param session the session object that carries out the transaction
-     * @param errorCode error code defined in {@link SipErrorCode}
-     * @param errorMessage error message
-     */
-    void onRegistrationFailed(in ISipSession session, int errorCode,
-            String errorMessage);
-
-    /**
-     * Called when the registration gets timed out.
-     *
-     * @param session the session object that carries out the transaction
-     */
-    void onRegistrationTimeout(in ISipSession session);
-}
diff --git a/voip/java/android/net/sip/SimpleSessionDescription.java b/voip/java/android/net/sip/SimpleSessionDescription.java
deleted file mode 100644
index 9fcd21d..0000000
--- a/voip/java/android/net/sip/SimpleSessionDescription.java
+++ /dev/null
@@ -1,613 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Locale;
-
-/**
- * An object used to manipulate messages of Session Description Protocol (SDP).
- * It is mainly designed for the uses of Session Initiation Protocol (SIP).
- * Therefore, it only handles connection addresses ("c="), bandwidth limits,
- * ("b="), encryption keys ("k="), and attribute fields ("a="). Currently this
- * implementation does not support multicast sessions.
- *
- * <p>Here is an example code to create a session description.</p>
- * <pre>
- * SimpleSessionDescription description = new SimpleSessionDescription(
- *     System.currentTimeMillis(), "1.2.3.4");
- * Media media = description.newMedia("audio", 56789, 1, "RTP/AVP");
- * media.setRtpPayload(0, "PCMU/8000", null);
- * media.setRtpPayload(8, "PCMA/8000", null);
- * media.setRtpPayload(127, "telephone-event/8000", "0-15");
- * media.setAttribute("sendrecv", "");
- * </pre>
- * <p>Invoking <code>description.encode()</code> will produce a result like the
- * one below.</p>
- * <pre>
- * v=0
- * o=- 1284970442706 1284970442709 IN IP4 1.2.3.4
- * s=-
- * c=IN IP4 1.2.3.4
- * t=0 0
- * m=audio 56789 RTP/AVP 0 8 127
- * a=rtpmap:0 PCMU/8000
- * a=rtpmap:8 PCMA/8000
- * a=rtpmap:127 telephone-event/8000
- * a=fmtp:127 0-15
- * a=sendrecv
- * </pre>
- * @hide
- */
-public class SimpleSessionDescription {
-    private final Fields mFields = new Fields("voscbtka");
-    private final ArrayList<Media> mMedia = new ArrayList<Media>();
-
-    /**
-     * Creates a minimal session description from the given session ID and
-     * unicast address. The address is used in the origin field ("o=") and the
-     * connection field ("c="). See {@link SimpleSessionDescription} for an
-     * example of its usage.
-     */
-    public SimpleSessionDescription(long sessionId, String address) {
-        address = (address.indexOf(':') < 0 ? "IN IP4 " : "IN IP6 ") + address;
-        mFields.parse("v=0");
-        mFields.parse(String.format(Locale.US, "o=- %d %d %s", sessionId,
-                System.currentTimeMillis(), address));
-        mFields.parse("s=-");
-        mFields.parse("t=0 0");
-        mFields.parse("c=" + address);
-    }
-
-    /**
-     * Creates a session description from the given message.
-     *
-     * @throws IllegalArgumentException if message is invalid.
-     */
-    public SimpleSessionDescription(String message) {
-        String[] lines = message.trim().replaceAll(" +", " ").split("[\r\n]+");
-        Fields fields = mFields;
-
-        for (String line : lines) {
-            try {
-                if (line.charAt(1) != '=') {
-                    throw new IllegalArgumentException();
-                }
-                if (line.charAt(0) == 'm') {
-                    String[] parts = line.substring(2).split(" ", 4);
-                    String[] ports = parts[1].split("/", 2);
-                    Media media = newMedia(parts[0], Integer.parseInt(ports[0]),
-                            (ports.length < 2) ? 1 : Integer.parseInt(ports[1]),
-                            parts[2]);
-                    for (String format : parts[3].split(" ")) {
-                        media.setFormat(format, null);
-                    }
-                    fields = media;
-                } else {
-                    fields.parse(line);
-                }
-            } catch (Exception e) {
-                throw new IllegalArgumentException("Invalid SDP: " + line);
-            }
-        }
-    }
-
-    /**
-     * Creates a new media description in this session description.
-     *
-     * @param type The media type, e.g. {@code "audio"}.
-     * @param port The first transport port used by this media.
-     * @param portCount The number of contiguous ports used by this media.
-     * @param protocol The transport protocol, e.g. {@code "RTP/AVP"}.
-     */
-    public Media newMedia(String type, int port, int portCount,
-            String protocol) {
-        Media media = new Media(type, port, portCount, protocol);
-        mMedia.add(media);
-        return media;
-    }
-
-    /**
-     * Returns all the media descriptions in this session description.
-     */
-    public Media[] getMedia() {
-        return mMedia.toArray(new Media[mMedia.size()]);
-    }
-
-    /**
-     * Encodes the session description and all its media descriptions in a
-     * string. Note that the result might be incomplete if a required field
-     * has never been added before.
-     */
-    public String encode() {
-        StringBuilder buffer = new StringBuilder();
-        mFields.write(buffer);
-        for (Media media : mMedia) {
-            media.write(buffer);
-        }
-        return buffer.toString();
-    }
-
-    /**
-     * Returns the connection address or {@code null} if it is not present.
-     */
-    public String getAddress() {
-        return mFields.getAddress();
-    }
-
-    /**
-     * Sets the connection address. The field will be removed if the address
-     * is {@code null}.
-     */
-    public void setAddress(String address) {
-        mFields.setAddress(address);
-    }
-
-    /**
-     * Returns the encryption method or {@code null} if it is not present.
-     */
-    public String getEncryptionMethod() {
-        return mFields.getEncryptionMethod();
-    }
-
-    /**
-     * Returns the encryption key or {@code null} if it is not present.
-     */
-    public String getEncryptionKey() {
-        return mFields.getEncryptionKey();
-    }
-
-    /**
-     * Sets the encryption method and the encryption key. The field will be
-     * removed if the method is {@code null}.
-     */
-    public void setEncryption(String method, String key) {
-        mFields.setEncryption(method, key);
-    }
-
-    /**
-     * Returns the types of the bandwidth limits.
-     */
-    public String[] getBandwidthTypes() {
-        return mFields.getBandwidthTypes();
-    }
-
-    /**
-     * Returns the bandwidth limit of the given type or {@code -1} if it is not
-     * present.
-     */
-    public int getBandwidth(String type) {
-        return mFields.getBandwidth(type);
-    }
-
-    /**
-     * Sets the bandwith limit for the given type. The field will be removed if
-     * the value is negative.
-     */
-    public void setBandwidth(String type, int value) {
-        mFields.setBandwidth(type, value);
-    }
-
-    /**
-     * Returns the names of all the attributes.
-     */
-    public String[] getAttributeNames() {
-        return mFields.getAttributeNames();
-    }
-
-    /**
-     * Returns the attribute of the given name or {@code null} if it is not
-     * present.
-     */
-    public String getAttribute(String name) {
-        return mFields.getAttribute(name);
-    }
-
-    /**
-     * Sets the attribute for the given name. The field will be removed if
-     * the value is {@code null}. To set a binary attribute, use an empty
-     * string as the value.
-     */
-    public void setAttribute(String name, String value) {
-        mFields.setAttribute(name, value);
-    }
-
-    /**
-     * This class represents a media description of a session description. It
-     * can only be created by {@link SimpleSessionDescription#newMedia}. Since
-     * the syntax is more restricted for RTP based protocols, two sets of access
-     * methods are implemented. See {@link SimpleSessionDescription} for an
-     * example of its usage.
-     */
-    public static class Media extends Fields {
-        private final String mType;
-        private final int mPort;
-        private final int mPortCount;
-        private final String mProtocol;
-        private ArrayList<String> mFormats = new ArrayList<String>();
-
-        private Media(String type, int port, int portCount, String protocol) {
-            super("icbka");
-            mType = type;
-            mPort = port;
-            mPortCount = portCount;
-            mProtocol = protocol;
-        }
-
-        /**
-         * Returns the media type.
-         */
-        public String getType() {
-            return mType;
-        }
-
-        /**
-         * Returns the first transport port used by this media.
-         */
-        public int getPort() {
-            return mPort;
-        }
-
-        /**
-         * Returns the number of contiguous ports used by this media.
-         */
-        public int getPortCount() {
-            return mPortCount;
-        }
-
-        /**
-         * Returns the transport protocol.
-         */
-        public String getProtocol() {
-            return mProtocol;
-        }
-
-        /**
-         * Returns the media formats.
-         */
-        public String[] getFormats() {
-            return mFormats.toArray(new String[mFormats.size()]);
-        }
-
-        /**
-         * Returns the {@code fmtp} attribute of the given format or
-         * {@code null} if it is not present.
-         */
-        public String getFmtp(String format) {
-            return super.get("a=fmtp:" + format, ' ');
-        }
-
-        /**
-         * Sets a format and its {@code fmtp} attribute. If the attribute is
-         * {@code null}, the corresponding field will be removed.
-         */
-        public void setFormat(String format, String fmtp) {
-            mFormats.remove(format);
-            mFormats.add(format);
-            super.set("a=rtpmap:" + format, ' ', null);
-            super.set("a=fmtp:" + format, ' ', fmtp);
-        }
-
-        /**
-         * Removes a format and its {@code fmtp} attribute.
-         */
-        public void removeFormat(String format) {
-            mFormats.remove(format);
-            super.set("a=rtpmap:" + format, ' ', null);
-            super.set("a=fmtp:" + format, ' ', null);
-        }
-
-        /**
-         * Returns the RTP payload types.
-         */
-        public int[] getRtpPayloadTypes() {
-            int[] types = new int[mFormats.size()];
-            int length = 0;
-            for (String format : mFormats) {
-                try {
-                    types[length] = Integer.parseInt(format);
-                    ++length;
-                } catch (NumberFormatException e) { }
-            }
-            return Arrays.copyOf(types, length);
-        }
-
-        /**
-         * Returns the {@code rtpmap} attribute of the given RTP payload type
-         * or {@code null} if it is not present.
-         */
-        public String getRtpmap(int type) {
-            return super.get("a=rtpmap:" + type, ' ');
-        }
-
-        /**
-         * Returns the {@code fmtp} attribute of the given RTP payload type or
-         * {@code null} if it is not present.
-         */
-        public String getFmtp(int type) {
-            return super.get("a=fmtp:" + type, ' ');
-        }
-
-        /**
-         * Sets a RTP payload type and its {@code rtpmap} and {@code fmtp}
-         * attributes. If any of the attributes is {@code null}, the
-         * corresponding field will be removed. See
-         * {@link SimpleSessionDescription} for an example of its usage.
-         */
-        public void setRtpPayload(int type, String rtpmap, String fmtp) {
-            String format = String.valueOf(type);
-            mFormats.remove(format);
-            mFormats.add(format);
-            super.set("a=rtpmap:" + format, ' ', rtpmap);
-            super.set("a=fmtp:" + format, ' ', fmtp);
-        }
-
-        /**
-         * Removes a RTP payload and its {@code rtpmap} and {@code fmtp}
-         * attributes.
-         */
-        public void removeRtpPayload(int type) {
-            removeFormat(String.valueOf(type));
-        }
-
-        private void write(StringBuilder buffer) {
-            buffer.append("m=").append(mType).append(' ').append(mPort);
-            if (mPortCount != 1) {
-                buffer.append('/').append(mPortCount);
-            }
-            buffer.append(' ').append(mProtocol);
-            for (String format : mFormats) {
-                buffer.append(' ').append(format);
-            }
-            buffer.append("\r\n");
-            super.write(buffer);
-        }
-    }
-
-    /**
-     * This class acts as a set of fields, and the size of the set is expected
-     * to be small. Therefore, it uses a simple list instead of maps. Each field
-     * has three parts: a key, a delimiter, and a value. Delimiters are special
-     * because they are not included in binary attributes. As a result, the
-     * private methods, which are the building blocks of this class, all take
-     * the delimiter as an argument.
-     */
-    private static class Fields {
-        private final String mOrder;
-        private final ArrayList<String> mLines = new ArrayList<String>();
-
-        Fields(String order) {
-            mOrder = order;
-        }
-
-        /**
-         * Returns the connection address or {@code null} if it is not present.
-         */
-        public String getAddress() {
-            String address = get("c", '=');
-            if (address == null) {
-                return null;
-            }
-            String[] parts = address.split(" ");
-            if (parts.length != 3) {
-                return null;
-            }
-            int slash = parts[2].indexOf('/');
-            return (slash < 0) ? parts[2] : parts[2].substring(0, slash);
-        }
-
-        /**
-         * Sets the connection address. The field will be removed if the address
-         * is {@code null}.
-         */
-        public void setAddress(String address) {
-            if (address != null) {
-                address = (address.indexOf(':') < 0 ? "IN IP4 " : "IN IP6 ") +
-                        address;
-            }
-            set("c", '=', address);
-        }
-
-        /**
-         * Returns the encryption method or {@code null} if it is not present.
-         */
-        public String getEncryptionMethod() {
-            String encryption = get("k", '=');
-            if (encryption == null) {
-                return null;
-            }
-            int colon = encryption.indexOf(':');
-            return (colon == -1) ? encryption : encryption.substring(0, colon);
-        }
-
-        /**
-         * Returns the encryption key or {@code null} if it is not present.
-         */
-        public String getEncryptionKey() {
-            String encryption = get("k", '=');
-            if (encryption == null) {
-                return null;
-            }
-            int colon = encryption.indexOf(':');
-            return (colon == -1) ? null : encryption.substring(0, colon + 1);
-        }
-
-        /**
-         * Sets the encryption method and the encryption key. The field will be
-         * removed if the method is {@code null}.
-         */
-        public void setEncryption(String method, String key) {
-            set("k", '=', (method == null || key == null) ?
-                    method : method + ':' + key);
-        }
-
-        /**
-         * Returns the types of the bandwidth limits.
-         */
-        public String[] getBandwidthTypes() {
-            return cut("b=", ':');
-        }
-
-        /**
-         * Returns the bandwidth limit of the given type or {@code -1} if it is
-         * not present.
-         */
-        public int getBandwidth(String type) {
-            String value = get("b=" + type, ':');
-            if (value != null) {
-                try {
-                    return Integer.parseInt(value);
-                } catch (NumberFormatException e) { }
-                setBandwidth(type, -1);
-            }
-            return -1;
-        }
-
-        /**
-         * Sets the bandwith limit for the given type. The field will be removed
-         * if the value is negative.
-         */
-        public void setBandwidth(String type, int value) {
-            set("b=" + type, ':', (value < 0) ? null : String.valueOf(value));
-        }
-
-        /**
-         * Returns the names of all the attributes.
-         */
-        public String[] getAttributeNames() {
-            return cut("a=", ':');
-        }
-
-        /**
-         * Returns the attribute of the given name or {@code null} if it is not
-         * present.
-         */
-        public String getAttribute(String name) {
-            return get("a=" + name, ':');
-        }
-
-        /**
-         * Sets the attribute for the given name. The field will be removed if
-         * the value is {@code null}. To set a binary attribute, use an empty
-         * string as the value.
-         */
-        public void setAttribute(String name, String value) {
-            set("a=" + name, ':', value);
-        }
-
-        private void write(StringBuilder buffer) {
-            for (int i = 0; i < mOrder.length(); ++i) {
-                char type = mOrder.charAt(i);
-                for (String line : mLines) {
-                    if (line.charAt(0) == type) {
-                        buffer.append(line).append("\r\n");
-                    }
-                }
-            }
-        }
-
-        /**
-         * Invokes {@link #set} after splitting the line into three parts.
-         */
-        private void parse(String line) {
-            char type = line.charAt(0);
-            if (mOrder.indexOf(type) == -1) {
-                return;
-            }
-            char delimiter = '=';
-            if (line.startsWith("a=rtpmap:") || line.startsWith("a=fmtp:")) {
-                delimiter = ' ';
-            } else if (type == 'b' || type == 'a') {
-                delimiter = ':';
-            }
-            int i = line.indexOf(delimiter);
-            if (i == -1) {
-                set(line, delimiter, "");
-            } else {
-                set(line.substring(0, i), delimiter, line.substring(i + 1));
-            }
-        }
-
-        /**
-         * Finds the key with the given prefix and returns its suffix.
-         */
-        private String[] cut(String prefix, char delimiter) {
-            String[] names = new String[mLines.size()];
-            int length = 0;
-            for (String line : mLines) {
-                if (line.startsWith(prefix)) {
-                    int i = line.indexOf(delimiter);
-                    if (i == -1) {
-                        i = line.length();
-                    }
-                    names[length] = line.substring(prefix.length(), i);
-                    ++length;
-                }
-            }
-            return Arrays.copyOf(names, length);
-        }
-
-        /**
-         * Returns the index of the key.
-         */
-        private int find(String key, char delimiter) {
-            int length = key.length();
-            for (int i = mLines.size() - 1; i >= 0; --i) {
-                String line = mLines.get(i);
-                if (line.startsWith(key) && (line.length() == length ||
-                        line.charAt(length) == delimiter)) {
-                    return i;
-                }
-            }
-            return -1;
-        }
-
-        /**
-         * Sets the key with the value or removes the key if the value is
-         * {@code null}.
-         */
-        private void set(String key, char delimiter, String value) {
-            int index = find(key, delimiter);
-            if (value != null) {
-                if (value.length() != 0) {
-                    key = key + delimiter + value;
-                }
-                if (index == -1) {
-                    mLines.add(key);
-                } else {
-                    mLines.set(index, key);
-                }
-            } else if (index != -1) {
-                mLines.remove(index);
-            }
-        }
-
-        /**
-         * Returns the value of the key.
-         */
-        private String get(String key, char delimiter) {
-            int index = find(key, delimiter);
-            if (index == -1) {
-                return null;
-            }
-            String line = mLines.get(index);
-            int length = key.length();
-            return (line.length() == length) ? "" : line.substring(length + 1);
-        }
-    }
-}
diff --git a/voip/java/android/net/sip/SipAudioCall.java b/voip/java/android/net/sip/SipAudioCall.java
deleted file mode 100644
index 1d67055..0000000
--- a/voip/java/android/net/sip/SipAudioCall.java
+++ /dev/null
@@ -1,1126 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-import android.content.Context;
-import android.media.AudioManager;
-import android.net.rtp.AudioCodec;
-import android.net.rtp.AudioGroup;
-import android.net.rtp.AudioStream;
-import android.net.rtp.RtpStream;
-import android.net.sip.SimpleSessionDescription.Media;
-import android.net.wifi.WifiManager;
-import android.os.Message;
-import android.os.RemoteException;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Handles an Internet audio call over SIP. You can instantiate this class with {@link SipManager},
- * using {@link SipManager#makeAudioCall makeAudioCall()} and  {@link SipManager#takeAudioCall
- * takeAudioCall()}.
- *
- * <p class="note"><strong>Note:</strong> Using this class require the
- *   {@link android.Manifest.permission#INTERNET} and
- *   {@link android.Manifest.permission#USE_SIP} permissions. In addition, {@link
- *   #startAudio} requires the
- *   {@link android.Manifest.permission#RECORD_AUDIO},
- *   {@link android.Manifest.permission#ACCESS_WIFI_STATE}, and
- *   {@link android.Manifest.permission#WAKE_LOCK} permissions; and {@link #setSpeakerMode
- *   setSpeakerMode()} requires the
- *   {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS} permission.</p>
- *
- * <div class="special reference">
- * <h3>Developer Guides</h3>
- * <p>For more information about using SIP, read the
- * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a>
- * developer guide.</p>
- * </div>
- */
-public class SipAudioCall {
-    private static final String TAG = SipAudioCall.class.getSimpleName();
-    private static final boolean RELEASE_SOCKET = true;
-    private static final boolean DONT_RELEASE_SOCKET = false;
-    private static final int SESSION_TIMEOUT = 5; // in seconds
-    private static final int TRANSFER_TIMEOUT = 15; // in seconds
-
-    /** Listener for events relating to a SIP call, such as when a call is being
-     * recieved ("on ringing") or a call is outgoing ("on calling").
-     * <p>Many of these events are also received by {@link SipSession.Listener}.</p>
-     */
-    public static class Listener {
-        /**
-         * Called when the call object is ready to make another call.
-         * The default implementation calls {@link #onChanged}.
-         *
-         * @param call the call object that is ready to make another call
-         */
-        public void onReadyToCall(SipAudioCall call) {
-            onChanged(call);
-        }
-
-        /**
-         * Called when a request is sent out to initiate a new call.
-         * The default implementation calls {@link #onChanged}.
-         *
-         * @param call the call object that carries out the audio call
-         */
-        public void onCalling(SipAudioCall call) {
-            onChanged(call);
-        }
-
-        /**
-         * Called when a new call comes in.
-         * The default implementation calls {@link #onChanged}.
-         *
-         * @param call the call object that carries out the audio call
-         * @param caller the SIP profile of the caller
-         */
-        public void onRinging(SipAudioCall call, SipProfile caller) {
-            onChanged(call);
-        }
-
-        /**
-         * Called when a RINGING response is received for the INVITE request
-         * sent. The default implementation calls {@link #onChanged}.
-         *
-         * @param call the call object that carries out the audio call
-         */
-        public void onRingingBack(SipAudioCall call) {
-            onChanged(call);
-        }
-
-        /**
-         * Called when the session is established.
-         * The default implementation calls {@link #onChanged}.
-         *
-         * @param call the call object that carries out the audio call
-         */
-        public void onCallEstablished(SipAudioCall call) {
-            onChanged(call);
-        }
-
-        /**
-         * Called when the session is terminated.
-         * The default implementation calls {@link #onChanged}.
-         *
-         * @param call the call object that carries out the audio call
-         */
-        public void onCallEnded(SipAudioCall call) {
-            onChanged(call);
-        }
-
-        /**
-         * Called when the peer is busy during session initialization.
-         * The default implementation calls {@link #onChanged}.
-         *
-         * @param call the call object that carries out the audio call
-         */
-        public void onCallBusy(SipAudioCall call) {
-            onChanged(call);
-        }
-
-        /**
-         * Called when the call is on hold.
-         * The default implementation calls {@link #onChanged}.
-         *
-         * @param call the call object that carries out the audio call
-         */
-        public void onCallHeld(SipAudioCall call) {
-            onChanged(call);
-        }
-
-        /**
-         * Called when an error occurs. The default implementation is no op.
-         *
-         * @param call the call object that carries out the audio call
-         * @param errorCode error code of this error
-         * @param errorMessage error message
-         * @see SipErrorCode
-         */
-        public void onError(SipAudioCall call, int errorCode,
-                String errorMessage) {
-            // no-op
-        }
-
-        /**
-         * Called when an event occurs and the corresponding callback is not
-         * overridden. The default implementation is no op. Error events are
-         * not re-directed to this callback and are handled in {@link #onError}.
-         */
-        public void onChanged(SipAudioCall call) {
-            // no-op
-        }
-    }
-
-    private Context mContext;
-    private SipProfile mLocalProfile;
-    private SipAudioCall.Listener mListener;
-    private SipSession mSipSession;
-    private SipSession mTransferringSession;
-
-    private long mSessionId = System.currentTimeMillis();
-    private String mPeerSd;
-
-    private AudioStream mAudioStream;
-    private AudioGroup mAudioGroup;
-
-    private boolean mInCall = false;
-    private boolean mMuted = false;
-    private boolean mHold = false;
-
-    private SipProfile mPendingCallRequest;
-    private WifiManager mWm;
-    private WifiManager.WifiLock mWifiHighPerfLock;
-
-    private int mErrorCode = SipErrorCode.NO_ERROR;
-    private String mErrorMessage;
-
-    /**
-     * Creates a call object with the local SIP profile.
-     * @param context the context for accessing system services such as
-     *        ringtone, audio, WIFI etc
-     */
-    public SipAudioCall(Context context, SipProfile localProfile) {
-        mContext = context;
-        mLocalProfile = localProfile;
-        mWm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
-    }
-
-    /**
-     * Sets the listener to listen to the audio call events. The method calls
-     * {@link #setListener setListener(listener, false)}.
-     *
-     * @param listener to listen to the audio call events of this object
-     * @see #setListener(Listener, boolean)
-     */
-    public void setListener(SipAudioCall.Listener listener) {
-        setListener(listener, false);
-    }
-
-    /**
-     * Sets the listener to listen to the audio call events. A
-     * {@link SipAudioCall} can only hold one listener at a time. Subsequent
-     * calls to this method override the previous listener.
-     *
-     * @param listener to listen to the audio call events of this object
-     * @param callbackImmediately set to true if the caller wants to be called
-     *      back immediately on the current state
-     */
-    public void setListener(SipAudioCall.Listener listener,
-            boolean callbackImmediately) {
-        mListener = listener;
-        try {
-            if ((listener == null) || !callbackImmediately) {
-                // do nothing
-            } else if (mErrorCode != SipErrorCode.NO_ERROR) {
-                listener.onError(this, mErrorCode, mErrorMessage);
-            } else if (mInCall) {
-                if (mHold) {
-                    listener.onCallHeld(this);
-                } else {
-                    listener.onCallEstablished(this);
-                }
-            } else {
-                int state = getState();
-                switch (state) {
-                    case SipSession.State.READY_TO_CALL:
-                        listener.onReadyToCall(this);
-                        break;
-                    case SipSession.State.INCOMING_CALL:
-                        listener.onRinging(this, getPeerProfile());
-                        break;
-                    case SipSession.State.OUTGOING_CALL:
-                        listener.onCalling(this);
-                        break;
-                    case SipSession.State.OUTGOING_CALL_RING_BACK:
-                        listener.onRingingBack(this);
-                        break;
-                }
-            }
-        } catch (Throwable t) {
-            Log.e(TAG, "setListener()", t);
-        }
-    }
-
-    /**
-     * Checks if the call is established.
-     *
-     * @return true if the call is established
-     */
-    public boolean isInCall() {
-        synchronized (this) {
-            return mInCall;
-        }
-    }
-
-    /**
-     * Checks if the call is on hold.
-     *
-     * @return true if the call is on hold
-     */
-    public boolean isOnHold() {
-        synchronized (this) {
-            return mHold;
-        }
-    }
-
-    /**
-     * Closes this object. This object is not usable after being closed.
-     */
-    public void close() {
-        close(true);
-    }
-
-    private synchronized void close(boolean closeRtp) {
-        if (closeRtp) stopCall(RELEASE_SOCKET);
-
-        mInCall = false;
-        mHold = false;
-        mSessionId = System.currentTimeMillis();
-        mErrorCode = SipErrorCode.NO_ERROR;
-        mErrorMessage = null;
-
-        if (mSipSession != null) {
-            mSipSession.setListener(null);
-            mSipSession = null;
-        }
-    }
-
-    /**
-     * Gets the local SIP profile.
-     *
-     * @return the local SIP profile
-     */
-    public SipProfile getLocalProfile() {
-        synchronized (this) {
-            return mLocalProfile;
-        }
-    }
-
-    /**
-     * Gets the peer's SIP profile.
-     *
-     * @return the peer's SIP profile
-     */
-    public SipProfile getPeerProfile() {
-        synchronized (this) {
-            return (mSipSession == null) ? null : mSipSession.getPeerProfile();
-        }
-    }
-
-    /**
-     * Gets the state of the {@link SipSession} that carries this call.
-     * The value returned must be one of the states in {@link SipSession.State}.
-     *
-     * @return the session state
-     */
-    public int getState() {
-        synchronized (this) {
-            if (mSipSession == null) return SipSession.State.READY_TO_CALL;
-            return mSipSession.getState();
-        }
-    }
-
-
-    /**
-     * Gets the {@link SipSession} that carries this call.
-     *
-     * @return the session object that carries this call
-     * @hide
-     */
-    public SipSession getSipSession() {
-        synchronized (this) {
-            return mSipSession;
-        }
-    }
-
-    private synchronized void transferToNewSession() {
-        if (mTransferringSession == null) return;
-        SipSession origin = mSipSession;
-        mSipSession = mTransferringSession;
-        mTransferringSession = null;
-
-        // stop the replaced call.
-        if (mAudioStream != null) {
-            mAudioStream.join(null);
-        } else {
-            try {
-                mAudioStream = new AudioStream(InetAddress.getByName(
-                        getLocalIp()));
-            } catch (Throwable t) {
-                Log.i(TAG, "transferToNewSession(): " + t);
-            }
-        }
-        if (origin != null) origin.endCall();
-        startAudio();
-    }
-
-    private SipSession.Listener createListener() {
-        return new SipSession.Listener() {
-            @Override
-            public void onCalling(SipSession session) {
-                Log.d(TAG, "calling... " + session);
-                Listener listener = mListener;
-                if (listener != null) {
-                    try {
-                        listener.onCalling(SipAudioCall.this);
-                    } catch (Throwable t) {
-                        Log.i(TAG, "onCalling(): " + t);
-                    }
-                }
-            }
-
-            @Override
-            public void onRingingBack(SipSession session) {
-                Log.d(TAG, "sip call ringing back: " + session);
-                Listener listener = mListener;
-                if (listener != null) {
-                    try {
-                        listener.onRingingBack(SipAudioCall.this);
-                    } catch (Throwable t) {
-                        Log.i(TAG, "onRingingBack(): " + t);
-                    }
-                }
-            }
-
-            @Override
-            public void onRinging(SipSession session,
-                    SipProfile peerProfile, String sessionDescription) {
-                // this callback is triggered only for reinvite.
-                synchronized (SipAudioCall.this) {
-                    if ((mSipSession == null) || !mInCall
-                            || !session.getCallId().equals(
-                                    mSipSession.getCallId())) {
-                        // should not happen
-                        session.endCall();
-                        return;
-                    }
-
-                    // session changing request
-                    try {
-                        String answer = createAnswer(sessionDescription).encode();
-                        mSipSession.answerCall(answer, SESSION_TIMEOUT);
-                    } catch (Throwable e) {
-                        Log.e(TAG, "onRinging()", e);
-                        session.endCall();
-                    }
-                }
-            }
-
-            @Override
-            public void onCallEstablished(SipSession session,
-                    String sessionDescription) {
-                mPeerSd = sessionDescription;
-                Log.v(TAG, "onCallEstablished()" + mPeerSd);
-
-                // TODO: how to notify the UI that the remote party is changed
-                if ((mTransferringSession != null)
-                        && (session == mTransferringSession)) {
-                    transferToNewSession();
-                    return;
-                }
-
-                Listener listener = mListener;
-                if (listener != null) {
-                    try {
-                        if (mHold) {
-                            listener.onCallHeld(SipAudioCall.this);
-                        } else {
-                            listener.onCallEstablished(SipAudioCall.this);
-                        }
-                    } catch (Throwable t) {
-                        Log.i(TAG, "onCallEstablished(): " + t);
-                    }
-                }
-            }
-
-            @Override
-            public void onCallEnded(SipSession session) {
-                Log.d(TAG, "sip call ended: " + session + " mSipSession:" + mSipSession);
-                // reset the trasnferring session if it is the one.
-                if (session == mTransferringSession) {
-                    mTransferringSession = null;
-                    return;
-                }
-                // or ignore the event if the original session is being
-                // transferred to the new one.
-                if ((mTransferringSession != null) ||
-                    (session != mSipSession)) return;
-
-                Listener listener = mListener;
-                if (listener != null) {
-                    try {
-                        listener.onCallEnded(SipAudioCall.this);
-                    } catch (Throwable t) {
-                        Log.i(TAG, "onCallEnded(): " + t);
-                    }
-                }
-                close();
-            }
-
-            @Override
-            public void onCallBusy(SipSession session) {
-                Log.d(TAG, "sip call busy: " + session);
-                Listener listener = mListener;
-                if (listener != null) {
-                    try {
-                        listener.onCallBusy(SipAudioCall.this);
-                    } catch (Throwable t) {
-                        Log.i(TAG, "onCallBusy(): " + t);
-                    }
-                }
-                close(false);
-            }
-
-            @Override
-            public void onCallChangeFailed(SipSession session, int errorCode,
-                    String message) {
-                Log.d(TAG, "sip call change failed: " + message);
-                mErrorCode = errorCode;
-                mErrorMessage = message;
-                Listener listener = mListener;
-                if (listener != null) {
-                    try {
-                        listener.onError(SipAudioCall.this, mErrorCode,
-                                message);
-                    } catch (Throwable t) {
-                        Log.i(TAG, "onCallBusy(): " + t);
-                    }
-                }
-            }
-
-            @Override
-            public void onError(SipSession session, int errorCode,
-                    String message) {
-                SipAudioCall.this.onError(errorCode, message);
-            }
-
-            @Override
-            public void onRegistering(SipSession session) {
-                // irrelevant
-            }
-
-            @Override
-            public void onRegistrationTimeout(SipSession session) {
-                // irrelevant
-            }
-
-            @Override
-            public void onRegistrationFailed(SipSession session, int errorCode,
-                    String message) {
-                // irrelevant
-            }
-
-            @Override
-            public void onRegistrationDone(SipSession session, int duration) {
-                // irrelevant
-            }
-
-            @Override
-            public void onCallTransferring(SipSession newSession,
-                    String sessionDescription) {
-                Log.v(TAG, "onCallTransferring mSipSession:"
-                        + mSipSession + " newSession:" + newSession);
-                mTransferringSession = newSession;
-                try {
-                    if (sessionDescription == null) {
-                        newSession.makeCall(newSession.getPeerProfile(),
-                                createOffer().encode(), TRANSFER_TIMEOUT);
-                    } else {
-                        String answer = createAnswer(sessionDescription).encode();
-                        newSession.answerCall(answer, SESSION_TIMEOUT);
-                    }
-                } catch (Throwable e) {
-                    Log.e(TAG, "onCallTransferring()", e);
-                    newSession.endCall();
-                }
-            }
-        };
-    }
-
-    private void onError(int errorCode, String message) {
-        Log.d(TAG, "sip session error: "
-                + SipErrorCode.toString(errorCode) + ": " + message);
-        mErrorCode = errorCode;
-        mErrorMessage = message;
-        Listener listener = mListener;
-        if (listener != null) {
-            try {
-                listener.onError(this, errorCode, message);
-            } catch (Throwable t) {
-                Log.i(TAG, "onError(): " + t);
-            }
-        }
-        synchronized (this) {
-            if ((errorCode == SipErrorCode.DATA_CONNECTION_LOST)
-                    || !isInCall()) {
-                close(true);
-            }
-        }
-    }
-
-    /**
-     * Attaches an incoming call to this call object.
-     *
-     * @param session the session that receives the incoming call
-     * @param sessionDescription the session description of the incoming call
-     * @throws SipException if the SIP service fails to attach this object to
-     *        the session or VOIP API is not supported by the device
-     * @see SipManager#isVoipSupported
-     */
-    public void attachCall(SipSession session, String sessionDescription)
-            throws SipException {
-        if (!SipManager.isVoipSupported(mContext)) {
-            throw new SipException("VOIP API is not supported");
-        }
-
-        synchronized (this) {
-            mSipSession = session;
-            mPeerSd = sessionDescription;
-            Log.v(TAG, "attachCall()" + mPeerSd);
-            try {
-                session.setListener(createListener());
-            } catch (Throwable e) {
-                Log.e(TAG, "attachCall()", e);
-                throwSipException(e);
-            }
-        }
-    }
-
-    /**
-     * Initiates an audio call to the specified profile. The attempt will be
-     * timed out if the call is not established within {@code timeout} seconds
-     * and {@link Listener#onError onError(SipAudioCall, SipErrorCode.TIME_OUT, String)}
-     * will be called.
-     *
-     * @param peerProfile the SIP profile to make the call to
-     * @param sipSession the {@link SipSession} for carrying out the call
-     * @param timeout the timeout value in seconds. Default value (defined by
-     *        SIP protocol) is used if {@code timeout} is zero or negative.
-     * @see Listener#onError
-     * @throws SipException if the SIP service fails to create a session for the
-     *        call or VOIP API is not supported by the device
-     * @see SipManager#isVoipSupported
-     */
-    public void makeCall(SipProfile peerProfile, SipSession sipSession,
-            int timeout) throws SipException {
-        if (!SipManager.isVoipSupported(mContext)) {
-            throw new SipException("VOIP API is not supported");
-        }
-
-        synchronized (this) {
-            mSipSession = sipSession;
-            try {
-                mAudioStream = new AudioStream(InetAddress.getByName(
-                        getLocalIp()));
-                sipSession.setListener(createListener());
-                sipSession.makeCall(peerProfile, createOffer().encode(),
-                        timeout);
-            } catch (IOException e) {
-                throw new SipException("makeCall()", e);
-            }
-        }
-    }
-
-    /**
-     * Ends a call.
-     * @throws SipException if the SIP service fails to end the call
-     */
-    public void endCall() throws SipException {
-        synchronized (this) {
-            stopCall(RELEASE_SOCKET);
-            mInCall = false;
-
-            // perform the above local ops first and then network op
-            if (mSipSession != null) mSipSession.endCall();
-        }
-    }
-
-    /**
-     * Puts a call on hold.  When succeeds, {@link Listener#onCallHeld} is
-     * called. The attempt will be timed out if the call is not established
-     * within {@code timeout} seconds and
-     * {@link Listener#onError onError(SipAudioCall, SipErrorCode.TIME_OUT, String)}
-     * will be called.
-     *
-     * @param timeout the timeout value in seconds. Default value (defined by
-     *        SIP protocol) is used if {@code timeout} is zero or negative.
-     * @see Listener#onError
-     * @throws SipException if the SIP service fails to hold the call
-     */
-    public void holdCall(int timeout) throws SipException {
-        synchronized (this) {
-            if (mHold) return;
-            if (mSipSession == null) {
-                throw new SipException("Not in a call to hold call");
-            }
-            mSipSession.changeCall(createHoldOffer().encode(), timeout);
-            mHold = true;
-            setAudioGroupMode();
-        }
-    }
-
-    /**
-     * Answers a call. The attempt will be timed out if the call is not
-     * established within {@code timeout} seconds and
-     * {@link Listener#onError onError(SipAudioCall, SipErrorCode.TIME_OUT, String)}
-     * will be called.
-     *
-     * @param timeout the timeout value in seconds. Default value (defined by
-     *        SIP protocol) is used if {@code timeout} is zero or negative.
-     * @see Listener#onError
-     * @throws SipException if the SIP service fails to answer the call
-     */
-    public void answerCall(int timeout) throws SipException {
-        synchronized (this) {
-            if (mSipSession == null) {
-                throw new SipException("No call to answer");
-            }
-            try {
-                mAudioStream = new AudioStream(InetAddress.getByName(
-                        getLocalIp()));
-                mSipSession.answerCall(createAnswer(mPeerSd).encode(), timeout);
-            } catch (IOException e) {
-                throw new SipException("answerCall()", e);
-            }
-        }
-    }
-
-    /**
-     * Continues a call that's on hold. When succeeds,
-     * {@link Listener#onCallEstablished} is called. The attempt will be timed
-     * out if the call is not established within {@code timeout} seconds and
-     * {@link Listener#onError onError(SipAudioCall, SipErrorCode.TIME_OUT, String)}
-     * will be called.
-     *
-     * @param timeout the timeout value in seconds. Default value (defined by
-     *        SIP protocol) is used if {@code timeout} is zero or negative.
-     * @see Listener#onError
-     * @throws SipException if the SIP service fails to unhold the call
-     */
-    public void continueCall(int timeout) throws SipException {
-        synchronized (this) {
-            if (!mHold) return;
-            mSipSession.changeCall(createContinueOffer().encode(), timeout);
-            mHold = false;
-            setAudioGroupMode();
-        }
-    }
-
-    private SimpleSessionDescription createOffer() {
-        SimpleSessionDescription offer =
-                new SimpleSessionDescription(mSessionId, getLocalIp());
-        AudioCodec[] codecs = AudioCodec.getCodecs();
-        Media media = offer.newMedia(
-                "audio", mAudioStream.getLocalPort(), 1, "RTP/AVP");
-        for (AudioCodec codec : AudioCodec.getCodecs()) {
-            media.setRtpPayload(codec.type, codec.rtpmap, codec.fmtp);
-        }
-        media.setRtpPayload(127, "telephone-event/8000", "0-15");
-        return offer;
-    }
-
-    private SimpleSessionDescription createAnswer(String offerSd) {
-        if (TextUtils.isEmpty(offerSd)) return createOffer();
-        SimpleSessionDescription offer =
-                new SimpleSessionDescription(offerSd);
-        SimpleSessionDescription answer =
-                new SimpleSessionDescription(mSessionId, getLocalIp());
-        AudioCodec codec = null;
-        for (Media media : offer.getMedia()) {
-            if ((codec == null) && (media.getPort() > 0)
-                    && "audio".equals(media.getType())
-                    && "RTP/AVP".equals(media.getProtocol())) {
-                // Find the first audio codec we supported.
-                for (int type : media.getRtpPayloadTypes()) {
-                    codec = AudioCodec.getCodec(type, media.getRtpmap(type),
-                            media.getFmtp(type));
-                    if (codec != null) {
-                        break;
-                    }
-                }
-                if (codec != null) {
-                    Media reply = answer.newMedia(
-                            "audio", mAudioStream.getLocalPort(), 1, "RTP/AVP");
-                    reply.setRtpPayload(codec.type, codec.rtpmap, codec.fmtp);
-
-                    // Check if DTMF is supported in the same media.
-                    for (int type : media.getRtpPayloadTypes()) {
-                        String rtpmap = media.getRtpmap(type);
-                        if ((type != codec.type) && (rtpmap != null)
-                                && rtpmap.startsWith("telephone-event")) {
-                            reply.setRtpPayload(
-                                    type, rtpmap, media.getFmtp(type));
-                        }
-                    }
-
-                    // Handle recvonly and sendonly.
-                    if (media.getAttribute("recvonly") != null) {
-                        answer.setAttribute("sendonly", "");
-                    } else if(media.getAttribute("sendonly") != null) {
-                        answer.setAttribute("recvonly", "");
-                    } else if(offer.getAttribute("recvonly") != null) {
-                        answer.setAttribute("sendonly", "");
-                    } else if(offer.getAttribute("sendonly") != null) {
-                        answer.setAttribute("recvonly", "");
-                    }
-                    continue;
-                }
-            }
-            // Reject the media.
-            Media reply = answer.newMedia(
-                    media.getType(), 0, 1, media.getProtocol());
-            for (String format : media.getFormats()) {
-                reply.setFormat(format, null);
-            }
-        }
-        if (codec == null) {
-            throw new IllegalStateException("Reject SDP: no suitable codecs");
-        }
-        return answer;
-    }
-
-    private SimpleSessionDescription createHoldOffer() {
-        SimpleSessionDescription offer = createContinueOffer();
-        offer.setAttribute("sendonly", "");
-        return offer;
-    }
-
-    private SimpleSessionDescription createContinueOffer() {
-        SimpleSessionDescription offer =
-                new SimpleSessionDescription(mSessionId, getLocalIp());
-        Media media = offer.newMedia(
-                "audio", mAudioStream.getLocalPort(), 1, "RTP/AVP");
-        AudioCodec codec = mAudioStream.getCodec();
-        media.setRtpPayload(codec.type, codec.rtpmap, codec.fmtp);
-        int dtmfType = mAudioStream.getDtmfType();
-        if (dtmfType != -1) {
-            media.setRtpPayload(dtmfType, "telephone-event/8000", "0-15");
-        }
-        return offer;
-    }
-
-    private void grabWifiHighPerfLock() {
-        if (mWifiHighPerfLock == null) {
-            Log.v(TAG, "acquire wifi high perf lock");
-            mWifiHighPerfLock = ((WifiManager)
-                    mContext.getSystemService(Context.WIFI_SERVICE))
-                    .createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TAG);
-            mWifiHighPerfLock.acquire();
-        }
-    }
-
-    private void releaseWifiHighPerfLock() {
-        if (mWifiHighPerfLock != null) {
-            Log.v(TAG, "release wifi high perf lock");
-            mWifiHighPerfLock.release();
-            mWifiHighPerfLock = null;
-        }
-    }
-
-    private boolean isWifiOn() {
-        return (mWm.getConnectionInfo().getBSSID() == null) ? false : true;
-    }
-
-    /** Toggles mute. */
-    public void toggleMute() {
-        synchronized (this) {
-            mMuted = !mMuted;
-            setAudioGroupMode();
-        }
-    }
-
-    /**
-     * Checks if the call is muted.
-     *
-     * @return true if the call is muted
-     */
-    public boolean isMuted() {
-        synchronized (this) {
-            return mMuted;
-        }
-    }
-
-    /**
-     * Puts the device to speaker mode.
-     * <p class="note"><strong>Note:</strong> Requires the
-     *   {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS} permission.</p>
-     *
-     * @param speakerMode set true to enable speaker mode; false to disable
-     */
-    public void setSpeakerMode(boolean speakerMode) {
-        synchronized (this) {
-            ((AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE))
-                    .setSpeakerphoneOn(speakerMode);
-            setAudioGroupMode();
-        }
-    }
-
-    private boolean isSpeakerOn() {
-        return ((AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE))
-                .isSpeakerphoneOn();
-    }
-
-    /**
-     * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2883</a>,
-     * event 0--9 maps to decimal
-     * value 0--9, '*' to 10, '#' to 11, event 'A'--'D' to 12--15, and event
-     * flash to 16. Currently, event flash is not supported.
-     *
-     * @param code the DTMF code to send. Value 0 to 15 (inclusive) are valid
-     *        inputs.
-     */
-    public void sendDtmf(int code) {
-        sendDtmf(code, null);
-    }
-
-    /**
-     * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2883</a>,
-     * event 0--9 maps to decimal
-     * value 0--9, '*' to 10, '#' to 11, event 'A'--'D' to 12--15, and event
-     * flash to 16. Currently, event flash is not supported.
-     *
-     * @param code the DTMF code to send. Value 0 to 15 (inclusive) are valid
-     *        inputs.
-     * @param result the result message to send when done
-     */
-    public void sendDtmf(int code, Message result) {
-        synchronized (this) {
-            AudioGroup audioGroup = getAudioGroup();
-            if ((audioGroup != null) && (mSipSession != null)
-                    && (SipSession.State.IN_CALL == getState())) {
-                Log.v(TAG, "send DTMF: " + code);
-                audioGroup.sendDtmf(code);
-            }
-            if (result != null) result.sendToTarget();
-        }
-    }
-
-    /**
-     * Gets the {@link AudioStream} object used in this call. The object
-     * represents the RTP stream that carries the audio data to and from the
-     * peer. The object may not be created before the call is established. And
-     * it is undefined after the call ends or the {@link #close} method is
-     * called.
-     *
-     * @return the {@link AudioStream} object or null if the RTP stream has not
-     *      yet been set up
-     * @hide
-     */
-    public AudioStream getAudioStream() {
-        synchronized (this) {
-            return mAudioStream;
-        }
-    }
-
-    /**
-     * Gets the {@link AudioGroup} object which the {@link AudioStream} object
-     * joins. The group object may not exist before the call is established.
-     * Also, the {@code AudioStream} may change its group during a call (e.g.,
-     * after the call is held/un-held). Finally, the {@code AudioGroup} object
-     * returned by this method is undefined after the call ends or the
-     * {@link #close} method is called. If a group object is set by
-     * {@link #setAudioGroup(AudioGroup)}, then this method returns that object.
-     *
-     * @return the {@link AudioGroup} object or null if the RTP stream has not
-     *      yet been set up
-     * @see #getAudioStream
-     * @hide
-     */
-    public AudioGroup getAudioGroup() {
-        synchronized (this) {
-            if (mAudioGroup != null) return mAudioGroup;
-            return ((mAudioStream == null) ? null : mAudioStream.getGroup());
-        }
-    }
-
-    /**
-     * Sets the {@link AudioGroup} object which the {@link AudioStream} object
-     * joins. If {@code audioGroup} is null, then the {@code AudioGroup} object
-     * will be dynamically created when needed. Note that the mode of the
-     * {@code AudioGroup} is not changed according to the audio settings (i.e.,
-     * hold, mute, speaker phone) of this object. This is mainly used to merge
-     * multiple {@code SipAudioCall} objects to form a conference call. The
-     * settings of the first object (that merges others) override others'.
-     *
-     * @see #getAudioStream
-     * @hide
-     */
-    public void setAudioGroup(AudioGroup group) {
-        synchronized (this) {
-            if ((mAudioStream != null) && (mAudioStream.getGroup() != null)) {
-                mAudioStream.join(group);
-            }
-            mAudioGroup = group;
-        }
-    }
-
-    /**
-     * Starts the audio for the established call. This method should be called
-     * after {@link Listener#onCallEstablished} is called.
-     * <p class="note"><strong>Note:</strong> Requires the
-     *   {@link android.Manifest.permission#RECORD_AUDIO},
-     *   {@link android.Manifest.permission#ACCESS_WIFI_STATE} and
-     *   {@link android.Manifest.permission#WAKE_LOCK} permissions.</p>
-     */
-    public void startAudio() {
-        try {
-            startAudioInternal();
-        } catch (UnknownHostException e) {
-            onError(SipErrorCode.PEER_NOT_REACHABLE, e.getMessage());
-        } catch (Throwable e) {
-            onError(SipErrorCode.CLIENT_ERROR, e.getMessage());
-        }
-    }
-
-    private synchronized void startAudioInternal() throws UnknownHostException {
-        if (mPeerSd == null) {
-            Log.v(TAG, "startAudioInternal() mPeerSd = null");
-            throw new IllegalStateException("mPeerSd = null");
-        }
-
-        stopCall(DONT_RELEASE_SOCKET);
-        mInCall = true;
-
-        // Run exact the same logic in createAnswer() to setup mAudioStream.
-        SimpleSessionDescription offer =
-                new SimpleSessionDescription(mPeerSd);
-        AudioStream stream = mAudioStream;
-        AudioCodec codec = null;
-        for (Media media : offer.getMedia()) {
-            if ((codec == null) && (media.getPort() > 0)
-                    && "audio".equals(media.getType())
-                    && "RTP/AVP".equals(media.getProtocol())) {
-                // Find the first audio codec we supported.
-                for (int type : media.getRtpPayloadTypes()) {
-                    codec = AudioCodec.getCodec(
-                            type, media.getRtpmap(type), media.getFmtp(type));
-                    if (codec != null) {
-                        break;
-                    }
-                }
-
-                if (codec != null) {
-                    // Associate with the remote host.
-                    String address = media.getAddress();
-                    if (address == null) {
-                        address = offer.getAddress();
-                    }
-                    stream.associate(InetAddress.getByName(address),
-                            media.getPort());
-
-                    stream.setDtmfType(-1);
-                    stream.setCodec(codec);
-                    // Check if DTMF is supported in the same media.
-                    for (int type : media.getRtpPayloadTypes()) {
-                        String rtpmap = media.getRtpmap(type);
-                        if ((type != codec.type) && (rtpmap != null)
-                                && rtpmap.startsWith("telephone-event")) {
-                            stream.setDtmfType(type);
-                        }
-                    }
-
-                    // Handle recvonly and sendonly.
-                    if (mHold) {
-                        stream.setMode(RtpStream.MODE_NORMAL);
-                    } else if (media.getAttribute("recvonly") != null) {
-                        stream.setMode(RtpStream.MODE_SEND_ONLY);
-                    } else if(media.getAttribute("sendonly") != null) {
-                        stream.setMode(RtpStream.MODE_RECEIVE_ONLY);
-                    } else if(offer.getAttribute("recvonly") != null) {
-                        stream.setMode(RtpStream.MODE_SEND_ONLY);
-                    } else if(offer.getAttribute("sendonly") != null) {
-                        stream.setMode(RtpStream.MODE_RECEIVE_ONLY);
-                    } else {
-                        stream.setMode(RtpStream.MODE_NORMAL);
-                    }
-                    break;
-                }
-            }
-        }
-        if (codec == null) {
-            throw new IllegalStateException("Reject SDP: no suitable codecs");
-        }
-
-        if (isWifiOn()) grabWifiHighPerfLock();
-
-        // AudioGroup logic:
-        AudioGroup audioGroup = getAudioGroup();
-        if (mHold) {
-            // don't create an AudioGroup here; doing so will fail if
-            // there's another AudioGroup out there that's active
-        } else {
-            if (audioGroup == null) audioGroup = new AudioGroup();
-            stream.join(audioGroup);
-        }
-        setAudioGroupMode();
-    }
-
-    // set audio group mode based on current audio configuration
-    private void setAudioGroupMode() {
-        AudioGroup audioGroup = getAudioGroup();
-        if (audioGroup != null) {
-            if (mHold) {
-                audioGroup.setMode(AudioGroup.MODE_ON_HOLD);
-            } else if (mMuted) {
-                audioGroup.setMode(AudioGroup.MODE_MUTED);
-            } else if (isSpeakerOn()) {
-                audioGroup.setMode(AudioGroup.MODE_ECHO_SUPPRESSION);
-            } else {
-                audioGroup.setMode(AudioGroup.MODE_NORMAL);
-            }
-        }
-    }
-
-    private void stopCall(boolean releaseSocket) {
-        Log.d(TAG, "stop audiocall");
-        releaseWifiHighPerfLock();
-        if (mAudioStream != null) {
-            mAudioStream.join(null);
-
-            if (releaseSocket) {
-                mAudioStream.release();
-                mAudioStream = null;
-            }
-        }
-    }
-
-    private String getLocalIp() {
-        return mSipSession.getLocalIp();
-    }
-
-    private void throwSipException(Throwable throwable) throws SipException {
-        if (throwable instanceof SipException) {
-            throw (SipException) throwable;
-        } else {
-            throw new SipException("", throwable);
-        }
-    }
-
-    private SipProfile getPeerProfile(SipSession session) {
-        return session.getPeerProfile();
-    }
-}
diff --git a/voip/java/android/net/sip/SipErrorCode.java b/voip/java/android/net/sip/SipErrorCode.java
deleted file mode 100644
index 509728f..0000000
--- a/voip/java/android/net/sip/SipErrorCode.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-/**
- * Defines error codes returned during SIP actions. For example, during
- * {@link SipRegistrationListener#onRegistrationFailed onRegistrationFailed()},
- * {@link SipSession.Listener#onError onError()},
- * {@link SipSession.Listener#onCallChangeFailed onCallChangeFailed()} and
- * {@link SipSession.Listener#onRegistrationFailed onRegistrationFailed()}.
- */
-public class SipErrorCode {
-    /** Not an error. */
-    public static final int NO_ERROR = 0;
-
-    /** When some socket error occurs. */
-    public static final int SOCKET_ERROR = -1;
-
-    /** When server responds with an error. */
-    public static final int SERVER_ERROR = -2;
-
-    /** When transaction is terminated unexpectedly. */
-    public static final int TRANSACTION_TERMINTED = -3;
-
-    /** When some error occurs on the device, possibly due to a bug. */
-    public static final int CLIENT_ERROR = -4;
-
-    /** When the transaction gets timed out. */
-    public static final int TIME_OUT = -5;
-
-    /** When the remote URI is not valid. */
-    public static final int INVALID_REMOTE_URI = -6;
-
-    /** When the peer is not reachable. */
-    public static final int PEER_NOT_REACHABLE = -7;
-
-    /** When invalid credentials are provided. */
-    public static final int INVALID_CREDENTIALS = -8;
-
-    /** The client is in a transaction and cannot initiate a new one. */
-    public static final int IN_PROGRESS = -9;
-
-    /** When data connection is lost. */
-    public static final int DATA_CONNECTION_LOST = -10;
-
-    /** Cross-domain authentication required. */
-    public static final int CROSS_DOMAIN_AUTHENTICATION = -11;
-
-    /** When the server is not reachable. */
-    public static final int SERVER_UNREACHABLE = -12;
-
-    public static String toString(int errorCode) {
-        switch (errorCode) {
-            case NO_ERROR:
-                return "NO_ERROR";
-            case SOCKET_ERROR:
-                return "SOCKET_ERROR";
-            case SERVER_ERROR:
-                return "SERVER_ERROR";
-            case TRANSACTION_TERMINTED:
-                return "TRANSACTION_TERMINTED";
-            case CLIENT_ERROR:
-                return "CLIENT_ERROR";
-            case TIME_OUT:
-                return "TIME_OUT";
-            case INVALID_REMOTE_URI:
-                return "INVALID_REMOTE_URI";
-            case PEER_NOT_REACHABLE:
-                return "PEER_NOT_REACHABLE";
-            case INVALID_CREDENTIALS:
-                return "INVALID_CREDENTIALS";
-            case IN_PROGRESS:
-                return "IN_PROGRESS";
-            case DATA_CONNECTION_LOST:
-                return "DATA_CONNECTION_LOST";
-            case CROSS_DOMAIN_AUTHENTICATION:
-                return "CROSS_DOMAIN_AUTHENTICATION";
-            case SERVER_UNREACHABLE:
-                return "SERVER_UNREACHABLE";
-            default:
-                return "UNKNOWN";
-        }
-    }
-
-    private SipErrorCode() {
-    }
-}
diff --git a/voip/java/android/net/sip/SipException.java b/voip/java/android/net/sip/SipException.java
deleted file mode 100644
index 0339395..0000000
--- a/voip/java/android/net/sip/SipException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-/**
- * Indicates a general SIP-related exception.
- */
-public class SipException extends Exception {
-    public SipException() {
-    }
-
-    public SipException(String message) {
-        super(message);
-    }
-
-    public SipException(String message, Throwable cause) {
-        // we want to eliminate the dependency on javax.sip.SipException
-        super(message, ((cause instanceof javax.sip.SipException)
-                && (cause.getCause() != null))
-                ? cause.getCause()
-                : cause);
-    }
-}
diff --git a/voip/java/android/net/sip/SipManager.java b/voip/java/android/net/sip/SipManager.java
deleted file mode 100644
index 74c3672..0000000
--- a/voip/java/android/net/sip/SipManager.java
+++ /dev/null
@@ -1,623 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.util.Log;
-
-import java.text.ParseException;
-
-/**
- * Provides APIs for SIP tasks, such as initiating SIP connections, and provides access to related
- * SIP services. This class is the starting point for any SIP actions. You can acquire an instance
- * of it with {@link #newInstance newInstance()}.</p>
- * <p>The APIs in this class allows you to:</p>
- * <ul>
- * <li>Create a {@link SipSession} to get ready for making calls or listen for incoming calls. See
- * {@link #createSipSession createSipSession()} and {@link #getSessionFor getSessionFor()}.</li>
- * <li>Initiate and receive generic SIP calls or audio-only SIP calls. Generic SIP calls may
- * be video, audio, or other, and are initiated with {@link #open open()}. Audio-only SIP calls
- * should be handled with a {@link SipAudioCall}, which you can acquire with {@link
- * #makeAudioCall makeAudioCall()} and {@link #takeAudioCall takeAudioCall()}.</li>
- * <li>Register and unregister with a SIP service provider, with
- *      {@link #register register()} and {@link #unregister unregister()}.</li>
- * <li>Verify session connectivity, with {@link #isOpened isOpened()} and
- *      {@link #isRegistered isRegistered()}.</li>
- * </ul>
- * <p class="note"><strong>Note:</strong> Not all Android-powered devices support VOIP calls using
- * SIP. You should always call {@link android.net.sip.SipManager#isVoipSupported
- * isVoipSupported()} to verify that the device supports VOIP calling and {@link
- * android.net.sip.SipManager#isApiSupported isApiSupported()} to verify that the device supports
- * the SIP APIs. Your application must also request the {@link
- * android.Manifest.permission#INTERNET} and {@link android.Manifest.permission#USE_SIP}
- * permissions.</p>
- *
- * <div class="special reference">
- * <h3>Developer Guides</h3>
- * <p>For more information about using SIP, read the
- * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a>
- * developer guide.</p>
- * </div>
- */
-public class SipManager {
-    /**
-     * The result code to be sent back with the incoming call
-     * {@link PendingIntent}.
-     * @see #open(SipProfile, PendingIntent, SipRegistrationListener)
-     */
-    public static final int INCOMING_CALL_RESULT_CODE = 101;
-
-    /**
-     * Key to retrieve the call ID from an incoming call intent.
-     * @see #open(SipProfile, PendingIntent, SipRegistrationListener)
-     */
-    public static final String EXTRA_CALL_ID = "android:sipCallID";
-
-    /**
-     * Key to retrieve the offered session description from an incoming call
-     * intent.
-     * @see #open(SipProfile, PendingIntent, SipRegistrationListener)
-     */
-    public static final String EXTRA_OFFER_SD = "android:sipOfferSD";
-
-    /**
-     * Action to broadcast when SipService is up.
-     * Internal use only.
-     * @hide
-     */
-    public static final String ACTION_SIP_SERVICE_UP =
-            "android.net.sip.SIP_SERVICE_UP";
-    /**
-     * Action string for the incoming call intent for the Phone app.
-     * Internal use only.
-     * @hide
-     */
-    public static final String ACTION_SIP_INCOMING_CALL =
-            "com.android.phone.SIP_INCOMING_CALL";
-    /**
-     * Action string for the add-phone intent.
-     * Internal use only.
-     * @hide
-     */
-    public static final String ACTION_SIP_ADD_PHONE =
-            "com.android.phone.SIP_ADD_PHONE";
-    /**
-     * Action string for the remove-phone intent.
-     * Internal use only.
-     * @hide
-     */
-    public static final String ACTION_SIP_REMOVE_PHONE =
-            "com.android.phone.SIP_REMOVE_PHONE";
-    /**
-     * Part of the ACTION_SIP_ADD_PHONE and ACTION_SIP_REMOVE_PHONE intents.
-     * Internal use only.
-     * @hide
-     */
-    public static final String EXTRA_LOCAL_URI = "android:localSipUri";
-
-    private static final String TAG = "SipManager";
-
-    private ISipService mSipService;
-    private Context mContext;
-
-    /**
-     * Creates a manager instance. Returns null if SIP API is not supported.
-     *
-     * @param context application context for creating the manager object
-     * @return the manager instance or null if SIP API is not supported
-     */
-    public static SipManager newInstance(Context context) {
-        return (isApiSupported(context) ? new SipManager(context) : null);
-    }
-
-    /**
-     * Returns true if the SIP API is supported by the system.
-     */
-    public static boolean isApiSupported(Context context) {
-        return context.getPackageManager().hasSystemFeature(
-                PackageManager.FEATURE_SIP);
-    }
-
-    /**
-     * Returns true if the system supports SIP-based VOIP API.
-     */
-    public static boolean isVoipSupported(Context context) {
-        return context.getPackageManager().hasSystemFeature(
-                PackageManager.FEATURE_SIP_VOIP) && isApiSupported(context);
-    }
-
-    /**
-     * Returns true if SIP is only available on WIFI.
-     */
-    public static boolean isSipWifiOnly(Context context) {
-        return context.getResources().getBoolean(
-                com.android.internal.R.bool.config_sip_wifi_only);
-    }
-
-    private SipManager(Context context) {
-        mContext = context;
-        createSipService();
-    }
-
-    private void createSipService() {
-        IBinder b = ServiceManager.getService(Context.SIP_SERVICE);
-        mSipService = ISipService.Stub.asInterface(b);
-    }
-
-    /**
-     * Opens the profile for making generic SIP calls. The caller may make subsequent calls
-     * through {@link #makeAudioCall}. If one also wants to receive calls on the
-     * profile, use
-     * {@link #open(SipProfile, PendingIntent, SipRegistrationListener)}
-     * instead.
-     *
-     * @param localProfile the SIP profile to make calls from
-     * @throws SipException if the profile contains incorrect settings or
-     *      calling the SIP service results in an error
-     */
-    public void open(SipProfile localProfile) throws SipException {
-        try {
-            mSipService.open(localProfile);
-        } catch (RemoteException e) {
-            throw new SipException("open()", e);
-        }
-    }
-
-    /**
-     * Opens the profile for making calls and/or receiving generic SIP calls. The caller may
-     * make subsequent calls through {@link #makeAudioCall}. If the
-     * auto-registration option is enabled in the profile, the SIP service
-     * will register the profile to the corresponding SIP provider periodically
-     * in order to receive calls from the provider. When the SIP service
-     * receives a new call, it will send out an intent with the provided action
-     * string. The intent contains a call ID extra and an offer session
-     * description string extra. Use {@link #getCallId} and
-     * {@link #getOfferSessionDescription} to retrieve those extras.
-     *
-     * @param localProfile the SIP profile to receive incoming calls for
-     * @param incomingCallPendingIntent When an incoming call is received, the
-     *      SIP service will call
-     *      {@link PendingIntent#send(Context, int, Intent)} to send back the
-     *      intent to the caller with {@link #INCOMING_CALL_RESULT_CODE} as the
-     *      result code and the intent to fill in the call ID and session
-     *      description information. It cannot be null.
-     * @param listener to listen to registration events; can be null
-     * @see #getCallId
-     * @see #getOfferSessionDescription
-     * @see #takeAudioCall
-     * @throws NullPointerException if {@code incomingCallPendingIntent} is null
-     * @throws SipException if the profile contains incorrect settings or
-     *      calling the SIP service results in an error
-     * @see #isIncomingCallIntent
-     * @see #getCallId
-     * @see #getOfferSessionDescription
-     */
-    public void open(SipProfile localProfile,
-            PendingIntent incomingCallPendingIntent,
-            SipRegistrationListener listener) throws SipException {
-        if (incomingCallPendingIntent == null) {
-            throw new NullPointerException(
-                    "incomingCallPendingIntent cannot be null");
-        }
-        try {
-            mSipService.open3(localProfile, incomingCallPendingIntent,
-                    createRelay(listener, localProfile.getUriString()));
-        } catch (RemoteException e) {
-            throw new SipException("open()", e);
-        }
-    }
-
-    /**
-     * Sets the listener to listen to registration events. No effect if the
-     * profile has not been opened to receive calls (see
-     * {@link #open(SipProfile, PendingIntent, SipRegistrationListener)}).
-     *
-     * @param localProfileUri the URI of the profile
-     * @param listener to listen to registration events; can be null
-     * @throws SipException if calling the SIP service results in an error
-     */
-    public void setRegistrationListener(String localProfileUri,
-            SipRegistrationListener listener) throws SipException {
-        try {
-            mSipService.setRegistrationListener(
-                    localProfileUri, createRelay(listener, localProfileUri));
-        } catch (RemoteException e) {
-            throw new SipException("setRegistrationListener()", e);
-        }
-    }
-
-    /**
-     * Closes the specified profile to not make/receive calls. All the resources
-     * that were allocated to the profile are also released.
-     *
-     * @param localProfileUri the URI of the profile to close
-     * @throws SipException if calling the SIP service results in an error
-     */
-    public void close(String localProfileUri) throws SipException {
-        try {
-            mSipService.close(localProfileUri);
-        } catch (RemoteException e) {
-            throw new SipException("close()", e);
-        }
-    }
-
-    /**
-     * Checks if the specified profile is opened in the SIP service for
-     * making and/or receiving calls.
-     *
-     * @param localProfileUri the URI of the profile in question
-     * @return true if the profile is enabled to receive calls
-     * @throws SipException if calling the SIP service results in an error
-     */
-    public boolean isOpened(String localProfileUri) throws SipException {
-        try {
-            return mSipService.isOpened(localProfileUri);
-        } catch (RemoteException e) {
-            throw new SipException("isOpened()", e);
-        }
-    }
-
-    /**
-     * Checks if the SIP service has successfully registered the profile to the
-     * SIP provider (specified in the profile) for receiving calls. Returning
-     * true from this method also implies the profile is opened
-     * ({@link #isOpened}).
-     *
-     * @param localProfileUri the URI of the profile in question
-     * @return true if the profile is registered to the SIP provider; false if
-     *        the profile has not been opened in the SIP service or the SIP
-     *        service has not yet successfully registered the profile to the SIP
-     *        provider
-     * @throws SipException if calling the SIP service results in an error
-     */
-    public boolean isRegistered(String localProfileUri) throws SipException {
-        try {
-            return mSipService.isRegistered(localProfileUri);
-        } catch (RemoteException e) {
-            throw new SipException("isRegistered()", e);
-        }
-    }
-
-    /**
-     * Creates a {@link SipAudioCall} to make a call. The attempt will be timed
-     * out if the call is not established within {@code timeout} seconds and
-     * {@link SipAudioCall.Listener#onError onError(SipAudioCall, SipErrorCode.TIME_OUT, String)}
-     * will be called.
-     *
-     * @param localProfile the SIP profile to make the call from
-     * @param peerProfile the SIP profile to make the call to
-     * @param listener to listen to the call events from {@link SipAudioCall};
-     *      can be null
-     * @param timeout the timeout value in seconds. Default value (defined by
-     *        SIP protocol) is used if {@code timeout} is zero or negative.
-     * @return a {@link SipAudioCall} object
-     * @throws SipException if calling the SIP service results in an error or
-     *      VOIP API is not supported by the device
-     * @see SipAudioCall.Listener#onError
-     * @see #isVoipSupported
-     */
-    public SipAudioCall makeAudioCall(SipProfile localProfile,
-            SipProfile peerProfile, SipAudioCall.Listener listener, int timeout)
-            throws SipException {
-        if (!isVoipSupported(mContext)) {
-            throw new SipException("VOIP API is not supported");
-        }
-        SipAudioCall call = new SipAudioCall(mContext, localProfile);
-        call.setListener(listener);
-        SipSession s = createSipSession(localProfile, null);
-        call.makeCall(peerProfile, s, timeout);
-        return call;
-    }
-
-    /**
-     * Creates a {@link SipAudioCall} to make an audio call. The attempt will be
-     * timed out if the call is not established within {@code timeout} seconds
-     * and
-     * {@link SipAudioCall.Listener#onError onError(SipAudioCall, SipErrorCode.TIME_OUT, String)}
-     * will be called.
-     *
-     * @param localProfileUri URI of the SIP profile to make the call from
-     * @param peerProfileUri URI of the SIP profile to make the call to
-     * @param listener to listen to the call events from {@link SipAudioCall};
-     *      can be null
-     * @param timeout the timeout value in seconds. Default value (defined by
-     *        SIP protocol) is used if {@code timeout} is zero or negative.
-     * @return a {@link SipAudioCall} object
-     * @throws SipException if calling the SIP service results in an error or
-     *      VOIP API is not supported by the device
-     * @see SipAudioCall.Listener#onError
-     * @see #isVoipSupported
-     */
-    public SipAudioCall makeAudioCall(String localProfileUri,
-            String peerProfileUri, SipAudioCall.Listener listener, int timeout)
-            throws SipException {
-        if (!isVoipSupported(mContext)) {
-            throw new SipException("VOIP API is not supported");
-        }
-        try {
-            return makeAudioCall(
-                    new SipProfile.Builder(localProfileUri).build(),
-                    new SipProfile.Builder(peerProfileUri).build(), listener,
-                    timeout);
-        } catch (ParseException e) {
-            throw new SipException("build SipProfile", e);
-        }
-    }
-
-    /**
-     * Creates a {@link SipAudioCall} to take an incoming call. Before the call
-     * is returned, the listener will receive a
-     * {@link SipAudioCall.Listener#onRinging}
-     * callback.
-     *
-     * @param incomingCallIntent the incoming call broadcast intent
-     * @param listener to listen to the call events from {@link SipAudioCall};
-     *      can be null
-     * @return a {@link SipAudioCall} object
-     * @throws SipException if calling the SIP service results in an error
-     */
-    public SipAudioCall takeAudioCall(Intent incomingCallIntent,
-            SipAudioCall.Listener listener) throws SipException {
-        if (incomingCallIntent == null) {
-            throw new SipException("Cannot retrieve session with null intent");
-        }
-
-        String callId = getCallId(incomingCallIntent);
-        if (callId == null) {
-            throw new SipException("Call ID missing in incoming call intent");
-        }
-
-        String offerSd = getOfferSessionDescription(incomingCallIntent);
-        if (offerSd == null) {
-            throw new SipException("Session description missing in incoming "
-                    + "call intent");
-        }
-
-        try {
-            ISipSession session = mSipService.getPendingSession(callId);
-            if (session == null) {
-                throw new SipException("No pending session for the call");
-            }
-            SipAudioCall call = new SipAudioCall(
-                    mContext, session.getLocalProfile());
-            call.attachCall(new SipSession(session), offerSd);
-            call.setListener(listener);
-            return call;
-        } catch (Throwable t) {
-            throw new SipException("takeAudioCall()", t);
-        }
-    }
-
-    /**
-     * Checks if the intent is an incoming call broadcast intent.
-     *
-     * @param intent the intent in question
-     * @return true if the intent is an incoming call broadcast intent
-     */
-    public static boolean isIncomingCallIntent(Intent intent) {
-        if (intent == null) return false;
-        String callId = getCallId(intent);
-        String offerSd = getOfferSessionDescription(intent);
-        return ((callId != null) && (offerSd != null));
-    }
-
-    /**
-     * Gets the call ID from the specified incoming call broadcast intent.
-     *
-     * @param incomingCallIntent the incoming call broadcast intent
-     * @return the call ID or null if the intent does not contain it
-     */
-    public static String getCallId(Intent incomingCallIntent) {
-        return incomingCallIntent.getStringExtra(EXTRA_CALL_ID);
-    }
-
-    /**
-     * Gets the offer session description from the specified incoming call
-     * broadcast intent.
-     *
-     * @param incomingCallIntent the incoming call broadcast intent
-     * @return the offer session description or null if the intent does not
-     *      have it
-     */
-    public static String getOfferSessionDescription(Intent incomingCallIntent) {
-        return incomingCallIntent.getStringExtra(EXTRA_OFFER_SD);
-    }
-
-    /**
-     * Creates an incoming call broadcast intent.
-     *
-     * @param callId the call ID of the incoming call
-     * @param sessionDescription the session description of the incoming call
-     * @return the incoming call intent
-     * @hide
-     */
-    public static Intent createIncomingCallBroadcast(String callId,
-            String sessionDescription) {
-        Intent intent = new Intent();
-        intent.putExtra(EXTRA_CALL_ID, callId);
-        intent.putExtra(EXTRA_OFFER_SD, sessionDescription);
-        return intent;
-    }
-
-    /**
-     * Manually registers the profile to the corresponding SIP provider for
-     * receiving calls.
-     * {@link #open(SipProfile, PendingIntent, SipRegistrationListener)} is
-     * still needed to be called at least once in order for the SIP service to
-     * notify the caller with the {@link android.app.PendingIntent} when an incoming call is
-     * received.
-     *
-     * @param localProfile the SIP profile to register with
-     * @param expiryTime registration expiration time (in seconds)
-     * @param listener to listen to the registration events
-     * @throws SipException if calling the SIP service results in an error
-     */
-    public void register(SipProfile localProfile, int expiryTime,
-            SipRegistrationListener listener) throws SipException {
-        try {
-            ISipSession session = mSipService.createSession(localProfile,
-                    createRelay(listener, localProfile.getUriString()));
-            if (session == null) {
-                throw new SipException(
-                        "SipService.createSession() returns null");
-            }
-            session.register(expiryTime);
-        } catch (RemoteException e) {
-            throw new SipException("register()", e);
-        }
-    }
-
-    /**
-     * Manually unregisters the profile from the corresponding SIP provider for
-     * stop receiving further calls. This may interference with the auto
-     * registration process in the SIP service if the auto-registration option
-     * in the profile is enabled.
-     *
-     * @param localProfile the SIP profile to register with
-     * @param listener to listen to the registration events
-     * @throws SipException if calling the SIP service results in an error
-     */
-    public void unregister(SipProfile localProfile,
-            SipRegistrationListener listener) throws SipException {
-        try {
-            ISipSession session = mSipService.createSession(localProfile,
-                    createRelay(listener, localProfile.getUriString()));
-            if (session == null) {
-                throw new SipException(
-                        "SipService.createSession() returns null");
-            }
-            session.unregister();
-        } catch (RemoteException e) {
-            throw new SipException("unregister()", e);
-        }
-    }
-
-    /**
-     * Gets the {@link SipSession} that handles the incoming call. For audio
-     * calls, consider to use {@link SipAudioCall} to handle the incoming call.
-     * See {@link #takeAudioCall}. Note that the method may be called only once
-     * for the same intent. For subsequent calls on the same intent, the method
-     * returns null.
-     *
-     * @param incomingCallIntent the incoming call broadcast intent
-     * @return the session object that handles the incoming call
-     */
-    public SipSession getSessionFor(Intent incomingCallIntent)
-            throws SipException {
-        try {
-            String callId = getCallId(incomingCallIntent);
-            ISipSession s = mSipService.getPendingSession(callId);
-            return ((s == null) ? null : new SipSession(s));
-        } catch (RemoteException e) {
-            throw new SipException("getSessionFor()", e);
-        }
-    }
-
-    private static ISipSessionListener createRelay(
-            SipRegistrationListener listener, String uri) {
-        return ((listener == null) ? null : new ListenerRelay(listener, uri));
-    }
-
-    /**
-     * Creates a {@link SipSession} with the specified profile. Use other
-     * methods, if applicable, instead of interacting with {@link SipSession}
-     * directly.
-     *
-     * @param localProfile the SIP profile the session is associated with
-     * @param listener to listen to SIP session events
-     */
-    public SipSession createSipSession(SipProfile localProfile,
-            SipSession.Listener listener) throws SipException {
-        try {
-            ISipSession s = mSipService.createSession(localProfile, null);
-            if (s == null) {
-                throw new SipException(
-                        "Failed to create SipSession; network unavailable?");
-            }
-            return new SipSession(s, listener);
-        } catch (RemoteException e) {
-            throw new SipException("createSipSession()", e);
-        }
-    }
-
-    /**
-     * Gets the list of profiles hosted by the SIP service. The user information
-     * (username, password and display name) are crossed out.
-     * @hide
-     */
-    public SipProfile[] getListOfProfiles() {
-        try {
-            return mSipService.getListOfProfiles();
-        } catch (RemoteException e) {
-            return new SipProfile[0];
-        }
-    }
-
-    private static class ListenerRelay extends SipSessionAdapter {
-        private SipRegistrationListener mListener;
-        private String mUri;
-
-        // listener must not be null
-        public ListenerRelay(SipRegistrationListener listener, String uri) {
-            mListener = listener;
-            mUri = uri;
-        }
-
-        private String getUri(ISipSession session) {
-            try {
-                return ((session == null)
-                        ? mUri
-                        : session.getLocalProfile().getUriString());
-            } catch (Throwable e) {
-                // SipService died? SIP stack died?
-                Log.w(TAG, "getUri(): " + e);
-                return null;
-            }
-        }
-
-        @Override
-        public void onRegistering(ISipSession session) {
-            mListener.onRegistering(getUri(session));
-        }
-
-        @Override
-        public void onRegistrationDone(ISipSession session, int duration) {
-            long expiryTime = duration;
-            if (duration > 0) expiryTime += System.currentTimeMillis();
-            mListener.onRegistrationDone(getUri(session), expiryTime);
-        }
-
-        @Override
-        public void onRegistrationFailed(ISipSession session, int errorCode,
-                String message) {
-            mListener.onRegistrationFailed(getUri(session), errorCode, message);
-        }
-
-        @Override
-        public void onRegistrationTimeout(ISipSession session) {
-            mListener.onRegistrationFailed(getUri(session),
-                    SipErrorCode.TIME_OUT, "registration timed out");
-        }
-    }
-}
diff --git a/voip/java/android/net/sip/SipProfile.aidl b/voip/java/android/net/sip/SipProfile.aidl
deleted file mode 100644
index 3b6f68f..0000000
--- a/voip/java/android/net/sip/SipProfile.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2010, 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.net.sip;
-
-parcelable SipProfile;
diff --git a/voip/java/android/net/sip/SipProfile.java b/voip/java/android/net/sip/SipProfile.java
deleted file mode 100644
index 0ef754c..0000000
--- a/voip/java/android/net/sip/SipProfile.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.text.ParseException;
-import javax.sip.InvalidArgumentException;
-import javax.sip.ListeningPoint;
-import javax.sip.PeerUnavailableException;
-import javax.sip.SipFactory;
-import javax.sip.address.Address;
-import javax.sip.address.AddressFactory;
-import javax.sip.address.SipURI;
-import javax.sip.address.URI;
-
-/**
- * Defines a SIP profile, including a SIP account, domain and server information.
- * <p>You can create a {@link SipProfile} using {@link
- * SipProfile.Builder}. You can also retrieve one from a {@link SipSession}, using {@link
- * SipSession#getLocalProfile} and {@link SipSession#getPeerProfile}.</p>
- *
- * <div class="special reference">
- * <h3>Developer Guides</h3>
- * <p>For more information about using SIP, read the
- * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a>
- * developer guide.</p>
- * </div>
- */
-public class SipProfile implements Parcelable, Serializable, Cloneable {
-    private static final long serialVersionUID = 1L;
-    private static final int DEFAULT_PORT = 5060;
-    private static final String TCP = "TCP";
-    private static final String UDP = "UDP";
-    private Address mAddress;
-    private String mProxyAddress;
-    private String mPassword;
-    private String mDomain;
-    private String mProtocol = UDP;
-    private String mProfileName;
-    private String mAuthUserName;
-    private int mPort = DEFAULT_PORT;
-    private boolean mSendKeepAlive = false;
-    private boolean mAutoRegistration = true;
-    private transient int mCallingUid = 0;
-
-    public static final Parcelable.Creator<SipProfile> CREATOR =
-            new Parcelable.Creator<SipProfile>() {
-                public SipProfile createFromParcel(Parcel in) {
-                    return new SipProfile(in);
-                }
-
-                public SipProfile[] newArray(int size) {
-                    return new SipProfile[size];
-                }
-            };
-
-    /**
-     * Helper class for creating a {@link SipProfile}.
-     */
-    public static class Builder {
-        private AddressFactory mAddressFactory;
-        private SipProfile mProfile = new SipProfile();
-        private SipURI mUri;
-        private String mDisplayName;
-        private String mProxyAddress;
-
-        {
-            try {
-                mAddressFactory =
-                        SipFactory.getInstance().createAddressFactory();
-            } catch (PeerUnavailableException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        /**
-         * Creates a builder based on the given profile.
-         */
-        public Builder(SipProfile profile) {
-            if (profile == null) throw new NullPointerException();
-            try {
-                mProfile = (SipProfile) profile.clone();
-            } catch (CloneNotSupportedException e) {
-                throw new RuntimeException("should not occur", e);
-            }
-            mProfile.mAddress = null;
-            mUri = profile.getUri();
-            mUri.setUserPassword(profile.getPassword());
-            mDisplayName = profile.getDisplayName();
-            mProxyAddress = profile.getProxyAddress();
-            mProfile.mPort = profile.getPort();
-        }
-
-        /**
-         * Constructor.
-         *
-         * @param uriString the URI string as "sip:<user_name>@<domain>"
-         * @throws ParseException if the string is not a valid URI
-         */
-        public Builder(String uriString) throws ParseException {
-            if (uriString == null) {
-                throw new NullPointerException("uriString cannot be null");
-            }
-            URI uri = mAddressFactory.createURI(fix(uriString));
-            if (uri instanceof SipURI) {
-                mUri = (SipURI) uri;
-            } else {
-                throw new ParseException(uriString + " is not a SIP URI", 0);
-            }
-            mProfile.mDomain = mUri.getHost();
-        }
-
-        /**
-         * Constructor.
-         *
-         * @param username username of the SIP account
-         * @param serverDomain the SIP server domain; if the network address
-         *      is different from the domain, use {@link #setOutboundProxy} to
-         *      set server address
-         * @throws ParseException if the parameters are not valid
-         */
-        public Builder(String username, String serverDomain)
-                throws ParseException {
-            if ((username == null) || (serverDomain == null)) {
-                throw new NullPointerException(
-                        "username and serverDomain cannot be null");
-            }
-            mUri = mAddressFactory.createSipURI(username, serverDomain);
-            mProfile.mDomain = serverDomain;
-        }
-
-        private String fix(String uriString) {
-            return (uriString.trim().toLowerCase().startsWith("sip:")
-                    ? uriString
-                    : "sip:" + uriString);
-        }
-
-        /**
-         * Sets the username used for authentication.
-         *
-         * @param name authentication username of the profile
-         * @return this builder object
-         */
-        public Builder setAuthUserName(String name) {
-            mProfile.mAuthUserName = name;
-            return this;
-        }
-
-        /**
-         * Sets the name of the profile. This name is given by user.
-         *
-         * @param name name of the profile
-         * @return this builder object
-         */
-        public Builder setProfileName(String name) {
-            mProfile.mProfileName = name;
-            return this;
-        }
-
-        /**
-         * Sets the password of the SIP account
-         *
-         * @param password password of the SIP account
-         * @return this builder object
-         */
-        public Builder setPassword(String password) {
-            mUri.setUserPassword(password);
-            return this;
-        }
-
-        /**
-         * Sets the port number of the server. By default, it is 5060.
-         *
-         * @param port port number of the server
-         * @return this builder object
-         * @throws IllegalArgumentException if the port number is out of range
-         */
-        public Builder setPort(int port) throws IllegalArgumentException {
-            if ((port > 65535) || (port < 1000)) {
-                throw new IllegalArgumentException("incorrect port arugment: " + port);
-            }
-            mProfile.mPort = port;
-            return this;
-        }
-
-        /**
-         * Sets the protocol used to connect to the SIP server. Currently,
-         * only "UDP" and "TCP" are supported.
-         *
-         * @param protocol the protocol string
-         * @return this builder object
-         * @throws IllegalArgumentException if the protocol is not recognized
-         */
-        public Builder setProtocol(String protocol)
-                throws IllegalArgumentException {
-            if (protocol == null) {
-                throw new NullPointerException("protocol cannot be null");
-            }
-            protocol = protocol.toUpperCase();
-            if (!protocol.equals(UDP) && !protocol.equals(TCP)) {
-                throw new IllegalArgumentException(
-                        "unsupported protocol: " + protocol);
-            }
-            mProfile.mProtocol = protocol;
-            return this;
-        }
-
-        /**
-         * Sets the outbound proxy of the SIP server.
-         *
-         * @param outboundProxy the network address of the outbound proxy
-         * @return this builder object
-         */
-        public Builder setOutboundProxy(String outboundProxy) {
-            mProxyAddress = outboundProxy;
-            return this;
-        }
-
-        /**
-         * Sets the display name of the user.
-         *
-         * @param displayName display name of the user
-         * @return this builder object
-         */
-        public Builder setDisplayName(String displayName) {
-            mDisplayName = displayName;
-            return this;
-        }
-
-        /**
-         * Sets the send keep-alive flag.
-         *
-         * @param flag true if sending keep-alive message is required,
-         *      false otherwise
-         * @return this builder object
-         */
-        public Builder setSendKeepAlive(boolean flag) {
-            mProfile.mSendKeepAlive = flag;
-            return this;
-        }
-
-
-        /**
-         * Sets the auto. registration flag.
-         *
-         * @param flag true if the profile will be registered automatically,
-         *      false otherwise
-         * @return this builder object
-         */
-        public Builder setAutoRegistration(boolean flag) {
-            mProfile.mAutoRegistration = flag;
-            return this;
-        }
-
-        /**
-         * Builds and returns the SIP profile object.
-         *
-         * @return the profile object created
-         */
-        public SipProfile build() {
-            // remove password from URI
-            mProfile.mPassword = mUri.getUserPassword();
-            mUri.setUserPassword(null);
-            try {
-                if (!TextUtils.isEmpty(mProxyAddress)) {
-                    SipURI uri = (SipURI)
-                            mAddressFactory.createURI(fix(mProxyAddress));
-                    mProfile.mProxyAddress = uri.getHost();
-                } else {
-                    if (!mProfile.mProtocol.equals(UDP)) {
-                        mUri.setTransportParam(mProfile.mProtocol);
-                    }
-                    if (mProfile.mPort != DEFAULT_PORT) {
-                        mUri.setPort(mProfile.mPort);
-                    }
-                }
-                mProfile.mAddress = mAddressFactory.createAddress(
-                        mDisplayName, mUri);
-            } catch (InvalidArgumentException e) {
-                throw new RuntimeException(e);
-            } catch (ParseException e) {
-                // must not occur
-                throw new RuntimeException(e);
-            }
-            return mProfile;
-        }
-    }
-
-    private SipProfile() {
-    }
-
-    private SipProfile(Parcel in) {
-        mAddress = (Address) in.readSerializable();
-        mProxyAddress = in.readString();
-        mPassword = in.readString();
-        mDomain = in.readString();
-        mProtocol = in.readString();
-        mProfileName = in.readString();
-        mSendKeepAlive = (in.readInt() == 0) ? false : true;
-        mAutoRegistration = (in.readInt() == 0) ? false : true;
-        mCallingUid = in.readInt();
-        mPort = in.readInt();
-        mAuthUserName = in.readString();
-    }
-
-    @Override
-    public void writeToParcel(Parcel out, int flags) {
-        out.writeSerializable(mAddress);
-        out.writeString(mProxyAddress);
-        out.writeString(mPassword);
-        out.writeString(mDomain);
-        out.writeString(mProtocol);
-        out.writeString(mProfileName);
-        out.writeInt(mSendKeepAlive ? 1 : 0);
-        out.writeInt(mAutoRegistration ? 1 : 0);
-        out.writeInt(mCallingUid);
-        out.writeInt(mPort);
-        out.writeString(mAuthUserName);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * Gets the SIP URI of this profile.
-     *
-     * @return the SIP URI of this profile
-     * @hide
-     */
-    public SipURI getUri() {
-        return (SipURI) mAddress.getURI();
-    }
-
-    /**
-     * Gets the SIP URI string of this profile.
-     *
-     * @return the SIP URI string of this profile
-     */
-    public String getUriString() {
-        // We need to return the sip uri domain instead of
-        // the SIP URI with transport, port information if
-        // the outbound proxy address exists.
-        if (!TextUtils.isEmpty(mProxyAddress)) {
-            return "sip:" + getUserName() + "@" + mDomain;
-        }
-        return getUri().toString();
-    }
-
-    /**
-     * Gets the SIP address of this profile.
-     *
-     * @return the SIP address of this profile
-     * @hide
-     */
-    public Address getSipAddress() {
-        return mAddress;
-    }
-
-    /**
-     * Gets the display name of the user.
-     *
-     * @return the display name of the user
-     */
-    public String getDisplayName() {
-        return mAddress.getDisplayName();
-    }
-
-    /**
-     * Gets the username.
-     *
-     * @return the username
-     */
-    public String getUserName() {
-        return getUri().getUser();
-    }
-
-    /**
-     * Gets the username for authentication. If it is null, then the username
-     * is used in authentication instead.
-     *
-     * @return the authentication username
-     * @see #getUserName
-     */
-    public String getAuthUserName() {
-        return mAuthUserName;
-    }
-
-    /**
-     * Gets the password.
-     *
-     * @return the password
-     */
-    public String getPassword() {
-        return mPassword;
-    }
-
-    /**
-     * Gets the SIP domain.
-     *
-     * @return the SIP domain
-     */
-    public String getSipDomain() {
-        return mDomain;
-    }
-
-    /**
-     * Gets the port number of the SIP server.
-     *
-     * @return the port number of the SIP server
-     */
-    public int getPort() {
-        return mPort;
-    }
-
-    /**
-     * Gets the protocol used to connect to the server.
-     *
-     * @return the protocol
-     */
-    public String getProtocol() {
-        return mProtocol;
-    }
-
-    /**
-     * Gets the network address of the server outbound proxy.
-     *
-     * @return the network address of the server outbound proxy
-     */
-    public String getProxyAddress() {
-        return mProxyAddress;
-    }
-
-    /**
-     * Gets the (user-defined) name of the profile.
-     *
-     * @return name of the profile
-     */
-    public String getProfileName() {
-        return mProfileName;
-    }
-
-    /**
-     * Gets the flag of 'Sending keep-alive'.
-     *
-     * @return the flag of sending SIP keep-alive messages.
-     */
-    public boolean getSendKeepAlive() {
-        return mSendKeepAlive;
-    }
-
-    /**
-     * Gets the flag of 'Auto Registration'.
-     *
-     * @return the flag of registering the profile automatically.
-     */
-    public boolean getAutoRegistration() {
-        return mAutoRegistration;
-    }
-
-    /**
-     * Sets the calling process's Uid in the sip service.
-     * @hide
-     */
-    public void setCallingUid(int uid) {
-        mCallingUid = uid;
-    }
-
-    /**
-     * Gets the calling process's Uid in the sip settings.
-     * @hide
-     */
-    public int getCallingUid() {
-        return mCallingUid;
-    }
-
-    private Object readResolve() throws ObjectStreamException {
-        // For compatibility.
-        if (mPort == 0) mPort = DEFAULT_PORT;
-        return this;
-    }
-}
diff --git a/voip/java/android/net/sip/SipRegistrationListener.java b/voip/java/android/net/sip/SipRegistrationListener.java
deleted file mode 100644
index 9968cc7..0000000
--- a/voip/java/android/net/sip/SipRegistrationListener.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-/**
- * Listener for SIP registration events.
- */
-public interface SipRegistrationListener {
-    /**
-     * Called when a registration request is sent.
-     *
-     * @param localProfileUri the URI string of the SIP profile to register with
-     */
-    void onRegistering(String localProfileUri);
-
-    /**
-     * Called when the registration succeeded.
-     *
-     * @param localProfileUri the URI string of the SIP profile to register with
-     * @param expiryTime duration in seconds before the registration expires
-     */
-    void onRegistrationDone(String localProfileUri, long expiryTime);
-
-    /**
-     * Called when the registration failed.
-     *
-     * @param localProfileUri the URI string of the SIP profile to register with
-     * @param errorCode error code of this error
-     * @param errorMessage error message
-     * @see SipErrorCode
-     */
-    void onRegistrationFailed(String localProfileUri, int errorCode,
-            String errorMessage);
-}
diff --git a/voip/java/android/net/sip/SipSession.java b/voip/java/android/net/sip/SipSession.java
deleted file mode 100644
index e03cf9f..0000000
--- a/voip/java/android/net/sip/SipSession.java
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-import android.os.RemoteException;
-import android.util.Log;
-
-/**
- * Represents a SIP session that is associated with a SIP dialog or a standalone
- * transaction not within a dialog.
- * <p>You can get a {@link SipSession} from {@link SipManager} with {@link
- * SipManager#createSipSession createSipSession()} (when initiating calls) or {@link
- * SipManager#getSessionFor getSessionFor()} (when receiving calls).</p>
- */
-public final class SipSession {
-    private static final String TAG = "SipSession";
-
-    /**
-     * Defines SIP session states, such as "registering", "outgoing call", and "in call".
-     */
-    public static class State {
-        /** When session is ready to initiate a call or transaction. */
-        public static final int READY_TO_CALL = 0;
-
-        /** When the registration request is sent out. */
-        public static final int REGISTERING = 1;
-
-        /** When the unregistration request is sent out. */
-        public static final int DEREGISTERING = 2;
-
-        /** When an INVITE request is received. */
-        public static final int INCOMING_CALL = 3;
-
-        /** When an OK response is sent for the INVITE request received. */
-        public static final int INCOMING_CALL_ANSWERING = 4;
-
-        /** When an INVITE request is sent. */
-        public static final int OUTGOING_CALL = 5;
-
-        /** When a RINGING response is received for the INVITE request sent. */
-        public static final int OUTGOING_CALL_RING_BACK = 6;
-
-        /** When a CANCEL request is sent for the INVITE request sent. */
-        public static final int OUTGOING_CALL_CANCELING = 7;
-
-        /** When a call is established. */
-        public static final int IN_CALL = 8;
-
-        /** When an OPTIONS request is sent. */
-        public static final int PINGING = 9;
-
-        /** When ending a call. @hide */
-        public static final int ENDING_CALL = 10;
-
-        /** Not defined. */
-        public static final int NOT_DEFINED = 101;
-
-        /**
-         * Converts the state to string.
-         */
-        public static String toString(int state) {
-            switch (state) {
-                case READY_TO_CALL:
-                    return "READY_TO_CALL";
-                case REGISTERING:
-                    return "REGISTERING";
-                case DEREGISTERING:
-                    return "DEREGISTERING";
-                case INCOMING_CALL:
-                    return "INCOMING_CALL";
-                case INCOMING_CALL_ANSWERING:
-                    return "INCOMING_CALL_ANSWERING";
-                case OUTGOING_CALL:
-                    return "OUTGOING_CALL";
-                case OUTGOING_CALL_RING_BACK:
-                    return "OUTGOING_CALL_RING_BACK";
-                case OUTGOING_CALL_CANCELING:
-                    return "OUTGOING_CALL_CANCELING";
-                case IN_CALL:
-                    return "IN_CALL";
-                case PINGING:
-                    return "PINGING";
-                default:
-                    return "NOT_DEFINED";
-            }
-        }
-
-        private State() {
-        }
-    }
-
-    /**
-     * Listener for events relating to a SIP session, such as when a session is being registered
-     * ("on registering") or a call is outgoing ("on calling").
-     * <p>Many of these events are also received by {@link SipAudioCall.Listener}.</p>
-     */
-    public static class Listener {
-        /**
-         * Called when an INVITE request is sent to initiate a new call.
-         *
-         * @param session the session object that carries out the transaction
-         */
-        public void onCalling(SipSession session) {
-        }
-
-        /**
-         * Called when an INVITE request is received.
-         *
-         * @param session the session object that carries out the transaction
-         * @param caller the SIP profile of the caller
-         * @param sessionDescription the caller's session description
-         */
-        public void onRinging(SipSession session, SipProfile caller,
-                String sessionDescription) {
-        }
-
-        /**
-         * Called when a RINGING response is received for the INVITE request sent
-         *
-         * @param session the session object that carries out the transaction
-         */
-        public void onRingingBack(SipSession session) {
-        }
-
-        /**
-         * Called when the session is established.
-         *
-         * @param session the session object that is associated with the dialog
-         * @param sessionDescription the peer's session description
-         */
-        public void onCallEstablished(SipSession session,
-                String sessionDescription) {
-        }
-
-        /**
-         * Called when the session is terminated.
-         *
-         * @param session the session object that is associated with the dialog
-         */
-        public void onCallEnded(SipSession session) {
-        }
-
-        /**
-         * Called when the peer is busy during session initialization.
-         *
-         * @param session the session object that carries out the transaction
-         */
-        public void onCallBusy(SipSession session) {
-        }
-
-        /**
-         * Called when the call is being transferred to a new one.
-         *
-         * @hide
-         * @param newSession the new session that the call will be transferred to
-         * @param sessionDescription the new peer's session description
-         */
-        public void onCallTransferring(SipSession newSession,
-                String sessionDescription) {
-        }
-
-        /**
-         * Called when an error occurs during session initialization and
-         * termination.
-         *
-         * @param session the session object that carries out the transaction
-         * @param errorCode error code defined in {@link SipErrorCode}
-         * @param errorMessage error message
-         */
-        public void onError(SipSession session, int errorCode,
-                String errorMessage) {
-        }
-
-        /**
-         * Called when an error occurs during session modification negotiation.
-         *
-         * @param session the session object that carries out the transaction
-         * @param errorCode error code defined in {@link SipErrorCode}
-         * @param errorMessage error message
-         */
-        public void onCallChangeFailed(SipSession session, int errorCode,
-                String errorMessage) {
-        }
-
-        /**
-         * Called when a registration request is sent.
-         *
-         * @param session the session object that carries out the transaction
-         */
-        public void onRegistering(SipSession session) {
-        }
-
-        /**
-         * Called when registration is successfully done.
-         *
-         * @param session the session object that carries out the transaction
-         * @param duration duration in second before the registration expires
-         */
-        public void onRegistrationDone(SipSession session, int duration) {
-        }
-
-        /**
-         * Called when the registration fails.
-         *
-         * @param session the session object that carries out the transaction
-         * @param errorCode error code defined in {@link SipErrorCode}
-         * @param errorMessage error message
-         */
-        public void onRegistrationFailed(SipSession session, int errorCode,
-                String errorMessage) {
-        }
-
-        /**
-         * Called when the registration gets timed out.
-         *
-         * @param session the session object that carries out the transaction
-         */
-        public void onRegistrationTimeout(SipSession session) {
-        }
-    }
-
-    private final ISipSession mSession;
-    private Listener mListener;
-
-    SipSession(ISipSession realSession) {
-        mSession = realSession;
-        if (realSession != null) {
-            try {
-                realSession.setListener(createListener());
-            } catch (RemoteException e) {
-                Log.e(TAG, "SipSession.setListener(): " + e);
-            }
-        }
-    }
-
-    SipSession(ISipSession realSession, Listener listener) {
-        this(realSession);
-        setListener(listener);
-    }
-
-    /**
-     * Gets the IP address of the local host on which this SIP session runs.
-     *
-     * @return the IP address of the local host
-     */
-    public String getLocalIp() {
-        try {
-            return mSession.getLocalIp();
-        } catch (RemoteException e) {
-            Log.e(TAG, "getLocalIp(): " + e);
-            return "127.0.0.1";
-        }
-    }
-
-    /**
-     * Gets the SIP profile that this session is associated with.
-     *
-     * @return the SIP profile that this session is associated with
-     */
-    public SipProfile getLocalProfile() {
-        try {
-            return mSession.getLocalProfile();
-        } catch (RemoteException e) {
-            Log.e(TAG, "getLocalProfile(): " + e);
-            return null;
-        }
-    }
-
-    /**
-     * Gets the SIP profile that this session is connected to. Only available
-     * when the session is associated with a SIP dialog.
-     *
-     * @return the SIP profile that this session is connected to
-     */
-    public SipProfile getPeerProfile() {
-        try {
-            return mSession.getPeerProfile();
-        } catch (RemoteException e) {
-            Log.e(TAG, "getPeerProfile(): " + e);
-            return null;
-        }
-    }
-
-    /**
-     * Gets the session state. The value returned must be one of the states in
-     * {@link State}.
-     *
-     * @return the session state
-     */
-    public int getState() {
-        try {
-            return mSession.getState();
-        } catch (RemoteException e) {
-            Log.e(TAG, "getState(): " + e);
-            return State.NOT_DEFINED;
-        }
-    }
-
-    /**
-     * Checks if the session is in a call.
-     *
-     * @return true if the session is in a call
-     */
-    public boolean isInCall() {
-        try {
-            return mSession.isInCall();
-        } catch (RemoteException e) {
-            Log.e(TAG, "isInCall(): " + e);
-            return false;
-        }
-    }
-
-    /**
-     * Gets the call ID of the session.
-     *
-     * @return the call ID
-     */
-    public String getCallId() {
-        try {
-            return mSession.getCallId();
-        } catch (RemoteException e) {
-            Log.e(TAG, "getCallId(): " + e);
-            return null;
-        }
-    }
-
-
-    /**
-     * Sets the listener to listen to the session events. A {@code SipSession}
-     * can only hold one listener at a time. Subsequent calls to this method
-     * override the previous listener.
-     *
-     * @param listener to listen to the session events of this object
-     */
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-
-    /**
-     * Performs registration to the server specified by the associated local
-     * profile. The session listener is called back upon success or failure of
-     * registration. The method is only valid to call when the session state is
-     * in {@link State#READY_TO_CALL}.
-     *
-     * @param duration duration in second before the registration expires
-     * @see Listener
-     */
-    public void register(int duration) {
-        try {
-            mSession.register(duration);
-        } catch (RemoteException e) {
-            Log.e(TAG, "register(): " + e);
-        }
-    }
-
-    /**
-     * Performs unregistration to the server specified by the associated local
-     * profile. Unregistration is technically the same as registration with zero
-     * expiration duration. The session listener is called back upon success or
-     * failure of unregistration. The method is only valid to call when the
-     * session state is in {@link State#READY_TO_CALL}.
-     *
-     * @see Listener
-     */
-    public void unregister() {
-        try {
-            mSession.unregister();
-        } catch (RemoteException e) {
-            Log.e(TAG, "unregister(): " + e);
-        }
-    }
-
-    /**
-     * Initiates a call to the specified profile. The session listener is called
-     * back upon defined session events. The method is only valid to call when
-     * the session state is in {@link State#READY_TO_CALL}.
-     *
-     * @param callee the SIP profile to make the call to
-     * @param sessionDescription the session description of this call
-     * @param timeout the session will be timed out if the call is not
-     *        established within {@code timeout} seconds. Default value (defined
-     *        by SIP protocol) is used if {@code timeout} is zero or negative.
-     * @see Listener
-     */
-    public void makeCall(SipProfile callee, String sessionDescription,
-            int timeout) {
-        try {
-            mSession.makeCall(callee, sessionDescription, timeout);
-        } catch (RemoteException e) {
-            Log.e(TAG, "makeCall(): " + e);
-        }
-    }
-
-    /**
-     * Answers an incoming call with the specified session description. The
-     * method is only valid to call when the session state is in
-     * {@link State#INCOMING_CALL}.
-     *
-     * @param sessionDescription the session description to answer this call
-     * @param timeout the session will be timed out if the call is not
-     *        established within {@code timeout} seconds. Default value (defined
-     *        by SIP protocol) is used if {@code timeout} is zero or negative.
-     */
-    public void answerCall(String sessionDescription, int timeout) {
-        try {
-            mSession.answerCall(sessionDescription, timeout);
-        } catch (RemoteException e) {
-            Log.e(TAG, "answerCall(): " + e);
-        }
-    }
-
-    /**
-     * Ends an established call, terminates an outgoing call or rejects an
-     * incoming call. The method is only valid to call when the session state is
-     * in {@link State#IN_CALL},
-     * {@link State#INCOMING_CALL},
-     * {@link State#OUTGOING_CALL} or
-     * {@link State#OUTGOING_CALL_RING_BACK}.
-     */
-    public void endCall() {
-        try {
-            mSession.endCall();
-        } catch (RemoteException e) {
-            Log.e(TAG, "endCall(): " + e);
-        }
-    }
-
-    /**
-     * Changes the session description during a call. The method is only valid
-     * to call when the session state is in {@link State#IN_CALL}.
-     *
-     * @param sessionDescription the new session description
-     * @param timeout the session will be timed out if the call is not
-     *        established within {@code timeout} seconds. Default value (defined
-     *        by SIP protocol) is used if {@code timeout} is zero or negative.
-     */
-    public void changeCall(String sessionDescription, int timeout) {
-        try {
-            mSession.changeCall(sessionDescription, timeout);
-        } catch (RemoteException e) {
-            Log.e(TAG, "changeCall(): " + e);
-        }
-    }
-
-    ISipSession getRealSession() {
-        return mSession;
-    }
-
-    private ISipSessionListener createListener() {
-        return new ISipSessionListener.Stub() {
-            public void onCalling(ISipSession session) {
-                if (mListener != null) {
-                    mListener.onCalling(SipSession.this);
-                }
-            }
-
-            public void onRinging(ISipSession session, SipProfile caller,
-                    String sessionDescription) {
-                if (mListener != null) {
-                    mListener.onRinging(SipSession.this, caller,
-                            sessionDescription);
-                }
-            }
-
-            public void onRingingBack(ISipSession session) {
-                if (mListener != null) {
-                    mListener.onRingingBack(SipSession.this);
-                }
-            }
-
-            public void onCallEstablished(ISipSession session,
-                    String sessionDescription) {
-                if (mListener != null) {
-                    mListener.onCallEstablished(SipSession.this,
-                            sessionDescription);
-                }
-            }
-
-            public void onCallEnded(ISipSession session) {
-                if (mListener != null) {
-                    mListener.onCallEnded(SipSession.this);
-                }
-            }
-
-            public void onCallBusy(ISipSession session) {
-                if (mListener != null) {
-                    mListener.onCallBusy(SipSession.this);
-                }
-            }
-
-            public void onCallTransferring(ISipSession session,
-                    String sessionDescription) {
-                if (mListener != null) {
-                    mListener.onCallTransferring(
-                            new SipSession(session, SipSession.this.mListener),
-                            sessionDescription);
-
-                }
-            }
-
-            public void onCallChangeFailed(ISipSession session, int errorCode,
-                    String message) {
-                if (mListener != null) {
-                    mListener.onCallChangeFailed(SipSession.this, errorCode,
-                            message);
-                }
-            }
-
-            public void onError(ISipSession session, int errorCode, String message) {
-                if (mListener != null) {
-                    mListener.onError(SipSession.this, errorCode, message);
-                }
-            }
-
-            public void onRegistering(ISipSession session) {
-                if (mListener != null) {
-                    mListener.onRegistering(SipSession.this);
-                }
-            }
-
-            public void onRegistrationDone(ISipSession session, int duration) {
-                if (mListener != null) {
-                    mListener.onRegistrationDone(SipSession.this, duration);
-                }
-            }
-
-            public void onRegistrationFailed(ISipSession session, int errorCode,
-                    String message) {
-                if (mListener != null) {
-                    mListener.onRegistrationFailed(SipSession.this, errorCode,
-                            message);
-                }
-            }
-
-            public void onRegistrationTimeout(ISipSession session) {
-                if (mListener != null) {
-                    mListener.onRegistrationTimeout(SipSession.this);
-                }
-            }
-        };
-    }
-}
diff --git a/voip/java/android/net/sip/SipSessionAdapter.java b/voip/java/android/net/sip/SipSessionAdapter.java
deleted file mode 100644
index f538983..0000000
--- a/voip/java/android/net/sip/SipSessionAdapter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2010 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.net.sip;
-
-/**
- * Adapter class for {@link ISipSessionListener}. Default implementation of all
- * callback methods is no-op.
- * @hide
- */
-public class SipSessionAdapter extends ISipSessionListener.Stub {
-    public void onCalling(ISipSession session) {
-    }
-
-    public void onRinging(ISipSession session, SipProfile caller,
-            String sessionDescription) {
-    }
-
-    public void onRingingBack(ISipSession session) {
-    }
-
-    public void onCallEstablished(ISipSession session,
-            String sessionDescription) {
-    }
-
-    public void onCallEnded(ISipSession session) {
-    }
-
-    public void onCallBusy(ISipSession session) {
-    }
-
-    public void onCallTransferring(ISipSession session,
-            String sessionDescription) {
-    }
-
-    public void onCallChangeFailed(ISipSession session, int errorCode,
-            String message) {
-    }
-
-    public void onError(ISipSession session, int errorCode, String message) {
-    }
-
-    public void onRegistering(ISipSession session) {
-    }
-
-    public void onRegistrationDone(ISipSession session, int duration) {
-    }
-
-    public void onRegistrationFailed(ISipSession session, int errorCode,
-            String message) {
-    }
-
-    public void onRegistrationTimeout(ISipSession session) {
-    }
-}
diff --git a/voip/java/android/net/sip/package.html b/voip/java/android/net/sip/package.html
deleted file mode 100644
index 3c4cc23..0000000
--- a/voip/java/android/net/sip/package.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<HTML>
-<BODY>
-<p>Provides access to Session Initiation Protocol (SIP) functionality, such as
-making and answering VOIP calls using SIP.</p>
-
-<p>For more information, see the
-<a href="{@docRoot}guide/topics/connectivity/sip.html">Session Initiation Protocol</a>
-developer guide.</p>
-{@more}
-
-<p>To get started, you need to get an instance of the {@link android.net.sip.SipManager} by
-calling {@link android.net.sip.SipManager#newInstance newInstance()}.</p>
-
-<p>With the {@link android.net.sip.SipManager}, you can initiate SIP audio calls with {@link
-android.net.sip.SipManager#makeAudioCall makeAudioCall()} and {@link
-android.net.sip.SipManager#takeAudioCall takeAudioCall()}. Both methods require
-a {@link android.net.sip.SipAudioCall.Listener} that receives callbacks when the state of the
-call changes, such as when the call is ringing, established, or ended.</p>
-
-<p>Both {@link android.net.sip.SipManager#makeAudioCall makeAudioCall()} also requires two
-{@link android.net.sip.SipProfile} objects, representing the local device and the peer
-device. You can create a {@link android.net.sip.SipProfile} using the {@link
-android.net.sip.SipProfile.Builder} subclass.</p>
-
-<p>Once you have a {@link android.net.sip.SipAudioCall}, you can perform SIP audio call actions with
-the instance, such as make a call, answer a call, mute a call, turn on speaker mode, send DTMF
-tones, and more.</p>
-
-<p>If you want to create generic SIP connections (such as for video calls or other), you can
-create a SIP connection from the {@link android.net.sip.SipManager}, using {@link
-android.net.sip.SipManager#open open()}. If you only want to create audio SIP calls, though, you
-should use the {@link android.net.sip.SipAudioCall} class, as described above.</p>
-
-<p class="note"><strong>Note:</strong>
-Not all Android-powered devices support VOIP functionality with SIP. Before performing any SIP
-activity, you should call {@link android.net.sip.SipManager#isVoipSupported isVoipSupported()}
-to verify that the device supports VOIP calling and {@link
-android.net.sip.SipManager#isApiSupported isApiSupported()} to verify that the device supports the
-SIP APIs.
-Your application must also request the {@link android.Manifest.permission#INTERNET} and {@link
-android.Manifest.permission#USE_SIP} permissions in order to use the SIP APIs.
-</p>
-
-</BODY>
-</HTML>
\ No newline at end of file
diff --git a/voip/java/com/android/server/sip/SipHelper.java b/voip/java/com/android/server/sip/SipHelper.java
deleted file mode 100644
index 113f007..0000000
--- a/voip/java/com/android/server/sip/SipHelper.java
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * Copyright (C) 2010 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 com.android.server.sip;
-
-import gov.nist.javax.sip.SipStackExt;
-import gov.nist.javax.sip.clientauthutils.AccountManager;
-import gov.nist.javax.sip.clientauthutils.AuthenticationHelper;
-import gov.nist.javax.sip.header.extensions.ReferencesHeader;
-import gov.nist.javax.sip.header.extensions.ReferredByHeader;
-import gov.nist.javax.sip.header.extensions.ReplacesHeader;
-
-import android.net.sip.SipProfile;
-import android.util.Log;
-
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.EventObject;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import javax.sip.ClientTransaction;
-import javax.sip.Dialog;
-import javax.sip.DialogTerminatedEvent;
-import javax.sip.InvalidArgumentException;
-import javax.sip.ListeningPoint;
-import javax.sip.PeerUnavailableException;
-import javax.sip.RequestEvent;
-import javax.sip.ResponseEvent;
-import javax.sip.ServerTransaction;
-import javax.sip.SipException;
-import javax.sip.SipFactory;
-import javax.sip.SipProvider;
-import javax.sip.SipStack;
-import javax.sip.Transaction;
-import javax.sip.TransactionAlreadyExistsException;
-import javax.sip.TransactionTerminatedEvent;
-import javax.sip.TransactionUnavailableException;
-import javax.sip.TransactionState;
-import javax.sip.address.Address;
-import javax.sip.address.AddressFactory;
-import javax.sip.address.SipURI;
-import javax.sip.header.CSeqHeader;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.ContactHeader;
-import javax.sip.header.FromHeader;
-import javax.sip.header.Header;
-import javax.sip.header.HeaderFactory;
-import javax.sip.header.MaxForwardsHeader;
-import javax.sip.header.ToHeader;
-import javax.sip.header.ViaHeader;
-import javax.sip.message.Message;
-import javax.sip.message.MessageFactory;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-
-/**
- * Helper class for holding SIP stack related classes and for various low-level
- * SIP tasks like sending messages.
- */
-class SipHelper {
-    private static final String TAG = SipHelper.class.getSimpleName();
-    private static final boolean DEBUG = false;
-    private static final boolean DEBUG_PING = false;
-
-    private SipStack mSipStack;
-    private SipProvider mSipProvider;
-    private AddressFactory mAddressFactory;
-    private HeaderFactory mHeaderFactory;
-    private MessageFactory mMessageFactory;
-
-    public SipHelper(SipStack sipStack, SipProvider sipProvider)
-            throws PeerUnavailableException {
-        mSipStack = sipStack;
-        mSipProvider = sipProvider;
-
-        SipFactory sipFactory = SipFactory.getInstance();
-        mAddressFactory = sipFactory.createAddressFactory();
-        mHeaderFactory = sipFactory.createHeaderFactory();
-        mMessageFactory = sipFactory.createMessageFactory();
-    }
-
-    private FromHeader createFromHeader(SipProfile profile, String tag)
-            throws ParseException {
-        return mHeaderFactory.createFromHeader(profile.getSipAddress(), tag);
-    }
-
-    private ToHeader createToHeader(SipProfile profile) throws ParseException {
-        return createToHeader(profile, null);
-    }
-
-    private ToHeader createToHeader(SipProfile profile, String tag)
-            throws ParseException {
-        return mHeaderFactory.createToHeader(profile.getSipAddress(), tag);
-    }
-
-    private CallIdHeader createCallIdHeader() {
-        return mSipProvider.getNewCallId();
-    }
-
-    private CSeqHeader createCSeqHeader(String method)
-            throws ParseException, InvalidArgumentException {
-        long sequence = (long) (Math.random() * 10000);
-        return mHeaderFactory.createCSeqHeader(sequence, method);
-    }
-
-    private MaxForwardsHeader createMaxForwardsHeader()
-            throws InvalidArgumentException {
-        return mHeaderFactory.createMaxForwardsHeader(70);
-    }
-
-    private MaxForwardsHeader createMaxForwardsHeader(int max)
-            throws InvalidArgumentException {
-        return mHeaderFactory.createMaxForwardsHeader(max);
-    }
-
-    private ListeningPoint getListeningPoint() throws SipException {
-        ListeningPoint lp = mSipProvider.getListeningPoint(ListeningPoint.UDP);
-        if (lp == null) lp = mSipProvider.getListeningPoint(ListeningPoint.TCP);
-        if (lp == null) {
-            ListeningPoint[] lps = mSipProvider.getListeningPoints();
-            if ((lps != null) && (lps.length > 0)) lp = lps[0];
-        }
-        if (lp == null) {
-            throw new SipException("no listening point is available");
-        }
-        return lp;
-    }
-
-    private List<ViaHeader> createViaHeaders()
-            throws ParseException, SipException {
-        List<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(1);
-        ListeningPoint lp = getListeningPoint();
-        ViaHeader viaHeader = mHeaderFactory.createViaHeader(lp.getIPAddress(),
-                lp.getPort(), lp.getTransport(), null);
-        viaHeader.setRPort();
-        viaHeaders.add(viaHeader);
-        return viaHeaders;
-    }
-
-    private ContactHeader createContactHeader(SipProfile profile)
-            throws ParseException, SipException {
-        return createContactHeader(profile, null, 0);
-    }
-
-    private ContactHeader createContactHeader(SipProfile profile,
-            String ip, int port) throws ParseException,
-            SipException {
-        SipURI contactURI = (ip == null)
-                ? createSipUri(profile.getUserName(), profile.getProtocol(),
-                        getListeningPoint())
-                : createSipUri(profile.getUserName(), profile.getProtocol(),
-                        ip, port);
-
-        Address contactAddress = mAddressFactory.createAddress(contactURI);
-        contactAddress.setDisplayName(profile.getDisplayName());
-
-        return mHeaderFactory.createContactHeader(contactAddress);
-    }
-
-    private ContactHeader createWildcardContactHeader() {
-        ContactHeader contactHeader  = mHeaderFactory.createContactHeader();
-        contactHeader.setWildCard();
-        return contactHeader;
-    }
-
-    private SipURI createSipUri(String username, String transport,
-            ListeningPoint lp) throws ParseException {
-        return createSipUri(username, transport, lp.getIPAddress(), lp.getPort());
-    }
-
-    private SipURI createSipUri(String username, String transport,
-            String ip, int port) throws ParseException {
-        SipURI uri = mAddressFactory.createSipURI(username, ip);
-        try {
-            uri.setPort(port);
-            uri.setTransportParam(transport);
-        } catch (InvalidArgumentException e) {
-            throw new RuntimeException(e);
-        }
-        return uri;
-    }
-
-    public ClientTransaction sendOptions(SipProfile caller, SipProfile callee,
-            String tag) throws SipException {
-        try {
-            Request request = (caller == callee)
-                    ? createRequest(Request.OPTIONS, caller, tag)
-                    : createRequest(Request.OPTIONS, caller, callee, tag);
-
-            ClientTransaction clientTransaction =
-                    mSipProvider.getNewClientTransaction(request);
-            clientTransaction.sendRequest();
-            return clientTransaction;
-        } catch (Exception e) {
-            throw new SipException("sendOptions()", e);
-        }
-    }
-
-    public ClientTransaction sendRegister(SipProfile userProfile, String tag,
-            int expiry) throws SipException {
-        try {
-            Request request = createRequest(Request.REGISTER, userProfile, tag);
-            if (expiry == 0) {
-                // remove all previous registrations by wildcard
-                // rfc3261#section-10.2.2
-                request.addHeader(createWildcardContactHeader());
-            } else {
-                request.addHeader(createContactHeader(userProfile));
-            }
-            request.addHeader(mHeaderFactory.createExpiresHeader(expiry));
-
-            ClientTransaction clientTransaction =
-                    mSipProvider.getNewClientTransaction(request);
-            clientTransaction.sendRequest();
-            return clientTransaction;
-        } catch (ParseException e) {
-            throw new SipException("sendRegister()", e);
-        }
-    }
-
-    private Request createRequest(String requestType, SipProfile userProfile,
-            String tag) throws ParseException, SipException {
-        FromHeader fromHeader = createFromHeader(userProfile, tag);
-        ToHeader toHeader = createToHeader(userProfile);
-
-        String replaceStr = Pattern.quote(userProfile.getUserName() + "@");
-        SipURI requestURI = mAddressFactory.createSipURI(
-                userProfile.getUriString().replaceFirst(replaceStr, ""));
-
-        List<ViaHeader> viaHeaders = createViaHeaders();
-        CallIdHeader callIdHeader = createCallIdHeader();
-        CSeqHeader cSeqHeader = createCSeqHeader(requestType);
-        MaxForwardsHeader maxForwards = createMaxForwardsHeader();
-        Request request = mMessageFactory.createRequest(requestURI,
-                requestType, callIdHeader, cSeqHeader, fromHeader,
-                toHeader, viaHeaders, maxForwards);
-        Header userAgentHeader = mHeaderFactory.createHeader("User-Agent",
-                "SIPAUA/0.1.001");
-        request.addHeader(userAgentHeader);
-        return request;
-    }
-
-    public ClientTransaction handleChallenge(ResponseEvent responseEvent,
-            AccountManager accountManager) throws SipException {
-        AuthenticationHelper authenticationHelper =
-                ((SipStackExt) mSipStack).getAuthenticationHelper(
-                        accountManager, mHeaderFactory);
-        ClientTransaction tid = responseEvent.getClientTransaction();
-        ClientTransaction ct = authenticationHelper.handleChallenge(
-                responseEvent.getResponse(), tid, mSipProvider, 5);
-        if (DEBUG) Log.d(TAG, "send request with challenge response: "
-                + ct.getRequest());
-        ct.sendRequest();
-        return ct;
-    }
-
-    private Request createRequest(String requestType, SipProfile caller,
-            SipProfile callee, String tag) throws ParseException, SipException {
-        FromHeader fromHeader = createFromHeader(caller, tag);
-        ToHeader toHeader = createToHeader(callee);
-        SipURI requestURI = callee.getUri();
-        List<ViaHeader> viaHeaders = createViaHeaders();
-        CallIdHeader callIdHeader = createCallIdHeader();
-        CSeqHeader cSeqHeader = createCSeqHeader(requestType);
-        MaxForwardsHeader maxForwards = createMaxForwardsHeader();
-
-        Request request = mMessageFactory.createRequest(requestURI,
-                requestType, callIdHeader, cSeqHeader, fromHeader,
-                toHeader, viaHeaders, maxForwards);
-
-        request.addHeader(createContactHeader(caller));
-        return request;
-    }
-
-    public ClientTransaction sendInvite(SipProfile caller, SipProfile callee,
-            String sessionDescription, String tag, ReferredByHeader referredBy,
-            String replaces) throws SipException {
-        try {
-            Request request = createRequest(Request.INVITE, caller, callee, tag);
-            if (referredBy != null) request.addHeader(referredBy);
-            if (replaces != null) {
-                request.addHeader(mHeaderFactory.createHeader(
-                        ReplacesHeader.NAME, replaces));
-            }
-            request.setContent(sessionDescription,
-                    mHeaderFactory.createContentTypeHeader(
-                            "application", "sdp"));
-            ClientTransaction clientTransaction =
-                    mSipProvider.getNewClientTransaction(request);
-            if (DEBUG) Log.d(TAG, "send INVITE: " + request);
-            clientTransaction.sendRequest();
-            return clientTransaction;
-        } catch (ParseException e) {
-            throw new SipException("sendInvite()", e);
-        }
-    }
-
-    public ClientTransaction sendReinvite(Dialog dialog,
-            String sessionDescription) throws SipException {
-        try {
-            Request request = dialog.createRequest(Request.INVITE);
-            request.setContent(sessionDescription,
-                    mHeaderFactory.createContentTypeHeader(
-                            "application", "sdp"));
-
-            // Adding rport argument in the request could fix some SIP servers
-            // in resolving the initiator's NAT port mapping for relaying the
-            // response message from the other end.
-
-            ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
-            if (viaHeader != null) viaHeader.setRPort();
-
-            ClientTransaction clientTransaction =
-                    mSipProvider.getNewClientTransaction(request);
-            if (DEBUG) Log.d(TAG, "send RE-INVITE: " + request);
-            dialog.sendRequest(clientTransaction);
-            return clientTransaction;
-        } catch (ParseException e) {
-            throw new SipException("sendReinvite()", e);
-        }
-    }
-
-    public ServerTransaction getServerTransaction(RequestEvent event)
-            throws SipException {
-        ServerTransaction transaction = event.getServerTransaction();
-        if (transaction == null) {
-            Request request = event.getRequest();
-            return mSipProvider.getNewServerTransaction(request);
-        } else {
-            return transaction;
-        }
-    }
-
-    /**
-     * @param event the INVITE request event
-     */
-    public ServerTransaction sendRinging(RequestEvent event, String tag)
-            throws SipException {
-        try {
-            Request request = event.getRequest();
-            ServerTransaction transaction = getServerTransaction(event);
-
-            Response response = mMessageFactory.createResponse(Response.RINGING,
-                    request);
-
-            ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME);
-            toHeader.setTag(tag);
-            response.addHeader(toHeader);
-            if (DEBUG) Log.d(TAG, "send RINGING: " + response);
-            transaction.sendResponse(response);
-            return transaction;
-        } catch (ParseException e) {
-            throw new SipException("sendRinging()", e);
-        }
-    }
-
-    /**
-     * @param event the INVITE request event
-     */
-    public ServerTransaction sendInviteOk(RequestEvent event,
-            SipProfile localProfile, String sessionDescription,
-            ServerTransaction inviteTransaction, String externalIp,
-            int externalPort) throws SipException {
-        try {
-            Request request = event.getRequest();
-            Response response = mMessageFactory.createResponse(Response.OK,
-                    request);
-            response.addHeader(createContactHeader(localProfile, externalIp,
-                    externalPort));
-            response.setContent(sessionDescription,
-                    mHeaderFactory.createContentTypeHeader(
-                            "application", "sdp"));
-
-            if (inviteTransaction == null) {
-                inviteTransaction = getServerTransaction(event);
-            }
-
-            if (inviteTransaction.getState() != TransactionState.COMPLETED) {
-                if (DEBUG) Log.d(TAG, "send OK: " + response);
-                inviteTransaction.sendResponse(response);
-            }
-
-            return inviteTransaction;
-        } catch (ParseException e) {
-            throw new SipException("sendInviteOk()", e);
-        }
-    }
-
-    public void sendInviteBusyHere(RequestEvent event,
-            ServerTransaction inviteTransaction) throws SipException {
-        try {
-            Request request = event.getRequest();
-            Response response = mMessageFactory.createResponse(
-                    Response.BUSY_HERE, request);
-
-            if (inviteTransaction == null) {
-                inviteTransaction = getServerTransaction(event);
-            }
-
-            if (inviteTransaction.getState() != TransactionState.COMPLETED) {
-                if (DEBUG) Log.d(TAG, "send BUSY HERE: " + response);
-                inviteTransaction.sendResponse(response);
-            }
-        } catch (ParseException e) {
-            throw new SipException("sendInviteBusyHere()", e);
-        }
-    }
-
-    /**
-     * @param event the INVITE ACK request event
-     */
-    public void sendInviteAck(ResponseEvent event, Dialog dialog)
-            throws SipException {
-        Response response = event.getResponse();
-        long cseq = ((CSeqHeader) response.getHeader(CSeqHeader.NAME))
-                .getSeqNumber();
-        Request ack = dialog.createAck(cseq);
-        if (DEBUG) Log.d(TAG, "send ACK: " + ack);
-        dialog.sendAck(ack);
-    }
-
-    public void sendBye(Dialog dialog) throws SipException {
-        Request byeRequest = dialog.createRequest(Request.BYE);
-        if (DEBUG) Log.d(TAG, "send BYE: " + byeRequest);
-        dialog.sendRequest(mSipProvider.getNewClientTransaction(byeRequest));
-    }
-
-    public void sendCancel(ClientTransaction inviteTransaction)
-            throws SipException {
-        Request cancelRequest = inviteTransaction.createCancel();
-        if (DEBUG) Log.d(TAG, "send CANCEL: " + cancelRequest);
-        mSipProvider.getNewClientTransaction(cancelRequest).sendRequest();
-    }
-
-    public void sendResponse(RequestEvent event, int responseCode)
-            throws SipException {
-        try {
-            Request request = event.getRequest();
-            Response response = mMessageFactory.createResponse(
-                    responseCode, request);
-            if (DEBUG && (!Request.OPTIONS.equals(request.getMethod())
-                    || DEBUG_PING)) {
-                Log.d(TAG, "send response: " + response);
-            }
-            getServerTransaction(event).sendResponse(response);
-        } catch (ParseException e) {
-            throw new SipException("sendResponse()", e);
-        }
-    }
-
-    public void sendReferNotify(Dialog dialog, String content)
-            throws SipException {
-        try {
-            Request request = dialog.createRequest(Request.NOTIFY);
-            request.addHeader(mHeaderFactory.createSubscriptionStateHeader(
-                    "active;expires=60"));
-            // set content here
-            request.setContent(content,
-                    mHeaderFactory.createContentTypeHeader(
-                            "message", "sipfrag"));
-            request.addHeader(mHeaderFactory.createEventHeader(
-                    ReferencesHeader.REFER));
-            if (DEBUG) Log.d(TAG, "send NOTIFY: " + request);
-            dialog.sendRequest(mSipProvider.getNewClientTransaction(request));
-        } catch (ParseException e) {
-            throw new SipException("sendReferNotify()", e);
-        }
-    }
-
-    public void sendInviteRequestTerminated(Request inviteRequest,
-            ServerTransaction inviteTransaction) throws SipException {
-        try {
-            Response response = mMessageFactory.createResponse(
-                    Response.REQUEST_TERMINATED, inviteRequest);
-            if (DEBUG) Log.d(TAG, "send response: " + response);
-            inviteTransaction.sendResponse(response);
-        } catch (ParseException e) {
-            throw new SipException("sendInviteRequestTerminated()", e);
-        }
-    }
-
-    public static String getCallId(EventObject event) {
-        if (event == null) return null;
-        if (event instanceof RequestEvent) {
-            return getCallId(((RequestEvent) event).getRequest());
-        } else if (event instanceof ResponseEvent) {
-            return getCallId(((ResponseEvent) event).getResponse());
-        } else if (event instanceof DialogTerminatedEvent) {
-            Dialog dialog = ((DialogTerminatedEvent) event).getDialog();
-            return getCallId(((DialogTerminatedEvent) event).getDialog());
-        } else if (event instanceof TransactionTerminatedEvent) {
-            TransactionTerminatedEvent e = (TransactionTerminatedEvent) event;
-            return getCallId(e.isServerTransaction()
-                    ? e.getServerTransaction()
-                    : e.getClientTransaction());
-        } else {
-            Object source = event.getSource();
-            if (source instanceof Transaction) {
-                return getCallId(((Transaction) source));
-            } else if (source instanceof Dialog) {
-                return getCallId((Dialog) source);
-            }
-        }
-        return "";
-    }
-
-    public static String getCallId(Transaction transaction) {
-        return ((transaction != null) ? getCallId(transaction.getRequest())
-                                      : "");
-    }
-
-    private static String getCallId(Message message) {
-        CallIdHeader callIdHeader =
-                (CallIdHeader) message.getHeader(CallIdHeader.NAME);
-        return callIdHeader.getCallId();
-    }
-
-    private static String getCallId(Dialog dialog) {
-        return dialog.getCallId().getCallId();
-    }
-}
diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java
deleted file mode 100644
index a477fd1..0000000
--- a/voip/java/com/android/server/sip/SipService.java
+++ /dev/null
@@ -1,1203 +0,0 @@
-/*
- * Copyright (C) 2010, 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 com.android.server.sip;
-
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.sip.ISipService;
-import android.net.sip.ISipSession;
-import android.net.sip.ISipSessionListener;
-import android.net.sip.SipErrorCode;
-import android.net.sip.SipManager;
-import android.net.sip.SipProfile;
-import android.net.sip.SipSession;
-import android.net.sip.SipSessionAdapter;
-import android.net.wifi.WifiManager;
-import android.os.Binder;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Message;
-import android.os.PowerManager;
-import android.os.Process;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.io.IOException;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.TreeSet;
-import java.util.concurrent.Executor;
-import javax.sip.SipException;
-
-/**
- * @hide
- */
-public final class SipService extends ISipService.Stub {
-    static final String TAG = "SipService";
-    static final boolean DEBUG = false;
-    private static final int EXPIRY_TIME = 3600;
-    private static final int SHORT_EXPIRY_TIME = 10;
-    private static final int MIN_EXPIRY_TIME = 60;
-    private static final int DEFAULT_KEEPALIVE_INTERVAL = 10; // in seconds
-    private static final int DEFAULT_MAX_KEEPALIVE_INTERVAL = 120; // in seconds
-
-    private Context mContext;
-    private String mLocalIp;
-    private int mNetworkType = -1;
-    private SipWakeupTimer mTimer;
-    private WifiManager.WifiLock mWifiLock;
-    private boolean mSipOnWifiOnly;
-
-    private IntervalMeasurementProcess mIntervalMeasurementProcess;
-
-    private MyExecutor mExecutor = new MyExecutor();
-
-    // SipProfile URI --> group
-    private Map<String, SipSessionGroupExt> mSipGroups =
-            new HashMap<String, SipSessionGroupExt>();
-
-    // session ID --> session
-    private Map<String, ISipSession> mPendingSessions =
-            new HashMap<String, ISipSession>();
-
-    private ConnectivityReceiver mConnectivityReceiver;
-    private SipWakeLock mMyWakeLock;
-    private int mKeepAliveInterval;
-    private int mLastGoodKeepAliveInterval = DEFAULT_KEEPALIVE_INTERVAL;
-
-    /**
-     * Starts the SIP service. Do nothing if the SIP API is not supported on the
-     * device.
-     */
-    public static void start(Context context) {
-        if (SipManager.isApiSupported(context)) {
-            ServiceManager.addService("sip", new SipService(context));
-            context.sendBroadcast(new Intent(SipManager.ACTION_SIP_SERVICE_UP));
-            if (DEBUG) Log.d(TAG, "SIP service started");
-        }
-    }
-
-    private SipService(Context context) {
-        if (DEBUG) Log.d(TAG, " service started!");
-        mContext = context;
-        mConnectivityReceiver = new ConnectivityReceiver();
-
-        mWifiLock = ((WifiManager)
-                context.getSystemService(Context.WIFI_SERVICE))
-                .createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
-        mWifiLock.setReferenceCounted(false);
-        mSipOnWifiOnly = SipManager.isSipWifiOnly(context);
-
-        mMyWakeLock = new SipWakeLock((PowerManager)
-                context.getSystemService(Context.POWER_SERVICE));
-
-        mTimer = new SipWakeupTimer(context, mExecutor);
-    }
-
-    public synchronized SipProfile[] getListOfProfiles() {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        boolean isCallerRadio = isCallerRadio();
-        ArrayList<SipProfile> profiles = new ArrayList<SipProfile>();
-        for (SipSessionGroupExt group : mSipGroups.values()) {
-            if (isCallerRadio || isCallerCreator(group)) {
-                profiles.add(group.getLocalProfile());
-            }
-        }
-        return profiles.toArray(new SipProfile[profiles.size()]);
-    }
-
-    public synchronized void open(SipProfile localProfile) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        localProfile.setCallingUid(Binder.getCallingUid());
-        try {
-            createGroup(localProfile);
-        } catch (SipException e) {
-            Log.e(TAG, "openToMakeCalls()", e);
-            // TODO: how to send the exception back
-        }
-    }
-
-    public synchronized void open3(SipProfile localProfile,
-            PendingIntent incomingCallPendingIntent,
-            ISipSessionListener listener) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        localProfile.setCallingUid(Binder.getCallingUid());
-        if (incomingCallPendingIntent == null) {
-            Log.w(TAG, "incomingCallPendingIntent cannot be null; "
-                    + "the profile is not opened");
-            return;
-        }
-        if (DEBUG) Log.d(TAG, "open3: " + localProfile.getUriString() + ": "
-                + incomingCallPendingIntent + ": " + listener);
-        try {
-            SipSessionGroupExt group = createGroup(localProfile,
-                    incomingCallPendingIntent, listener);
-            if (localProfile.getAutoRegistration()) {
-                group.openToReceiveCalls();
-                updateWakeLocks();
-            }
-        } catch (SipException e) {
-            Log.e(TAG, "openToReceiveCalls()", e);
-            // TODO: how to send the exception back
-        }
-    }
-
-    private boolean isCallerCreator(SipSessionGroupExt group) {
-        SipProfile profile = group.getLocalProfile();
-        return (profile.getCallingUid() == Binder.getCallingUid());
-    }
-
-    private boolean isCallerCreatorOrRadio(SipSessionGroupExt group) {
-        return (isCallerRadio() || isCallerCreator(group));
-    }
-
-    private boolean isCallerRadio() {
-        return (Binder.getCallingUid() == Process.PHONE_UID);
-    }
-
-    public synchronized void close(String localProfileUri) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        SipSessionGroupExt group = mSipGroups.get(localProfileUri);
-        if (group == null) return;
-        if (!isCallerCreatorOrRadio(group)) {
-            Log.w(TAG, "only creator or radio can close this profile");
-            return;
-        }
-
-        group = mSipGroups.remove(localProfileUri);
-        notifyProfileRemoved(group.getLocalProfile());
-        group.close();
-
-        updateWakeLocks();
-    }
-
-    public synchronized boolean isOpened(String localProfileUri) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        SipSessionGroupExt group = mSipGroups.get(localProfileUri);
-        if (group == null) return false;
-        if (isCallerCreatorOrRadio(group)) {
-            return true;
-        } else {
-            Log.w(TAG, "only creator or radio can query on the profile");
-            return false;
-        }
-    }
-
-    public synchronized boolean isRegistered(String localProfileUri) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        SipSessionGroupExt group = mSipGroups.get(localProfileUri);
-        if (group == null) return false;
-        if (isCallerCreatorOrRadio(group)) {
-            return group.isRegistered();
-        } else {
-            Log.w(TAG, "only creator or radio can query on the profile");
-            return false;
-        }
-    }
-
-    public synchronized void setRegistrationListener(String localProfileUri,
-            ISipSessionListener listener) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        SipSessionGroupExt group = mSipGroups.get(localProfileUri);
-        if (group == null) return;
-        if (isCallerCreator(group)) {
-            group.setListener(listener);
-        } else {
-            Log.w(TAG, "only creator can set listener on the profile");
-        }
-    }
-
-    public synchronized ISipSession createSession(SipProfile localProfile,
-            ISipSessionListener listener) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        localProfile.setCallingUid(Binder.getCallingUid());
-        if (mNetworkType == -1) return null;
-        try {
-            SipSessionGroupExt group = createGroup(localProfile);
-            return group.createSession(listener);
-        } catch (SipException e) {
-            if (DEBUG) Log.d(TAG, "createSession()", e);
-            return null;
-        }
-    }
-
-    public synchronized ISipSession getPendingSession(String callId) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.USE_SIP, null);
-        if (callId == null) return null;
-        return mPendingSessions.get(callId);
-    }
-
-    private String determineLocalIp() {
-        try {
-            DatagramSocket s = new DatagramSocket();
-            s.connect(InetAddress.getByName("192.168.1.1"), 80);
-            return s.getLocalAddress().getHostAddress();
-        } catch (IOException e) {
-            if (DEBUG) Log.d(TAG, "determineLocalIp()", e);
-            // dont do anything; there should be a connectivity change going
-            return null;
-        }
-    }
-
-    private SipSessionGroupExt createGroup(SipProfile localProfile)
-            throws SipException {
-        String key = localProfile.getUriString();
-        SipSessionGroupExt group = mSipGroups.get(key);
-        if (group == null) {
-            group = new SipSessionGroupExt(localProfile, null, null);
-            mSipGroups.put(key, group);
-            notifyProfileAdded(localProfile);
-        } else if (!isCallerCreator(group)) {
-            throw new SipException("only creator can access the profile");
-        }
-        return group;
-    }
-
-    private SipSessionGroupExt createGroup(SipProfile localProfile,
-            PendingIntent incomingCallPendingIntent,
-            ISipSessionListener listener) throws SipException {
-        String key = localProfile.getUriString();
-        SipSessionGroupExt group = mSipGroups.get(key);
-        if (group != null) {
-            if (!isCallerCreator(group)) {
-                throw new SipException("only creator can access the profile");
-            }
-            group.setIncomingCallPendingIntent(incomingCallPendingIntent);
-            group.setListener(listener);
-        } else {
-            group = new SipSessionGroupExt(localProfile,
-                    incomingCallPendingIntent, listener);
-            mSipGroups.put(key, group);
-            notifyProfileAdded(localProfile);
-        }
-        return group;
-    }
-
-    private void notifyProfileAdded(SipProfile localProfile) {
-        if (DEBUG) Log.d(TAG, "notify: profile added: " + localProfile);
-        Intent intent = new Intent(SipManager.ACTION_SIP_ADD_PHONE);
-        intent.putExtra(SipManager.EXTRA_LOCAL_URI, localProfile.getUriString());
-        mContext.sendBroadcast(intent);
-        if (mSipGroups.size() == 1) {
-            registerReceivers();
-        }
-    }
-
-    private void notifyProfileRemoved(SipProfile localProfile) {
-        if (DEBUG) Log.d(TAG, "notify: profile removed: " + localProfile);
-        Intent intent = new Intent(SipManager.ACTION_SIP_REMOVE_PHONE);
-        intent.putExtra(SipManager.EXTRA_LOCAL_URI, localProfile.getUriString());
-        mContext.sendBroadcast(intent);
-        if (mSipGroups.size() == 0) {
-            unregisterReceivers();
-        }
-    }
-
-    private void stopPortMappingMeasurement() {
-        if (mIntervalMeasurementProcess != null) {
-            mIntervalMeasurementProcess.stop();
-            mIntervalMeasurementProcess = null;
-        }
-    }
-
-    private void startPortMappingLifetimeMeasurement(
-            SipProfile localProfile) {
-        startPortMappingLifetimeMeasurement(localProfile,
-                DEFAULT_MAX_KEEPALIVE_INTERVAL);
-    }
-
-    private void startPortMappingLifetimeMeasurement(
-            SipProfile localProfile, int maxInterval) {
-        if ((mIntervalMeasurementProcess == null)
-                && (mKeepAliveInterval == -1)
-                && isBehindNAT(mLocalIp)) {
-            Log.d(TAG, "start NAT port mapping timeout measurement on "
-                    + localProfile.getUriString());
-
-            int minInterval = mLastGoodKeepAliveInterval;
-            if (minInterval >= maxInterval) {
-                // If mLastGoodKeepAliveInterval also does not work, reset it
-                // to the default min
-                minInterval = mLastGoodKeepAliveInterval
-                        = DEFAULT_KEEPALIVE_INTERVAL;
-                Log.d(TAG, "  reset min interval to " + minInterval);
-            }
-            mIntervalMeasurementProcess = new IntervalMeasurementProcess(
-                    localProfile, minInterval, maxInterval);
-            mIntervalMeasurementProcess.start();
-        }
-    }
-
-    private void restartPortMappingLifetimeMeasurement(
-            SipProfile localProfile, int maxInterval) {
-        stopPortMappingMeasurement();
-        mKeepAliveInterval = -1;
-        startPortMappingLifetimeMeasurement(localProfile, maxInterval);
-    }
-
-    private synchronized void addPendingSession(ISipSession session) {
-        try {
-            cleanUpPendingSessions();
-            mPendingSessions.put(session.getCallId(), session);
-            if (DEBUG) Log.d(TAG, "#pending sess=" + mPendingSessions.size());
-        } catch (RemoteException e) {
-            // should not happen with a local call
-            Log.e(TAG, "addPendingSession()", e);
-        }
-    }
-
-    private void cleanUpPendingSessions() throws RemoteException {
-        Map.Entry<String, ISipSession>[] entries =
-                mPendingSessions.entrySet().toArray(
-                new Map.Entry[mPendingSessions.size()]);
-        for (Map.Entry<String, ISipSession> entry : entries) {
-            if (entry.getValue().getState() != SipSession.State.INCOMING_CALL) {
-                mPendingSessions.remove(entry.getKey());
-            }
-        }
-    }
-
-    private synchronized boolean callingSelf(SipSessionGroupExt ringingGroup,
-            SipSessionGroup.SipSessionImpl ringingSession) {
-        String callId = ringingSession.getCallId();
-        for (SipSessionGroupExt group : mSipGroups.values()) {
-            if ((group != ringingGroup) && group.containsSession(callId)) {
-                if (DEBUG) Log.d(TAG, "call self: "
-                        + ringingSession.getLocalProfile().getUriString()
-                        + " -> " + group.getLocalProfile().getUriString());
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private synchronized void onKeepAliveIntervalChanged() {
-        for (SipSessionGroupExt group : mSipGroups.values()) {
-            group.onKeepAliveIntervalChanged();
-        }
-    }
-
-    private int getKeepAliveInterval() {
-        return (mKeepAliveInterval < 0)
-                ? mLastGoodKeepAliveInterval
-                : mKeepAliveInterval;
-    }
-
-    private boolean isBehindNAT(String address) {
-        try {
-            byte[] d = InetAddress.getByName(address).getAddress();
-            if ((d[0] == 10) ||
-                    (((0x000000FF & ((int)d[0])) == 172) &&
-                    ((0x000000F0 & ((int)d[1])) == 16)) ||
-                    (((0x000000FF & ((int)d[0])) == 192) &&
-                    ((0x000000FF & ((int)d[1])) == 168))) {
-                return true;
-            }
-        } catch (UnknownHostException e) {
-            Log.e(TAG, "isBehindAT()" + address, e);
-        }
-        return false;
-    }
-
-    private class SipSessionGroupExt extends SipSessionAdapter {
-        private SipSessionGroup mSipGroup;
-        private PendingIntent mIncomingCallPendingIntent;
-        private boolean mOpenedToReceiveCalls;
-
-        private AutoRegistrationProcess mAutoRegistration =
-                new AutoRegistrationProcess();
-
-        public SipSessionGroupExt(SipProfile localProfile,
-                PendingIntent incomingCallPendingIntent,
-                ISipSessionListener listener) throws SipException {
-            mSipGroup = new SipSessionGroup(duplicate(localProfile),
-                    localProfile.getPassword(), mTimer, mMyWakeLock);
-            mIncomingCallPendingIntent = incomingCallPendingIntent;
-            mAutoRegistration.setListener(listener);
-        }
-
-        public SipProfile getLocalProfile() {
-            return mSipGroup.getLocalProfile();
-        }
-
-        public boolean containsSession(String callId) {
-            return mSipGroup.containsSession(callId);
-        }
-
-        public void onKeepAliveIntervalChanged() {
-            mAutoRegistration.onKeepAliveIntervalChanged();
-        }
-
-        // TODO: remove this method once SipWakeupTimer can better handle variety
-        // of timeout values
-        void setWakeupTimer(SipWakeupTimer timer) {
-            mSipGroup.setWakeupTimer(timer);
-        }
-
-        private SipProfile duplicate(SipProfile p) {
-            try {
-                return new SipProfile.Builder(p).setPassword("*").build();
-            } catch (Exception e) {
-                Log.wtf(TAG, "duplicate()", e);
-                throw new RuntimeException("duplicate profile", e);
-            }
-        }
-
-        public void setListener(ISipSessionListener listener) {
-            mAutoRegistration.setListener(listener);
-        }
-
-        public void setIncomingCallPendingIntent(PendingIntent pIntent) {
-            mIncomingCallPendingIntent = pIntent;
-        }
-
-        public void openToReceiveCalls() throws SipException {
-            mOpenedToReceiveCalls = true;
-            if (mNetworkType != -1) {
-                mSipGroup.openToReceiveCalls(this);
-                mAutoRegistration.start(mSipGroup);
-            }
-            if (DEBUG) Log.d(TAG, "  openToReceiveCalls: " + getUri() + ": "
-                    + mIncomingCallPendingIntent);
-        }
-
-        public void onConnectivityChanged(boolean connected)
-                throws SipException {
-            mSipGroup.onConnectivityChanged();
-            if (connected) {
-                mSipGroup.reset();
-                if (mOpenedToReceiveCalls) openToReceiveCalls();
-            } else {
-                // close mSipGroup but remember mOpenedToReceiveCalls
-                if (DEBUG) Log.d(TAG, "  close auto reg temporarily: "
-                        + getUri() + ": " + mIncomingCallPendingIntent);
-                mSipGroup.close();
-                mAutoRegistration.stop();
-            }
-        }
-
-        public void close() {
-            mOpenedToReceiveCalls = false;
-            mSipGroup.close();
-            mAutoRegistration.stop();
-            if (DEBUG) Log.d(TAG, "   close: " + getUri() + ": "
-                    + mIncomingCallPendingIntent);
-        }
-
-        public ISipSession createSession(ISipSessionListener listener) {
-            return mSipGroup.createSession(listener);
-        }
-
-        @Override
-        public void onRinging(ISipSession s, SipProfile caller,
-                String sessionDescription) {
-            if (DEBUG) Log.d(TAG, "<<<<< onRinging()");
-            SipSessionGroup.SipSessionImpl session =
-                    (SipSessionGroup.SipSessionImpl) s;
-            synchronized (SipService.this) {
-                try {
-                    if (!isRegistered() || callingSelf(this, session)) {
-                        session.endCall();
-                        return;
-                    }
-
-                    // send out incoming call broadcast
-                    addPendingSession(session);
-                    Intent intent = SipManager.createIncomingCallBroadcast(
-                            session.getCallId(), sessionDescription);
-                    if (DEBUG) Log.d(TAG, " ringing~~ " + getUri() + ": "
-                            + caller.getUri() + ": " + session.getCallId()
-                            + " " + mIncomingCallPendingIntent);
-                    mIncomingCallPendingIntent.send(mContext,
-                            SipManager.INCOMING_CALL_RESULT_CODE, intent);
-                } catch (PendingIntent.CanceledException e) {
-                    Log.w(TAG, "pendingIntent is canceled, drop incoming call");
-                    session.endCall();
-                }
-            }
-        }
-
-        @Override
-        public void onError(ISipSession session, int errorCode,
-                String message) {
-            if (DEBUG) Log.d(TAG, "sip session error: "
-                    + SipErrorCode.toString(errorCode) + ": " + message);
-        }
-
-        public boolean isOpenedToReceiveCalls() {
-            return mOpenedToReceiveCalls;
-        }
-
-        public boolean isRegistered() {
-            return mAutoRegistration.isRegistered();
-        }
-
-        private String getUri() {
-            return mSipGroup.getLocalProfileUri();
-        }
-    }
-
-    private class IntervalMeasurementProcess implements Runnable,
-            SipSessionGroup.KeepAliveProcessCallback {
-        private static final String TAG = "SipKeepAliveInterval";
-        private static final int MIN_INTERVAL = 5; // in seconds
-        private static final int PASS_THRESHOLD = 10;
-        private static final int MAX_RETRY_COUNT = 5;
-        private static final int NAT_MEASUREMENT_RETRY_INTERVAL = 120; // in seconds
-        private SipProfile mLocalProfile;
-        private SipSessionGroupExt mGroup;
-        private SipSessionGroup.SipSessionImpl mSession;
-        private int mMinInterval;
-        private int mMaxInterval;
-        private int mInterval;
-        private int mPassCount;
-
-        public IntervalMeasurementProcess(SipProfile localProfile,
-                int minInterval, int maxInterval) {
-            mMaxInterval = maxInterval;
-            mMinInterval = minInterval;
-            mLocalProfile = localProfile;
-        }
-
-        public void start() {
-            synchronized (SipService.this) {
-                if (mSession != null) {
-                    return;
-                }
-
-                mInterval = (mMaxInterval + mMinInterval) / 2;
-                mPassCount = 0;
-
-                // Don't start measurement if the interval is too small
-                if (mInterval < DEFAULT_KEEPALIVE_INTERVAL || checkTermination()) {
-                    Log.w(TAG, "measurement aborted; interval=[" +
-                            mMinInterval + "," + mMaxInterval + "]");
-                    return;
-                }
-
-                try {
-                    Log.d(TAG, "start measurement w interval=" + mInterval);
-
-                    mGroup = new SipSessionGroupExt(mLocalProfile, null, null);
-                    // TODO: remove this line once SipWakeupTimer can better handle
-                    // variety of timeout values
-                    mGroup.setWakeupTimer(new SipWakeupTimer(mContext, mExecutor));
-
-                    mSession = (SipSessionGroup.SipSessionImpl)
-                            mGroup.createSession(null);
-                    mSession.startKeepAliveProcess(mInterval, this);
-                } catch (Throwable t) {
-                    onError(SipErrorCode.CLIENT_ERROR, t.toString());
-                }
-            }
-        }
-
-        public void stop() {
-            synchronized (SipService.this) {
-                if (mSession != null) {
-                    mSession.stopKeepAliveProcess();
-                    mSession = null;
-                }
-                if (mGroup != null) {
-                    mGroup.close();
-                    mGroup = null;
-                }
-                mTimer.cancel(this);
-            }
-        }
-
-        private void restart() {
-            synchronized (SipService.this) {
-                // Return immediately if the measurement process is stopped
-                if (mSession == null) return;
-
-                Log.d(TAG, "restart measurement w interval=" + mInterval);
-                try {
-                    mSession.stopKeepAliveProcess();
-                    mPassCount = 0;
-                    mSession.startKeepAliveProcess(mInterval, this);
-                } catch (SipException e) {
-                    Log.e(TAG, "restart()", e);
-                }
-            }
-        }
-
-        private boolean checkTermination() {
-            return ((mMaxInterval - mMinInterval) < MIN_INTERVAL);
-        }
-
-        // SipSessionGroup.KeepAliveProcessCallback
-        @Override
-        public void onResponse(boolean portChanged) {
-            synchronized (SipService.this) {
-                if (!portChanged) {
-                    if (++mPassCount != PASS_THRESHOLD) return;
-                    // update the interval, since the current interval is good to
-                    // keep the port mapping.
-                    if (mKeepAliveInterval > 0) {
-                        mLastGoodKeepAliveInterval = mKeepAliveInterval;
-                    }
-                    mKeepAliveInterval = mMinInterval = mInterval;
-                    if (DEBUG) {
-                        Log.d(TAG, "measured good keepalive interval: "
-                                + mKeepAliveInterval);
-                    }
-                    onKeepAliveIntervalChanged();
-                } else {
-                    // Since the rport is changed, shorten the interval.
-                    mMaxInterval = mInterval;
-                }
-                if (checkTermination()) {
-                    // update mKeepAliveInterval and stop measurement.
-                    stop();
-                    // If all the measurements failed, we still set it to
-                    // mMinInterval; If mMinInterval still doesn't work, a new
-                    // measurement with min interval=DEFAULT_KEEPALIVE_INTERVAL
-                    // will be conducted.
-                    mKeepAliveInterval = mMinInterval;
-                    if (DEBUG) {
-                        Log.d(TAG, "measured keepalive interval: "
-                                + mKeepAliveInterval);
-                    }
-                } else {
-                    // calculate the new interval and continue.
-                    mInterval = (mMaxInterval + mMinInterval) / 2;
-                    if (DEBUG) {
-                        Log.d(TAG, "current interval: " + mKeepAliveInterval
-                                + ", test new interval: " + mInterval);
-                    }
-                    restart();
-                }
-            }
-        }
-
-        // SipSessionGroup.KeepAliveProcessCallback
-        @Override
-        public void onError(int errorCode, String description) {
-            Log.w(TAG, "interval measurement error: " + description);
-            restartLater();
-        }
-
-        // timeout handler
-        @Override
-        public void run() {
-            mTimer.cancel(this);
-            restart();
-        }
-
-        private void restartLater() {
-            synchronized (SipService.this) {
-                int interval = NAT_MEASUREMENT_RETRY_INTERVAL;
-                mTimer.cancel(this);
-                mTimer.set(interval * 1000, this);
-            }
-        }
-    }
-
-    private class AutoRegistrationProcess extends SipSessionAdapter
-            implements Runnable, SipSessionGroup.KeepAliveProcessCallback {
-        private static final int MIN_KEEPALIVE_SUCCESS_COUNT = 10;
-        private String TAG = "SipAutoReg";
-
-        private SipSessionGroup.SipSessionImpl mSession;
-        private SipSessionGroup.SipSessionImpl mKeepAliveSession;
-        private SipSessionListenerProxy mProxy = new SipSessionListenerProxy();
-        private int mBackoff = 1;
-        private boolean mRegistered;
-        private long mExpiryTime;
-        private int mErrorCode;
-        private String mErrorMessage;
-        private boolean mRunning = false;
-
-        private int mKeepAliveSuccessCount = 0;
-
-        private String getAction() {
-            return toString();
-        }
-
-        public void start(SipSessionGroup group) {
-            if (!mRunning) {
-                mRunning = true;
-                mBackoff = 1;
-                mSession = (SipSessionGroup.SipSessionImpl)
-                        group.createSession(this);
-                // return right away if no active network connection.
-                if (mSession == null) return;
-
-                // start unregistration to clear up old registration at server
-                // TODO: when rfc5626 is deployed, use reg-id and sip.instance
-                // in registration to avoid adding duplicate entries to server
-                mMyWakeLock.acquire(mSession);
-                mSession.unregister();
-                TAG = "SipAutoReg:" + mSession.getLocalProfile().getUriString();
-            }
-        }
-
-        private void startKeepAliveProcess(int interval) {
-            if (DEBUG) Log.d(TAG, "start keepalive w interval=" + interval);
-            if (mKeepAliveSession == null) {
-                mKeepAliveSession = mSession.duplicate();
-            } else {
-                mKeepAliveSession.stopKeepAliveProcess();
-            }
-            try {
-                mKeepAliveSession.startKeepAliveProcess(interval, this);
-            } catch (SipException e) {
-                Log.e(TAG, "failed to start keepalive w interval=" + interval,
-                        e);
-            }
-        }
-
-        private void stopKeepAliveProcess() {
-            if (mKeepAliveSession != null) {
-                mKeepAliveSession.stopKeepAliveProcess();
-                mKeepAliveSession = null;
-            }
-            mKeepAliveSuccessCount = 0;
-        }
-
-        // SipSessionGroup.KeepAliveProcessCallback
-        @Override
-        public void onResponse(boolean portChanged) {
-            synchronized (SipService.this) {
-                if (portChanged) {
-                    int interval = getKeepAliveInterval();
-                    if (mKeepAliveSuccessCount < MIN_KEEPALIVE_SUCCESS_COUNT) {
-                        Log.i(TAG, "keepalive doesn't work with interval "
-                                + interval + ", past success count="
-                                + mKeepAliveSuccessCount);
-                        if (interval > DEFAULT_KEEPALIVE_INTERVAL) {
-                            restartPortMappingLifetimeMeasurement(
-                                    mSession.getLocalProfile(), interval);
-                            mKeepAliveSuccessCount = 0;
-                        }
-                    } else {
-                        if (DEBUG) {
-                            Log.i(TAG, "keep keepalive going with interval "
-                                    + interval + ", past success count="
-                                    + mKeepAliveSuccessCount);
-                        }
-                        mKeepAliveSuccessCount /= 2;
-                    }
-                } else {
-                    // Start keep-alive interval measurement on the first
-                    // successfully kept-alive SipSessionGroup
-                    startPortMappingLifetimeMeasurement(
-                            mSession.getLocalProfile());
-                    mKeepAliveSuccessCount++;
-                }
-
-                if (!mRunning || !portChanged) return;
-
-                // The keep alive process is stopped when port is changed;
-                // Nullify the session so that the process can be restarted
-                // again when the re-registration is done
-                mKeepAliveSession = null;
-
-                // Acquire wake lock for the registration process. The
-                // lock will be released when registration is complete.
-                mMyWakeLock.acquire(mSession);
-                mSession.register(EXPIRY_TIME);
-            }
-        }
-
-        // SipSessionGroup.KeepAliveProcessCallback
-        @Override
-        public void onError(int errorCode, String description) {
-            if (DEBUG) {
-                Log.e(TAG, "keepalive error: " + description);
-            }
-            onResponse(true); // re-register immediately
-        }
-
-        public void stop() {
-            if (!mRunning) return;
-            mRunning = false;
-            mMyWakeLock.release(mSession);
-            if (mSession != null) {
-                mSession.setListener(null);
-                if (mNetworkType != -1 && mRegistered) mSession.unregister();
-            }
-
-            mTimer.cancel(this);
-            stopKeepAliveProcess();
-
-            mRegistered = false;
-            setListener(mProxy.getListener());
-        }
-
-        public void onKeepAliveIntervalChanged() {
-            if (mKeepAliveSession != null) {
-                int newInterval = getKeepAliveInterval();
-                if (DEBUG) {
-                    Log.v(TAG, "restart keepalive w interval=" + newInterval);
-                }
-                mKeepAliveSuccessCount = 0;
-                startKeepAliveProcess(newInterval);
-            }
-        }
-
-        public void setListener(ISipSessionListener listener) {
-            synchronized (SipService.this) {
-                mProxy.setListener(listener);
-
-                try {
-                    int state = (mSession == null)
-                            ? SipSession.State.READY_TO_CALL
-                            : mSession.getState();
-                    if ((state == SipSession.State.REGISTERING)
-                            || (state == SipSession.State.DEREGISTERING)) {
-                        mProxy.onRegistering(mSession);
-                    } else if (mRegistered) {
-                        int duration = (int)
-                                (mExpiryTime - SystemClock.elapsedRealtime());
-                        mProxy.onRegistrationDone(mSession, duration);
-                    } else if (mErrorCode != SipErrorCode.NO_ERROR) {
-                        if (mErrorCode == SipErrorCode.TIME_OUT) {
-                            mProxy.onRegistrationTimeout(mSession);
-                        } else {
-                            mProxy.onRegistrationFailed(mSession, mErrorCode,
-                                    mErrorMessage);
-                        }
-                    } else if (mNetworkType == -1) {
-                        mProxy.onRegistrationFailed(mSession,
-                                SipErrorCode.DATA_CONNECTION_LOST,
-                                "no data connection");
-                    } else if (!mRunning) {
-                        mProxy.onRegistrationFailed(mSession,
-                                SipErrorCode.CLIENT_ERROR,
-                                "registration not running");
-                    } else {
-                        mProxy.onRegistrationFailed(mSession,
-                                SipErrorCode.IN_PROGRESS,
-                                String.valueOf(state));
-                    }
-                } catch (Throwable t) {
-                    Log.w(TAG, "setListener(): " + t);
-                }
-            }
-        }
-
-        public boolean isRegistered() {
-            return mRegistered;
-        }
-
-        // timeout handler: re-register
-        @Override
-        public void run() {
-            synchronized (SipService.this) {
-                if (!mRunning) return;
-
-                mErrorCode = SipErrorCode.NO_ERROR;
-                mErrorMessage = null;
-                if (DEBUG) Log.d(TAG, "registering");
-                if (mNetworkType != -1) {
-                    mMyWakeLock.acquire(mSession);
-                    mSession.register(EXPIRY_TIME);
-                }
-            }
-        }
-
-        private void restart(int duration) {
-            Log.d(TAG, "Refresh registration " + duration + "s later.");
-            mTimer.cancel(this);
-            mTimer.set(duration * 1000, this);
-        }
-
-        private int backoffDuration() {
-            int duration = SHORT_EXPIRY_TIME * mBackoff;
-            if (duration > 3600) {
-                duration = 3600;
-            } else {
-                mBackoff *= 2;
-            }
-            return duration;
-        }
-
-        @Override
-        public void onRegistering(ISipSession session) {
-            if (DEBUG) Log.d(TAG, "onRegistering(): " + session);
-            synchronized (SipService.this) {
-                if (notCurrentSession(session)) return;
-
-                mRegistered = false;
-                mProxy.onRegistering(session);
-            }
-        }
-
-        private boolean notCurrentSession(ISipSession session) {
-            if (session != mSession) {
-                ((SipSessionGroup.SipSessionImpl) session).setListener(null);
-                mMyWakeLock.release(session);
-                return true;
-            }
-            return !mRunning;
-        }
-
-        @Override
-        public void onRegistrationDone(ISipSession session, int duration) {
-            if (DEBUG) Log.d(TAG, "onRegistrationDone(): " + session);
-            synchronized (SipService.this) {
-                if (notCurrentSession(session)) return;
-
-                mProxy.onRegistrationDone(session, duration);
-
-                if (duration > 0) {
-                    mExpiryTime = SystemClock.elapsedRealtime()
-                            + (duration * 1000);
-
-                    if (!mRegistered) {
-                        mRegistered = true;
-                        // allow some overlap to avoid call drop during renew
-                        duration -= MIN_EXPIRY_TIME;
-                        if (duration < MIN_EXPIRY_TIME) {
-                            duration = MIN_EXPIRY_TIME;
-                        }
-                        restart(duration);
-
-                        SipProfile localProfile = mSession.getLocalProfile();
-                        if ((mKeepAliveSession == null) && (isBehindNAT(mLocalIp)
-                                || localProfile.getSendKeepAlive())) {
-                            startKeepAliveProcess(getKeepAliveInterval());
-                        }
-                    }
-                    mMyWakeLock.release(session);
-                } else {
-                    mRegistered = false;
-                    mExpiryTime = -1L;
-                    if (DEBUG) Log.d(TAG, "Refresh registration immediately");
-                    run();
-                }
-            }
-        }
-
-        @Override
-        public void onRegistrationFailed(ISipSession session, int errorCode,
-                String message) {
-            if (DEBUG) Log.d(TAG, "onRegistrationFailed(): " + session + ": "
-                    + SipErrorCode.toString(errorCode) + ": " + message);
-            synchronized (SipService.this) {
-                if (notCurrentSession(session)) return;
-
-                switch (errorCode) {
-                    case SipErrorCode.INVALID_CREDENTIALS:
-                    case SipErrorCode.SERVER_UNREACHABLE:
-                        if (DEBUG) Log.d(TAG, "   pause auto-registration");
-                        stop();
-                        break;
-                    default:
-                        restartLater();
-                }
-
-                mErrorCode = errorCode;
-                mErrorMessage = message;
-                mProxy.onRegistrationFailed(session, errorCode, message);
-                mMyWakeLock.release(session);
-            }
-        }
-
-        @Override
-        public void onRegistrationTimeout(ISipSession session) {
-            if (DEBUG) Log.d(TAG, "onRegistrationTimeout(): " + session);
-            synchronized (SipService.this) {
-                if (notCurrentSession(session)) return;
-
-                mErrorCode = SipErrorCode.TIME_OUT;
-                mProxy.onRegistrationTimeout(session);
-                restartLater();
-                mMyWakeLock.release(session);
-            }
-        }
-
-        private void restartLater() {
-            mRegistered = false;
-            restart(backoffDuration());
-        }
-    }
-
-    private class ConnectivityReceiver extends BroadcastReceiver {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            Bundle bundle = intent.getExtras();
-            if (bundle != null) {
-                final NetworkInfo info = (NetworkInfo)
-                        bundle.get(ConnectivityManager.EXTRA_NETWORK_INFO);
-
-                // Run the handler in MyExecutor to be protected by wake lock
-                mExecutor.execute(new Runnable() {
-                    public void run() {
-                        onConnectivityChanged(info);
-                    }
-                });
-            }
-        }
-    }
-
-    private void registerReceivers() {
-        mContext.registerReceiver(mConnectivityReceiver,
-                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
-        if (DEBUG) Log.d(TAG, " +++ register receivers");
-    }
-
-    private void unregisterReceivers() {
-        mContext.unregisterReceiver(mConnectivityReceiver);
-        if (DEBUG) Log.d(TAG, " --- unregister receivers");
-
-        // Reset variables maintained by ConnectivityReceiver.
-        mWifiLock.release();
-        mNetworkType = -1;
-    }
-
-    private void updateWakeLocks() {
-        for (SipSessionGroupExt group : mSipGroups.values()) {
-            if (group.isOpenedToReceiveCalls()) {
-                // Also grab the WifiLock when we are disconnected, so the
-                // system will keep trying to reconnect. It will be released
-                // when the system eventually connects to something else.
-                if (mNetworkType == ConnectivityManager.TYPE_WIFI || mNetworkType == -1) {
-                    mWifiLock.acquire();
-                } else {
-                    mWifiLock.release();
-                }
-                return;
-            }
-        }
-        mWifiLock.release();
-        mMyWakeLock.reset(); // in case there's a leak
-    }
-
-    private synchronized void onConnectivityChanged(NetworkInfo info) {
-        // We only care about the default network, and getActiveNetworkInfo()
-        // is the only way to distinguish them. However, as broadcasts are
-        // delivered asynchronously, we might miss DISCONNECTED events from
-        // getActiveNetworkInfo(), which is critical to our SIP stack. To
-        // solve this, if it is a DISCONNECTED event to our current network,
-        // respect it. Otherwise get a new one from getActiveNetworkInfo().
-        if (info == null || info.isConnected() || info.getType() != mNetworkType) {
-            ConnectivityManager cm = (ConnectivityManager)
-                    mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
-            info = cm.getActiveNetworkInfo();
-        }
-
-        // Some devices limit SIP on Wi-Fi. In this case, if we are not on
-        // Wi-Fi, treat it as a DISCONNECTED event.
-        int networkType = (info != null && info.isConnected()) ? info.getType() : -1;
-        if (mSipOnWifiOnly && networkType != ConnectivityManager.TYPE_WIFI) {
-            networkType = -1;
-        }
-
-        // Ignore the event if the current active network is not changed.
-        if (mNetworkType == networkType) {
-            return;
-        }
-        if (DEBUG) {
-            Log.d(TAG, "onConnectivityChanged(): " + mNetworkType +
-                    " -> " + networkType);
-        }
-
-        try {
-            if (mNetworkType != -1) {
-                mLocalIp = null;
-                stopPortMappingMeasurement();
-                for (SipSessionGroupExt group : mSipGroups.values()) {
-                    group.onConnectivityChanged(false);
-                }
-            }
-            mNetworkType = networkType;
-
-            if (mNetworkType != -1) {
-                mLocalIp = determineLocalIp();
-                mKeepAliveInterval = -1;
-                mLastGoodKeepAliveInterval = DEFAULT_KEEPALIVE_INTERVAL;
-                for (SipSessionGroupExt group : mSipGroups.values()) {
-                    group.onConnectivityChanged(true);
-                }
-            }
-            updateWakeLocks();
-        } catch (SipException e) {
-            Log.e(TAG, "onConnectivityChanged()", e);
-        }
-    }
-
-    private static Looper createLooper() {
-        HandlerThread thread = new HandlerThread("SipService.Executor");
-        thread.start();
-        return thread.getLooper();
-    }
-
-    // Executes immediate tasks in a single thread.
-    // Hold/release wake lock for running tasks
-    private class MyExecutor extends Handler implements Executor {
-        MyExecutor() {
-            super(createLooper());
-        }
-
-        @Override
-        public void execute(Runnable task) {
-            mMyWakeLock.acquire(task);
-            Message.obtain(this, 0/* don't care */, task).sendToTarget();
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            if (msg.obj instanceof Runnable) {
-                executeInternal((Runnable) msg.obj);
-            } else {
-                Log.w(TAG, "can't handle msg: " + msg);
-            }
-        }
-
-        private void executeInternal(Runnable task) {
-            try {
-                task.run();
-            } catch (Throwable t) {
-                Log.e(TAG, "run task: " + task, t);
-            } finally {
-                mMyWakeLock.release(task);
-            }
-        }
-    }
-}
diff --git a/voip/java/com/android/server/sip/SipSessionGroup.java b/voip/java/com/android/server/sip/SipSessionGroup.java
deleted file mode 100644
index 6acd456..0000000
--- a/voip/java/com/android/server/sip/SipSessionGroup.java
+++ /dev/null
@@ -1,1835 +0,0 @@
-/*
- * Copyright (C) 2010 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 com.android.server.sip;
-
-import gov.nist.javax.sip.clientauthutils.AccountManager;
-import gov.nist.javax.sip.clientauthutils.UserCredentials;
-import gov.nist.javax.sip.header.ProxyAuthenticate;
-import gov.nist.javax.sip.header.ReferTo;
-import gov.nist.javax.sip.header.SIPHeaderNames;
-import gov.nist.javax.sip.header.StatusLine;
-import gov.nist.javax.sip.header.WWWAuthenticate;
-import gov.nist.javax.sip.header.extensions.ReferredByHeader;
-import gov.nist.javax.sip.header.extensions.ReplacesHeader;
-import gov.nist.javax.sip.message.SIPMessage;
-import gov.nist.javax.sip.message.SIPResponse;
-
-import android.net.sip.ISipSession;
-import android.net.sip.ISipSessionListener;
-import android.net.sip.SipErrorCode;
-import android.net.sip.SipProfile;
-import android.net.sip.SipSession;
-import android.net.sip.SipSessionAdapter;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.EventObject;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.sip.ClientTransaction;
-import javax.sip.Dialog;
-import javax.sip.DialogTerminatedEvent;
-import javax.sip.IOExceptionEvent;
-import javax.sip.ListeningPoint;
-import javax.sip.ObjectInUseException;
-import javax.sip.RequestEvent;
-import javax.sip.ResponseEvent;
-import javax.sip.ServerTransaction;
-import javax.sip.SipException;
-import javax.sip.SipFactory;
-import javax.sip.SipListener;
-import javax.sip.SipProvider;
-import javax.sip.SipStack;
-import javax.sip.TimeoutEvent;
-import javax.sip.Transaction;
-import javax.sip.TransactionState;
-import javax.sip.TransactionTerminatedEvent;
-import javax.sip.TransactionUnavailableException;
-import javax.sip.address.Address;
-import javax.sip.address.SipURI;
-import javax.sip.header.CSeqHeader;
-import javax.sip.header.ContactHeader;
-import javax.sip.header.ExpiresHeader;
-import javax.sip.header.FromHeader;
-import javax.sip.header.HeaderAddress;
-import javax.sip.header.MinExpiresHeader;
-import javax.sip.header.ReferToHeader;
-import javax.sip.header.ViaHeader;
-import javax.sip.message.Message;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-
-
-/**
- * Manages {@link ISipSession}'s for a SIP account.
- */
-class SipSessionGroup implements SipListener {
-    private static final String TAG = "SipSession";
-    private static final boolean DEBUG = false;
-    private static final boolean DEBUG_PING = false;
-    private static final String ANONYMOUS = "anonymous";
-    // Limit the size of thread pool to 1 for the order issue when the phone is
-    // waken up from sleep and there are many packets to be processed in the SIP
-    // stack. Note: The default thread pool size in NIST SIP stack is -1 which is
-    // unlimited.
-    private static final String THREAD_POOL_SIZE = "1";
-    private static final int EXPIRY_TIME = 3600; // in seconds
-    private static final int CANCEL_CALL_TIMER = 3; // in seconds
-    private static final int END_CALL_TIMER = 3; // in seconds
-    private static final int KEEPALIVE_TIMEOUT = 5; // in seconds
-    private static final int INCALL_KEEPALIVE_INTERVAL = 10; // in seconds
-    private static final long WAKE_LOCK_HOLDING_TIME = 500; // in milliseconds
-
-    private static final EventObject DEREGISTER = new EventObject("Deregister");
-    private static final EventObject END_CALL = new EventObject("End call");
-    private static final EventObject HOLD_CALL = new EventObject("Hold call");
-    private static final EventObject CONTINUE_CALL
-            = new EventObject("Continue call");
-
-    private final SipProfile mLocalProfile;
-    private final String mPassword;
-
-    private SipStack mSipStack;
-    private SipHelper mSipHelper;
-
-    // session that processes INVITE requests
-    private SipSessionImpl mCallReceiverSession;
-    private String mLocalIp;
-
-    private SipWakeupTimer mWakeupTimer;
-    private SipWakeLock mWakeLock;
-
-    // call-id-to-SipSession map
-    private Map<String, SipSessionImpl> mSessionMap =
-            new HashMap<String, SipSessionImpl>();
-
-    // external address observed from any response
-    private String mExternalIp;
-    private int mExternalPort;
-
-    /**
-     * @param profile the local profile with password crossed out
-     * @param password the password of the profile
-     * @throws IOException if cannot assign requested address
-     */
-    public SipSessionGroup(SipProfile profile, String password,
-            SipWakeupTimer timer, SipWakeLock wakeLock) throws SipException {
-        mLocalProfile = profile;
-        mPassword = password;
-        mWakeupTimer = timer;
-        mWakeLock = wakeLock;
-        reset();
-    }
-
-    // TODO: remove this method once SipWakeupTimer can better handle variety
-    // of timeout values
-    void setWakeupTimer(SipWakeupTimer timer) {
-        mWakeupTimer = timer;
-    }
-
-    synchronized void reset() throws SipException {
-        Properties properties = new Properties();
-
-        String protocol = mLocalProfile.getProtocol();
-        int port = mLocalProfile.getPort();
-        String server = mLocalProfile.getProxyAddress();
-
-        if (!TextUtils.isEmpty(server)) {
-            properties.setProperty("javax.sip.OUTBOUND_PROXY",
-                    server + ':' + port + '/' + protocol);
-        } else {
-            server = mLocalProfile.getSipDomain();
-        }
-        if (server.startsWith("[") && server.endsWith("]")) {
-            server = server.substring(1, server.length() - 1);
-        }
-
-        String local = null;
-        try {
-            for (InetAddress remote : InetAddress.getAllByName(server)) {
-                DatagramSocket socket = new DatagramSocket();
-                socket.connect(remote, port);
-                if (socket.isConnected()) {
-                    local = socket.getLocalAddress().getHostAddress();
-                    port = socket.getLocalPort();
-                    socket.close();
-                    break;
-                }
-                socket.close();
-            }
-        } catch (Exception e) {
-            // ignore.
-        }
-        if (local == null) {
-            // We are unable to reach the server. Just bail out.
-            return;
-        }
-
-        close();
-        mLocalIp = local;
-
-        properties.setProperty("javax.sip.STACK_NAME", getStackName());
-        properties.setProperty(
-                "gov.nist.javax.sip.THREAD_POOL_SIZE", THREAD_POOL_SIZE);
-        mSipStack = SipFactory.getInstance().createSipStack(properties);
-        try {
-            SipProvider provider = mSipStack.createSipProvider(
-                    mSipStack.createListeningPoint(local, port, protocol));
-            provider.addSipListener(this);
-            mSipHelper = new SipHelper(mSipStack, provider);
-        } catch (SipException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new SipException("failed to initialize SIP stack", e);
-        }
-
-        Log.d(TAG, " start stack for " + mLocalProfile.getUriString());
-        mSipStack.start();
-    }
-
-    synchronized void onConnectivityChanged() {
-        SipSessionImpl[] ss = mSessionMap.values().toArray(
-                    new SipSessionImpl[mSessionMap.size()]);
-        // Iterate on the copied array instead of directly on mSessionMap to
-        // avoid ConcurrentModificationException being thrown when
-        // SipSessionImpl removes itself from mSessionMap in onError() in the
-        // following loop.
-        for (SipSessionImpl s : ss) {
-            s.onError(SipErrorCode.DATA_CONNECTION_LOST,
-                    "data connection lost");
-        }
-    }
-
-    synchronized void resetExternalAddress() {
-        if (DEBUG) {
-            Log.d(TAG, " reset external addr on " + mSipStack);
-        }
-        mExternalIp = null;
-        mExternalPort = 0;
-    }
-
-    public SipProfile getLocalProfile() {
-        return mLocalProfile;
-    }
-
-    public String getLocalProfileUri() {
-        return mLocalProfile.getUriString();
-    }
-
-    private String getStackName() {
-        return "stack" + System.currentTimeMillis();
-    }
-
-    public synchronized void close() {
-        Log.d(TAG, " close stack for " + mLocalProfile.getUriString());
-        onConnectivityChanged();
-        mSessionMap.clear();
-        closeToNotReceiveCalls();
-        if (mSipStack != null) {
-            mSipStack.stop();
-            mSipStack = null;
-            mSipHelper = null;
-        }
-        resetExternalAddress();
-    }
-
-    public synchronized boolean isClosed() {
-        return (mSipStack == null);
-    }
-
-    // For internal use, require listener not to block in callbacks.
-    public synchronized void openToReceiveCalls(ISipSessionListener listener) {
-        if (mCallReceiverSession == null) {
-            mCallReceiverSession = new SipSessionCallReceiverImpl(listener);
-        } else {
-            mCallReceiverSession.setListener(listener);
-        }
-    }
-
-    public synchronized void closeToNotReceiveCalls() {
-        mCallReceiverSession = null;
-    }
-
-    public ISipSession createSession(ISipSessionListener listener) {
-        return (isClosed() ? null : new SipSessionImpl(listener));
-    }
-
-    synchronized boolean containsSession(String callId) {
-        return mSessionMap.containsKey(callId);
-    }
-
-    private synchronized SipSessionImpl getSipSession(EventObject event) {
-        String key = SipHelper.getCallId(event);
-        SipSessionImpl session = mSessionMap.get(key);
-        if ((session != null) && isLoggable(session)) {
-            Log.d(TAG, "session key from event: " + key);
-            Log.d(TAG, "active sessions:");
-            for (String k : mSessionMap.keySet()) {
-                Log.d(TAG, " ..." + k + ": " + mSessionMap.get(k));
-            }
-        }
-        return ((session != null) ? session : mCallReceiverSession);
-    }
-
-    private synchronized void addSipSession(SipSessionImpl newSession) {
-        removeSipSession(newSession);
-        String key = newSession.getCallId();
-        mSessionMap.put(key, newSession);
-        if (isLoggable(newSession)) {
-            Log.d(TAG, "+++  add a session with key:  '" + key + "'");
-            for (String k : mSessionMap.keySet()) {
-                Log.d(TAG, "  " + k + ": " + mSessionMap.get(k));
-            }
-        }
-    }
-
-    private synchronized void removeSipSession(SipSessionImpl session) {
-        if (session == mCallReceiverSession) return;
-        String key = session.getCallId();
-        SipSessionImpl s = mSessionMap.remove(key);
-        // sanity check
-        if ((s != null) && (s != session)) {
-            Log.w(TAG, "session " + session + " is not associated with key '"
-                    + key + "'");
-            mSessionMap.put(key, s);
-            for (Map.Entry<String, SipSessionImpl> entry
-                    : mSessionMap.entrySet()) {
-                if (entry.getValue() == s) {
-                    key = entry.getKey();
-                    mSessionMap.remove(key);
-                }
-            }
-        }
-
-        if ((s != null) && isLoggable(s)) {
-            Log.d(TAG, "remove session " + session + " @key '" + key + "'");
-            for (String k : mSessionMap.keySet()) {
-                Log.d(TAG, "  " + k + ": " + mSessionMap.get(k));
-            }
-        }
-    }
-
-    public void processRequest(final RequestEvent event) {
-        if (isRequestEvent(Request.INVITE, event)) {
-            if (DEBUG) Log.d(TAG, "<<<<< got INVITE, thread:"
-                    + Thread.currentThread());
-            // Acquire a wake lock and keep it for WAKE_LOCK_HOLDING_TIME;
-            // should be large enough to bring up the app.
-            mWakeLock.acquire(WAKE_LOCK_HOLDING_TIME);
-        }
-        process(event);
-    }
-
-    public void processResponse(ResponseEvent event) {
-        process(event);
-    }
-
-    public void processIOException(IOExceptionEvent event) {
-        process(event);
-    }
-
-    public void processTimeout(TimeoutEvent event) {
-        process(event);
-    }
-
-    public void processTransactionTerminated(TransactionTerminatedEvent event) {
-        process(event);
-    }
-
-    public void processDialogTerminated(DialogTerminatedEvent event) {
-        process(event);
-    }
-
-    private synchronized void process(EventObject event) {
-        SipSessionImpl session = getSipSession(event);
-        try {
-            boolean isLoggable = isLoggable(session, event);
-            boolean processed = (session != null) && session.process(event);
-            if (isLoggable && processed) {
-                Log.d(TAG, "new state after: "
-                        + SipSession.State.toString(session.mState));
-            }
-        } catch (Throwable e) {
-            Log.w(TAG, "event process error: " + event, getRootCause(e));
-            session.onError(e);
-        }
-    }
-
-    private String extractContent(Message message) {
-        // Currently we do not support secure MIME bodies.
-        byte[] bytes = message.getRawContent();
-        if (bytes != null) {
-            try {
-                if (message instanceof SIPMessage) {
-                    return ((SIPMessage) message).getMessageContent();
-                } else {
-                    return new String(bytes, "UTF-8");
-                }
-            } catch (UnsupportedEncodingException e) {
-            }
-        }
-        return null;
-    }
-
-    private void extractExternalAddress(ResponseEvent evt) {
-        Response response = evt.getResponse();
-        ViaHeader viaHeader = (ViaHeader)(response.getHeader(
-                SIPHeaderNames.VIA));
-        if (viaHeader == null) return;
-        int rport = viaHeader.getRPort();
-        String externalIp = viaHeader.getReceived();
-        if ((rport > 0) && (externalIp != null)) {
-            mExternalIp = externalIp;
-            mExternalPort = rport;
-            if (DEBUG) {
-                Log.d(TAG, " got external addr " + externalIp + ":" + rport
-                        + " on " + mSipStack);
-            }
-        }
-    }
-
-    private Throwable getRootCause(Throwable exception) {
-        Throwable cause = exception.getCause();
-        while (cause != null) {
-            exception = cause;
-            cause = exception.getCause();
-        }
-        return exception;
-    }
-
-    private SipSessionImpl createNewSession(RequestEvent event,
-            ISipSessionListener listener, ServerTransaction transaction,
-            int newState) throws SipException {
-        SipSessionImpl newSession = new SipSessionImpl(listener);
-        newSession.mServerTransaction = transaction;
-        newSession.mState = newState;
-        newSession.mDialog = newSession.mServerTransaction.getDialog();
-        newSession.mInviteReceived = event;
-        newSession.mPeerProfile = createPeerProfile((HeaderAddress)
-                event.getRequest().getHeader(FromHeader.NAME));
-        newSession.mPeerSessionDescription =
-                extractContent(event.getRequest());
-        return newSession;
-    }
-
-    private class SipSessionCallReceiverImpl extends SipSessionImpl {
-        public SipSessionCallReceiverImpl(ISipSessionListener listener) {
-            super(listener);
-        }
-
-        private int processInviteWithReplaces(RequestEvent event,
-                ReplacesHeader replaces) {
-            String callId = replaces.getCallId();
-            SipSessionImpl session = mSessionMap.get(callId);
-            if (session == null) {
-                return Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST;
-            }
-
-            Dialog dialog = session.mDialog;
-            if (dialog == null) return Response.DECLINE;
-
-            if (!dialog.getLocalTag().equals(replaces.getToTag()) ||
-                    !dialog.getRemoteTag().equals(replaces.getFromTag())) {
-                // No match is found, returns 481.
-                return Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST;
-            }
-
-            ReferredByHeader referredBy = (ReferredByHeader) event.getRequest()
-                    .getHeader(ReferredByHeader.NAME);
-            if ((referredBy == null) ||
-                    !dialog.getRemoteParty().equals(referredBy.getAddress())) {
-                return Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST;
-            }
-            return Response.OK;
-        }
-
-        private void processNewInviteRequest(RequestEvent event)
-                throws SipException {
-            ReplacesHeader replaces = (ReplacesHeader) event.getRequest()
-                    .getHeader(ReplacesHeader.NAME);
-            SipSessionImpl newSession = null;
-            if (replaces != null) {
-                int response = processInviteWithReplaces(event, replaces);
-                if (DEBUG) {
-                    Log.v(TAG, "ReplacesHeader: " + replaces
-                            + " response=" + response);
-                }
-                if (response == Response.OK) {
-                    SipSessionImpl replacedSession =
-                            mSessionMap.get(replaces.getCallId());
-                    // got INVITE w/ replaces request.
-                    newSession = createNewSession(event,
-                            replacedSession.mProxy.getListener(),
-                            mSipHelper.getServerTransaction(event),
-                            SipSession.State.INCOMING_CALL);
-                    newSession.mProxy.onCallTransferring(newSession,
-                            newSession.mPeerSessionDescription);
-                } else {
-                    mSipHelper.sendResponse(event, response);
-                }
-            } else {
-                // New Incoming call.
-                newSession = createNewSession(event, mProxy,
-                        mSipHelper.sendRinging(event, generateTag()),
-                        SipSession.State.INCOMING_CALL);
-                mProxy.onRinging(newSession, newSession.mPeerProfile,
-                        newSession.mPeerSessionDescription);
-            }
-            if (newSession != null) addSipSession(newSession);
-        }
-
-        public boolean process(EventObject evt) throws SipException {
-            if (isLoggable(this, evt)) Log.d(TAG, " ~~~~~   " + this + ": "
-                    + SipSession.State.toString(mState) + ": processing "
-                    + log(evt));
-            if (isRequestEvent(Request.INVITE, evt)) {
-                processNewInviteRequest((RequestEvent) evt);
-                return true;
-            } else if (isRequestEvent(Request.OPTIONS, evt)) {
-                mSipHelper.sendResponse((RequestEvent) evt, Response.OK);
-                return true;
-            } else {
-                return false;
-            }
-        }
-    }
-
-    static interface KeepAliveProcessCallback {
-        /** Invoked when the response of keeping alive comes back. */
-        void onResponse(boolean portChanged);
-        void onError(int errorCode, String description);
-    }
-
-    class SipSessionImpl extends ISipSession.Stub {
-        SipProfile mPeerProfile;
-        SipSessionListenerProxy mProxy = new SipSessionListenerProxy();
-        int mState = SipSession.State.READY_TO_CALL;
-        RequestEvent mInviteReceived;
-        Dialog mDialog;
-        ServerTransaction mServerTransaction;
-        ClientTransaction mClientTransaction;
-        String mPeerSessionDescription;
-        boolean mInCall;
-        SessionTimer mSessionTimer;
-        int mAuthenticationRetryCount;
-
-        private KeepAliveProcess mKeepAliveProcess;
-
-        private SipSessionImpl mKeepAliveSession;
-
-        // the following three members are used for handling refer request.
-        SipSessionImpl mReferSession;
-        ReferredByHeader mReferredBy;
-        String mReplaces;
-
-        // lightweight timer
-        class SessionTimer {
-            private boolean mRunning = true;
-
-            void start(final int timeout) {
-                new Thread(new Runnable() {
-                    public void run() {
-                        sleep(timeout);
-                        if (mRunning) timeout();
-                    }
-                }, "SipSessionTimerThread").start();
-            }
-
-            synchronized void cancel() {
-                mRunning = false;
-                this.notify();
-            }
-
-            private void timeout() {
-                synchronized (SipSessionGroup.this) {
-                    onError(SipErrorCode.TIME_OUT, "Session timed out!");
-                }
-            }
-
-            private synchronized void sleep(int timeout) {
-                try {
-                    this.wait(timeout * 1000);
-                } catch (InterruptedException e) {
-                    Log.e(TAG, "session timer interrupted!");
-                }
-            }
-        }
-
-        public SipSessionImpl(ISipSessionListener listener) {
-            setListener(listener);
-        }
-
-        SipSessionImpl duplicate() {
-            return new SipSessionImpl(mProxy.getListener());
-        }
-
-        private void reset() {
-            mInCall = false;
-            removeSipSession(this);
-            mPeerProfile = null;
-            mState = SipSession.State.READY_TO_CALL;
-            mInviteReceived = null;
-            mPeerSessionDescription = null;
-            mAuthenticationRetryCount = 0;
-            mReferSession = null;
-            mReferredBy = null;
-            mReplaces = null;
-
-            if (mDialog != null) mDialog.delete();
-            mDialog = null;
-
-            try {
-                if (mServerTransaction != null) mServerTransaction.terminate();
-            } catch (ObjectInUseException e) {
-                // ignored
-            }
-            mServerTransaction = null;
-
-            try {
-                if (mClientTransaction != null) mClientTransaction.terminate();
-            } catch (ObjectInUseException e) {
-                // ignored
-            }
-            mClientTransaction = null;
-
-            cancelSessionTimer();
-
-            if (mKeepAliveSession != null) {
-                mKeepAliveSession.stopKeepAliveProcess();
-                mKeepAliveSession = null;
-            }
-        }
-
-        public boolean isInCall() {
-            return mInCall;
-        }
-
-        public String getLocalIp() {
-            return mLocalIp;
-        }
-
-        public SipProfile getLocalProfile() {
-            return mLocalProfile;
-        }
-
-        public SipProfile getPeerProfile() {
-            return mPeerProfile;
-        }
-
-        public String getCallId() {
-            return SipHelper.getCallId(getTransaction());
-        }
-
-        private Transaction getTransaction() {
-            if (mClientTransaction != null) return mClientTransaction;
-            if (mServerTransaction != null) return mServerTransaction;
-            return null;
-        }
-
-        public int getState() {
-            return mState;
-        }
-
-        public void setListener(ISipSessionListener listener) {
-            mProxy.setListener((listener instanceof SipSessionListenerProxy)
-                    ? ((SipSessionListenerProxy) listener).getListener()
-                    : listener);
-        }
-
-        // process the command in a new thread
-        private void doCommandAsync(final EventObject command) {
-            new Thread(new Runnable() {
-                    public void run() {
-                        try {
-                            processCommand(command);
-                        } catch (Throwable e) {
-                            Log.w(TAG, "command error: " + command + ": "
-                                    + mLocalProfile.getUriString(),
-                                    getRootCause(e));
-                            onError(e);
-                        }
-                    }
-            }, "SipSessionAsyncCmdThread").start();
-        }
-
-        public void makeCall(SipProfile peerProfile, String sessionDescription,
-                int timeout) {
-            doCommandAsync(new MakeCallCommand(peerProfile, sessionDescription,
-                    timeout));
-        }
-
-        public void answerCall(String sessionDescription, int timeout) {
-            synchronized (SipSessionGroup.this) {
-                if (mPeerProfile == null) return;
-                doCommandAsync(new MakeCallCommand(mPeerProfile,
-                        sessionDescription, timeout));
-            }
-        }
-
-        public void endCall() {
-            doCommandAsync(END_CALL);
-        }
-
-        public void changeCall(String sessionDescription, int timeout) {
-            synchronized (SipSessionGroup.this) {
-                if (mPeerProfile == null) return;
-                doCommandAsync(new MakeCallCommand(mPeerProfile,
-                        sessionDescription, timeout));
-            }
-        }
-
-        public void register(int duration) {
-            doCommandAsync(new RegisterCommand(duration));
-        }
-
-        public void unregister() {
-            doCommandAsync(DEREGISTER);
-        }
-
-        private void processCommand(EventObject command) throws SipException {
-            if (isLoggable(command)) Log.d(TAG, "process cmd: " + command);
-            if (!process(command)) {
-                onError(SipErrorCode.IN_PROGRESS,
-                        "cannot initiate a new transaction to execute: "
-                        + command);
-            }
-        }
-
-        protected String generateTag() {
-            // 32-bit randomness
-            return String.valueOf((long) (Math.random() * 0x100000000L));
-        }
-
-        public String toString() {
-            try {
-                String s = super.toString();
-                return s.substring(s.indexOf("@")) + ":"
-                        + SipSession.State.toString(mState);
-            } catch (Throwable e) {
-                return super.toString();
-            }
-        }
-
-        public boolean process(EventObject evt) throws SipException {
-            if (isLoggable(this, evt)) Log.d(TAG, " ~~~~~   " + this + ": "
-                    + SipSession.State.toString(mState) + ": processing "
-                    + log(evt));
-            synchronized (SipSessionGroup.this) {
-                if (isClosed()) return false;
-
-                if (mKeepAliveProcess != null) {
-                    // event consumed by keepalive process
-                    if (mKeepAliveProcess.process(evt)) return true;
-                }
-
-                Dialog dialog = null;
-                if (evt instanceof RequestEvent) {
-                    dialog = ((RequestEvent) evt).getDialog();
-                } else if (evt instanceof ResponseEvent) {
-                    dialog = ((ResponseEvent) evt).getDialog();
-                    extractExternalAddress((ResponseEvent) evt);
-                }
-                if (dialog != null) mDialog = dialog;
-
-                boolean processed;
-
-                switch (mState) {
-                case SipSession.State.REGISTERING:
-                case SipSession.State.DEREGISTERING:
-                    processed = registeringToReady(evt);
-                    break;
-                case SipSession.State.READY_TO_CALL:
-                    processed = readyForCall(evt);
-                    break;
-                case SipSession.State.INCOMING_CALL:
-                    processed = incomingCall(evt);
-                    break;
-                case SipSession.State.INCOMING_CALL_ANSWERING:
-                    processed = incomingCallToInCall(evt);
-                    break;
-                case SipSession.State.OUTGOING_CALL:
-                case SipSession.State.OUTGOING_CALL_RING_BACK:
-                    processed = outgoingCall(evt);
-                    break;
-                case SipSession.State.OUTGOING_CALL_CANCELING:
-                    processed = outgoingCallToReady(evt);
-                    break;
-                case SipSession.State.IN_CALL:
-                    processed = inCall(evt);
-                    break;
-                case SipSession.State.ENDING_CALL:
-                    processed = endingCall(evt);
-                    break;
-                default:
-                    processed = false;
-                }
-                return (processed || processExceptions(evt));
-            }
-        }
-
-        private boolean processExceptions(EventObject evt) throws SipException {
-            if (isRequestEvent(Request.BYE, evt)) {
-                // terminate the call whenever a BYE is received
-                mSipHelper.sendResponse((RequestEvent) evt, Response.OK);
-                endCallNormally();
-                return true;
-            } else if (isRequestEvent(Request.CANCEL, evt)) {
-                mSipHelper.sendResponse((RequestEvent) evt,
-                        Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST);
-                return true;
-            } else if (evt instanceof TransactionTerminatedEvent) {
-                if (isCurrentTransaction((TransactionTerminatedEvent) evt)) {
-                    if (evt instanceof TimeoutEvent) {
-                        processTimeout((TimeoutEvent) evt);
-                    } else {
-                        processTransactionTerminated(
-                                (TransactionTerminatedEvent) evt);
-                    }
-                    return true;
-                }
-            } else if (isRequestEvent(Request.OPTIONS, evt)) {
-                mSipHelper.sendResponse((RequestEvent) evt, Response.OK);
-                return true;
-            } else if (evt instanceof DialogTerminatedEvent) {
-                processDialogTerminated((DialogTerminatedEvent) evt);
-                return true;
-            }
-            return false;
-        }
-
-        private void processDialogTerminated(DialogTerminatedEvent event) {
-            if (mDialog == event.getDialog()) {
-                onError(new SipException("dialog terminated"));
-            } else {
-                Log.d(TAG, "not the current dialog; current=" + mDialog
-                        + ", terminated=" + event.getDialog());
-            }
-        }
-
-        private boolean isCurrentTransaction(TransactionTerminatedEvent event) {
-            Transaction current = event.isServerTransaction()
-                    ? mServerTransaction
-                    : mClientTransaction;
-            Transaction target = event.isServerTransaction()
-                    ? event.getServerTransaction()
-                    : event.getClientTransaction();
-
-            if ((current != target) && (mState != SipSession.State.PINGING)) {
-                Log.d(TAG, "not the current transaction; current="
-                        + toString(current) + ", target=" + toString(target));
-                return false;
-            } else if (current != null) {
-                Log.d(TAG, "transaction terminated: " + toString(current));
-                return true;
-            } else {
-                // no transaction; shouldn't be here; ignored
-                return true;
-            }
-        }
-
-        private String toString(Transaction transaction) {
-            if (transaction == null) return "null";
-            Request request = transaction.getRequest();
-            Dialog dialog = transaction.getDialog();
-            CSeqHeader cseq = (CSeqHeader) request.getHeader(CSeqHeader.NAME);
-            return String.format("req=%s,%s,s=%s,ds=%s,", request.getMethod(),
-                    cseq.getSeqNumber(), transaction.getState(),
-                    ((dialog == null) ? "-" : dialog.getState()));
-        }
-
-        private void processTransactionTerminated(
-                TransactionTerminatedEvent event) {
-            switch (mState) {
-                case SipSession.State.IN_CALL:
-                case SipSession.State.READY_TO_CALL:
-                    Log.d(TAG, "Transaction terminated; do nothing");
-                    break;
-                default:
-                    Log.d(TAG, "Transaction terminated early: " + this);
-                    onError(SipErrorCode.TRANSACTION_TERMINTED,
-                            "transaction terminated");
-            }
-        }
-
-        private void processTimeout(TimeoutEvent event) {
-            Log.d(TAG, "processing Timeout...");
-            switch (mState) {
-                case SipSession.State.REGISTERING:
-                case SipSession.State.DEREGISTERING:
-                    reset();
-                    mProxy.onRegistrationTimeout(this);
-                    break;
-                case SipSession.State.INCOMING_CALL:
-                case SipSession.State.INCOMING_CALL_ANSWERING:
-                case SipSession.State.OUTGOING_CALL:
-                case SipSession.State.OUTGOING_CALL_CANCELING:
-                    onError(SipErrorCode.TIME_OUT, event.toString());
-                    break;
-
-                default:
-                    Log.d(TAG, "   do nothing");
-                    break;
-            }
-        }
-
-        private int getExpiryTime(Response response) {
-            int time = -1;
-            ContactHeader contact = (ContactHeader) response.getHeader(ContactHeader.NAME);
-            if (contact != null) {
-                time = contact.getExpires();
-            }
-            ExpiresHeader expires = (ExpiresHeader) response.getHeader(ExpiresHeader.NAME);
-            if (expires != null && (time < 0 || time > expires.getExpires())) {
-                time = expires.getExpires();
-            }
-            if (time <= 0) {
-                time = EXPIRY_TIME;
-            }
-            expires = (ExpiresHeader) response.getHeader(MinExpiresHeader.NAME);
-            if (expires != null && time < expires.getExpires()) {
-                time = expires.getExpires();
-            }
-            if (DEBUG) {
-                Log.v(TAG, "Expiry time = " + time);
-            }
-            return time;
-        }
-
-        private boolean registeringToReady(EventObject evt)
-                throws SipException {
-            if (expectResponse(Request.REGISTER, evt)) {
-                ResponseEvent event = (ResponseEvent) evt;
-                Response response = event.getResponse();
-
-                int statusCode = response.getStatusCode();
-                switch (statusCode) {
-                case Response.OK:
-                    int state = mState;
-                    onRegistrationDone((state == SipSession.State.REGISTERING)
-                            ? getExpiryTime(((ResponseEvent) evt).getResponse())
-                            : -1);
-                    return true;
-                case Response.UNAUTHORIZED:
-                case Response.PROXY_AUTHENTICATION_REQUIRED:
-                    handleAuthentication(event);
-                    return true;
-                default:
-                    if (statusCode >= 500) {
-                        onRegistrationFailed(response);
-                        return true;
-                    }
-                }
-            }
-            return false;
-        }
-
-        private boolean handleAuthentication(ResponseEvent event)
-                throws SipException {
-            Response response = event.getResponse();
-            String nonce = getNonceFromResponse(response);
-            if (nonce == null) {
-                onError(SipErrorCode.SERVER_ERROR,
-                        "server does not provide challenge");
-                return false;
-            } else if (mAuthenticationRetryCount < 2) {
-                mClientTransaction = mSipHelper.handleChallenge(
-                        event, getAccountManager());
-                mDialog = mClientTransaction.getDialog();
-                mAuthenticationRetryCount++;
-                if (isLoggable(this, event)) {
-                    Log.d(TAG, "   authentication retry count="
-                            + mAuthenticationRetryCount);
-                }
-                return true;
-            } else {
-                if (crossDomainAuthenticationRequired(response)) {
-                    onError(SipErrorCode.CROSS_DOMAIN_AUTHENTICATION,
-                            getRealmFromResponse(response));
-                } else {
-                    onError(SipErrorCode.INVALID_CREDENTIALS,
-                            "incorrect username or password");
-                }
-                return false;
-            }
-        }
-
-        private boolean crossDomainAuthenticationRequired(Response response) {
-            String realm = getRealmFromResponse(response);
-            if (realm == null) realm = "";
-            return !mLocalProfile.getSipDomain().trim().equals(realm.trim());
-        }
-
-        private AccountManager getAccountManager() {
-            return new AccountManager() {
-                public UserCredentials getCredentials(ClientTransaction
-                        challengedTransaction, String realm) {
-                    return new UserCredentials() {
-                        public String getUserName() {
-                            String username = mLocalProfile.getAuthUserName();
-                            return (!TextUtils.isEmpty(username) ? username :
-                                    mLocalProfile.getUserName());
-                        }
-
-                        public String getPassword() {
-                            return mPassword;
-                        }
-
-                        public String getSipDomain() {
-                            return mLocalProfile.getSipDomain();
-                        }
-                    };
-                }
-            };
-        }
-
-        private String getRealmFromResponse(Response response) {
-            WWWAuthenticate wwwAuth = (WWWAuthenticate)response.getHeader(
-                    SIPHeaderNames.WWW_AUTHENTICATE);
-            if (wwwAuth != null) return wwwAuth.getRealm();
-            ProxyAuthenticate proxyAuth = (ProxyAuthenticate)response.getHeader(
-                    SIPHeaderNames.PROXY_AUTHENTICATE);
-            return (proxyAuth == null) ? null : proxyAuth.getRealm();
-        }
-
-        private String getNonceFromResponse(Response response) {
-            WWWAuthenticate wwwAuth = (WWWAuthenticate)response.getHeader(
-                    SIPHeaderNames.WWW_AUTHENTICATE);
-            if (wwwAuth != null) return wwwAuth.getNonce();
-            ProxyAuthenticate proxyAuth = (ProxyAuthenticate)response.getHeader(
-                    SIPHeaderNames.PROXY_AUTHENTICATE);
-            return (proxyAuth == null) ? null : proxyAuth.getNonce();
-        }
-
-        private String getResponseString(int statusCode) {
-            StatusLine statusLine = new StatusLine();
-            statusLine.setStatusCode(statusCode);
-            statusLine.setReasonPhrase(SIPResponse.getReasonPhrase(statusCode));
-            return statusLine.encode();
-        }
-
-        private boolean readyForCall(EventObject evt) throws SipException {
-            // expect MakeCallCommand, RegisterCommand, DEREGISTER
-            if (evt instanceof MakeCallCommand) {
-                mState = SipSession.State.OUTGOING_CALL;
-                MakeCallCommand cmd = (MakeCallCommand) evt;
-                mPeerProfile = cmd.getPeerProfile();
-                if (mReferSession != null) {
-                    mSipHelper.sendReferNotify(mReferSession.mDialog,
-                            getResponseString(Response.TRYING));
-                }
-                mClientTransaction = mSipHelper.sendInvite(
-                        mLocalProfile, mPeerProfile, cmd.getSessionDescription(),
-                        generateTag(), mReferredBy, mReplaces);
-                mDialog = mClientTransaction.getDialog();
-                addSipSession(this);
-                startSessionTimer(cmd.getTimeout());
-                mProxy.onCalling(this);
-                return true;
-            } else if (evt instanceof RegisterCommand) {
-                mState = SipSession.State.REGISTERING;
-                int duration = ((RegisterCommand) evt).getDuration();
-                mClientTransaction = mSipHelper.sendRegister(mLocalProfile,
-                        generateTag(), duration);
-                mDialog = mClientTransaction.getDialog();
-                addSipSession(this);
-                mProxy.onRegistering(this);
-                return true;
-            } else if (DEREGISTER == evt) {
-                mState = SipSession.State.DEREGISTERING;
-                mClientTransaction = mSipHelper.sendRegister(mLocalProfile,
-                        generateTag(), 0);
-                mDialog = mClientTransaction.getDialog();
-                addSipSession(this);
-                mProxy.onRegistering(this);
-                return true;
-            }
-            return false;
-        }
-
-        private boolean incomingCall(EventObject evt) throws SipException {
-            // expect MakeCallCommand(answering) , END_CALL cmd , Cancel
-            if (evt instanceof MakeCallCommand) {
-                // answer call
-                mState = SipSession.State.INCOMING_CALL_ANSWERING;
-                mServerTransaction = mSipHelper.sendInviteOk(mInviteReceived,
-                        mLocalProfile,
-                        ((MakeCallCommand) evt).getSessionDescription(),
-                        mServerTransaction,
-                        mExternalIp, mExternalPort);
-                startSessionTimer(((MakeCallCommand) evt).getTimeout());
-                return true;
-            } else if (END_CALL == evt) {
-                mSipHelper.sendInviteBusyHere(mInviteReceived,
-                        mServerTransaction);
-                endCallNormally();
-                return true;
-            } else if (isRequestEvent(Request.CANCEL, evt)) {
-                RequestEvent event = (RequestEvent) evt;
-                mSipHelper.sendResponse(event, Response.OK);
-                mSipHelper.sendInviteRequestTerminated(
-                        mInviteReceived.getRequest(), mServerTransaction);
-                endCallNormally();
-                return true;
-            }
-            return false;
-        }
-
-        private boolean incomingCallToInCall(EventObject evt)
-                throws SipException {
-            // expect ACK, CANCEL request
-            if (isRequestEvent(Request.ACK, evt)) {
-                String sdp = extractContent(((RequestEvent) evt).getRequest());
-                if (sdp != null) mPeerSessionDescription = sdp;
-                if (mPeerSessionDescription == null) {
-                    onError(SipErrorCode.CLIENT_ERROR, "peer sdp is empty");
-                } else {
-                    establishCall(false);
-                }
-                return true;
-            } else if (isRequestEvent(Request.CANCEL, evt)) {
-                // http://tools.ietf.org/html/rfc3261#section-9.2
-                // Final response has been sent; do nothing here.
-                return true;
-            }
-            return false;
-        }
-
-        private boolean outgoingCall(EventObject evt) throws SipException {
-            if (expectResponse(Request.INVITE, evt)) {
-                ResponseEvent event = (ResponseEvent) evt;
-                Response response = event.getResponse();
-
-                int statusCode = response.getStatusCode();
-                switch (statusCode) {
-                case Response.RINGING:
-                case Response.CALL_IS_BEING_FORWARDED:
-                case Response.QUEUED:
-                case Response.SESSION_PROGRESS:
-                    // feedback any provisional responses (except TRYING) as
-                    // ring back for better UX
-                    if (mState == SipSession.State.OUTGOING_CALL) {
-                        mState = SipSession.State.OUTGOING_CALL_RING_BACK;
-                        cancelSessionTimer();
-                        mProxy.onRingingBack(this);
-                    }
-                    return true;
-                case Response.OK:
-                    if (mReferSession != null) {
-                        mSipHelper.sendReferNotify(mReferSession.mDialog,
-                                getResponseString(Response.OK));
-                        // since we don't need to remember the session anymore.
-                        mReferSession = null;
-                    }
-                    mSipHelper.sendInviteAck(event, mDialog);
-                    mPeerSessionDescription = extractContent(response);
-                    establishCall(true);
-                    return true;
-                case Response.UNAUTHORIZED:
-                case Response.PROXY_AUTHENTICATION_REQUIRED:
-                    if (handleAuthentication(event)) {
-                        addSipSession(this);
-                    }
-                    return true;
-                case Response.REQUEST_PENDING:
-                    // TODO:
-                    // rfc3261#section-14.1; re-schedule invite
-                    return true;
-                default:
-                    if (mReferSession != null) {
-                        mSipHelper.sendReferNotify(mReferSession.mDialog,
-                                getResponseString(Response.SERVICE_UNAVAILABLE));
-                    }
-                    if (statusCode >= 400) {
-                        // error: an ack is sent automatically by the stack
-                        onError(response);
-                        return true;
-                    } else if (statusCode >= 300) {
-                        // TODO: handle 3xx (redirect)
-                    } else {
-                        return true;
-                    }
-                }
-                return false;
-            } else if (END_CALL == evt) {
-                // RFC says that UA should not send out cancel when no
-                // response comes back yet. We are cheating for not checking
-                // response.
-                mState = SipSession.State.OUTGOING_CALL_CANCELING;
-                mSipHelper.sendCancel(mClientTransaction);
-                startSessionTimer(CANCEL_CALL_TIMER);
-                return true;
-            } else if (isRequestEvent(Request.INVITE, evt)) {
-                // Call self? Send BUSY HERE so server may redirect the call to
-                // voice mailbox.
-                RequestEvent event = (RequestEvent) evt;
-                mSipHelper.sendInviteBusyHere(event,
-                        event.getServerTransaction());
-                return true;
-            }
-            return false;
-        }
-
-        private boolean outgoingCallToReady(EventObject evt)
-                throws SipException {
-            if (evt instanceof ResponseEvent) {
-                ResponseEvent event = (ResponseEvent) evt;
-                Response response = event.getResponse();
-                int statusCode = response.getStatusCode();
-                if (expectResponse(Request.CANCEL, evt)) {
-                    if (statusCode == Response.OK) {
-                        // do nothing; wait for REQUEST_TERMINATED
-                        return true;
-                    }
-                } else if (expectResponse(Request.INVITE, evt)) {
-                    switch (statusCode) {
-                        case Response.OK:
-                            outgoingCall(evt); // abort Cancel
-                            return true;
-                        case Response.REQUEST_TERMINATED:
-                            endCallNormally();
-                            return true;
-                    }
-                } else {
-                    return false;
-                }
-
-                if (statusCode >= 400) {
-                    onError(response);
-                    return true;
-                }
-            } else if (evt instanceof TransactionTerminatedEvent) {
-                // rfc3261#section-14.1:
-                // if re-invite gets timed out, terminate the dialog; but
-                // re-invite is not reliable, just let it go and pretend
-                // nothing happened.
-                onError(new SipException("timed out"));
-            }
-            return false;
-        }
-
-        private boolean processReferRequest(RequestEvent event)
-                throws SipException {
-            try {
-                ReferToHeader referto = (ReferToHeader) event.getRequest()
-                        .getHeader(ReferTo.NAME);
-                Address address = referto.getAddress();
-                SipURI uri = (SipURI) address.getURI();
-                String replacesHeader = uri.getHeader(ReplacesHeader.NAME);
-                String username = uri.getUser();
-                if (username == null) {
-                    mSipHelper.sendResponse(event, Response.BAD_REQUEST);
-                    return false;
-                }
-                // send notify accepted
-                mSipHelper.sendResponse(event, Response.ACCEPTED);
-                SipSessionImpl newSession = createNewSession(event,
-                        this.mProxy.getListener(),
-                        mSipHelper.getServerTransaction(event),
-                        SipSession.State.READY_TO_CALL);
-                newSession.mReferSession = this;
-                newSession.mReferredBy = (ReferredByHeader) event.getRequest()
-                        .getHeader(ReferredByHeader.NAME);
-                newSession.mReplaces = replacesHeader;
-                newSession.mPeerProfile = createPeerProfile(referto);
-                newSession.mProxy.onCallTransferring(newSession,
-                        null);
-                return true;
-            } catch (IllegalArgumentException e) {
-                throw new SipException("createPeerProfile()", e);
-            }
-        }
-
-        private boolean inCall(EventObject evt) throws SipException {
-            // expect END_CALL cmd, BYE request, hold call (MakeCallCommand)
-            // OK retransmission is handled in SipStack
-            if (END_CALL == evt) {
-                // rfc3261#section-15.1.1
-                mState = SipSession.State.ENDING_CALL;
-                mSipHelper.sendBye(mDialog);
-                mProxy.onCallEnded(this);
-                startSessionTimer(END_CALL_TIMER);
-                return true;
-            } else if (isRequestEvent(Request.INVITE, evt)) {
-                // got Re-INVITE
-                mState = SipSession.State.INCOMING_CALL;
-                RequestEvent event = mInviteReceived = (RequestEvent) evt;
-                mPeerSessionDescription = extractContent(event.getRequest());
-                mServerTransaction = null;
-                mProxy.onRinging(this, mPeerProfile, mPeerSessionDescription);
-                return true;
-            } else if (isRequestEvent(Request.BYE, evt)) {
-                mSipHelper.sendResponse((RequestEvent) evt, Response.OK);
-                endCallNormally();
-                return true;
-            } else if (isRequestEvent(Request.REFER, evt)) {
-                return processReferRequest((RequestEvent) evt);
-            } else if (evt instanceof MakeCallCommand) {
-                // to change call
-                mState = SipSession.State.OUTGOING_CALL;
-                mClientTransaction = mSipHelper.sendReinvite(mDialog,
-                        ((MakeCallCommand) evt).getSessionDescription());
-                startSessionTimer(((MakeCallCommand) evt).getTimeout());
-                return true;
-            } else if (evt instanceof ResponseEvent) {
-                if (expectResponse(Request.NOTIFY, evt)) return true;
-            }
-            return false;
-        }
-
-        private boolean endingCall(EventObject evt) throws SipException {
-            if (expectResponse(Request.BYE, evt)) {
-                ResponseEvent event = (ResponseEvent) evt;
-                Response response = event.getResponse();
-
-                int statusCode = response.getStatusCode();
-                switch (statusCode) {
-                    case Response.UNAUTHORIZED:
-                    case Response.PROXY_AUTHENTICATION_REQUIRED:
-                        if (handleAuthentication(event)) {
-                            return true;
-                        } else {
-                            // can't authenticate; pass through to end session
-                        }
-                }
-                cancelSessionTimer();
-                reset();
-                return true;
-            }
-            return false;
-        }
-
-        // timeout in seconds
-        private void startSessionTimer(int timeout) {
-            if (timeout > 0) {
-                mSessionTimer = new SessionTimer();
-                mSessionTimer.start(timeout);
-            }
-        }
-
-        private void cancelSessionTimer() {
-            if (mSessionTimer != null) {
-                mSessionTimer.cancel();
-                mSessionTimer = null;
-            }
-        }
-
-        private String createErrorMessage(Response response) {
-            return String.format("%s (%d)", response.getReasonPhrase(),
-                    response.getStatusCode());
-        }
-
-        private void enableKeepAlive() {
-            if (mKeepAliveSession != null) {
-                mKeepAliveSession.stopKeepAliveProcess();
-            } else {
-                mKeepAliveSession = duplicate();
-            }
-            try {
-                mKeepAliveSession.startKeepAliveProcess(
-                        INCALL_KEEPALIVE_INTERVAL, mPeerProfile, null);
-            } catch (SipException e) {
-                Log.w(TAG, "keepalive cannot be enabled; ignored", e);
-                mKeepAliveSession.stopKeepAliveProcess();
-            }
-        }
-
-        private void establishCall(boolean enableKeepAlive) {
-            mState = SipSession.State.IN_CALL;
-            cancelSessionTimer();
-            if (!mInCall && enableKeepAlive) enableKeepAlive();
-            mInCall = true;
-            mProxy.onCallEstablished(this, mPeerSessionDescription);
-        }
-
-        private void endCallNormally() {
-            reset();
-            mProxy.onCallEnded(this);
-        }
-
-        private void endCallOnError(int errorCode, String message) {
-            reset();
-            mProxy.onError(this, errorCode, message);
-        }
-
-        private void endCallOnBusy() {
-            reset();
-            mProxy.onCallBusy(this);
-        }
-
-        private void onError(int errorCode, String message) {
-            cancelSessionTimer();
-            switch (mState) {
-                case SipSession.State.REGISTERING:
-                case SipSession.State.DEREGISTERING:
-                    onRegistrationFailed(errorCode, message);
-                    break;
-                default:
-                    endCallOnError(errorCode, message);
-            }
-        }
-
-
-        private void onError(Throwable exception) {
-            exception = getRootCause(exception);
-            onError(getErrorCode(exception), exception.toString());
-        }
-
-        private void onError(Response response) {
-            int statusCode = response.getStatusCode();
-            if (!mInCall && (statusCode == Response.BUSY_HERE)) {
-                endCallOnBusy();
-            } else {
-                onError(getErrorCode(statusCode), createErrorMessage(response));
-            }
-        }
-
-        private int getErrorCode(int responseStatusCode) {
-            switch (responseStatusCode) {
-                case Response.TEMPORARILY_UNAVAILABLE:
-                case Response.FORBIDDEN:
-                case Response.GONE:
-                case Response.NOT_FOUND:
-                case Response.NOT_ACCEPTABLE:
-                case Response.NOT_ACCEPTABLE_HERE:
-                    return SipErrorCode.PEER_NOT_REACHABLE;
-
-                case Response.REQUEST_URI_TOO_LONG:
-                case Response.ADDRESS_INCOMPLETE:
-                case Response.AMBIGUOUS:
-                    return SipErrorCode.INVALID_REMOTE_URI;
-
-                case Response.REQUEST_TIMEOUT:
-                    return SipErrorCode.TIME_OUT;
-
-                default:
-                    if (responseStatusCode < 500) {
-                        return SipErrorCode.CLIENT_ERROR;
-                    } else {
-                        return SipErrorCode.SERVER_ERROR;
-                    }
-            }
-        }
-
-        private int getErrorCode(Throwable exception) {
-            String message = exception.getMessage();
-            if (exception instanceof UnknownHostException) {
-                return SipErrorCode.SERVER_UNREACHABLE;
-            } else if (exception instanceof IOException) {
-                return SipErrorCode.SOCKET_ERROR;
-            } else {
-                return SipErrorCode.CLIENT_ERROR;
-            }
-        }
-
-        private void onRegistrationDone(int duration) {
-            reset();
-            mProxy.onRegistrationDone(this, duration);
-        }
-
-        private void onRegistrationFailed(int errorCode, String message) {
-            reset();
-            mProxy.onRegistrationFailed(this, errorCode, message);
-        }
-
-        private void onRegistrationFailed(Throwable exception) {
-            exception = getRootCause(exception);
-            onRegistrationFailed(getErrorCode(exception),
-                    exception.toString());
-        }
-
-        private void onRegistrationFailed(Response response) {
-            int statusCode = response.getStatusCode();
-            onRegistrationFailed(getErrorCode(statusCode),
-                    createErrorMessage(response));
-        }
-
-        // Notes: SipSessionListener will be replaced by the keepalive process
-        // @param interval in seconds
-        public void startKeepAliveProcess(int interval,
-                KeepAliveProcessCallback callback) throws SipException {
-            synchronized (SipSessionGroup.this) {
-                startKeepAliveProcess(interval, mLocalProfile, callback);
-            }
-        }
-
-        // Notes: SipSessionListener will be replaced by the keepalive process
-        // @param interval in seconds
-        public void startKeepAliveProcess(int interval, SipProfile peerProfile,
-                KeepAliveProcessCallback callback) throws SipException {
-            synchronized (SipSessionGroup.this) {
-                if (mKeepAliveProcess != null) {
-                    throw new SipException("Cannot create more than one "
-                            + "keepalive process in a SipSession");
-                }
-                mPeerProfile = peerProfile;
-                mKeepAliveProcess = new KeepAliveProcess();
-                mProxy.setListener(mKeepAliveProcess);
-                mKeepAliveProcess.start(interval, callback);
-            }
-        }
-
-        public void stopKeepAliveProcess() {
-            synchronized (SipSessionGroup.this) {
-                if (mKeepAliveProcess != null) {
-                    mKeepAliveProcess.stop();
-                    mKeepAliveProcess = null;
-                }
-            }
-        }
-
-        class KeepAliveProcess extends SipSessionAdapter implements Runnable {
-            private static final String TAG = "SipKeepAlive";
-            private boolean mRunning = false;
-            private KeepAliveProcessCallback mCallback;
-
-            private boolean mPortChanged = false;
-            private int mRPort = 0;
-            private int mInterval; // just for debugging
-
-            // @param interval in seconds
-            void start(int interval, KeepAliveProcessCallback callback) {
-                if (mRunning) return;
-                mRunning = true;
-                mInterval = interval;
-                mCallback = new KeepAliveProcessCallbackProxy(callback);
-                mWakeupTimer.set(interval * 1000, this);
-                if (DEBUG) {
-                    Log.d(TAG, "start keepalive:"
-                            + mLocalProfile.getUriString());
-                }
-
-                // No need to run the first time in a separate thread for now
-                run();
-            }
-
-            // return true if the event is consumed
-            boolean process(EventObject evt) throws SipException {
-                if (mRunning && (mState == SipSession.State.PINGING)) {
-                    if (evt instanceof ResponseEvent) {
-                        if (parseOptionsResult(evt)) {
-                            if (mPortChanged) {
-                                resetExternalAddress();
-                                stop();
-                            } else {
-                                cancelSessionTimer();
-                                removeSipSession(SipSessionImpl.this);
-                            }
-                            mCallback.onResponse(mPortChanged);
-                            return true;
-                        }
-                    }
-                }
-                return false;
-            }
-
-            // SipSessionAdapter
-            // To react to the session timeout event and network error.
-            @Override
-            public void onError(ISipSession session, int errorCode, String message) {
-                stop();
-                mCallback.onError(errorCode, message);
-            }
-
-            // SipWakeupTimer timeout handler
-            // To send out keepalive message.
-            @Override
-            public void run() {
-                synchronized (SipSessionGroup.this) {
-                    if (!mRunning) return;
-
-                    if (DEBUG_PING) {
-                        String peerUri = (mPeerProfile == null)
-                                ? "null"
-                                : mPeerProfile.getUriString();
-                        Log.d(TAG, "keepalive: " + mLocalProfile.getUriString()
-                                + " --> " + peerUri + ", interval=" + mInterval);
-                    }
-                    try {
-                        sendKeepAlive();
-                    } catch (Throwable t) {
-                        if (DEBUG) {
-                            Log.w(TAG, "keepalive error: "
-                                    + mLocalProfile.getUriString(), getRootCause(t));
-                        }
-                        // It's possible that the keepalive process is being stopped
-                        // during session.sendKeepAlive() so need to check mRunning
-                        // again here.
-                        if (mRunning) SipSessionImpl.this.onError(t);
-                    }
-                }
-            }
-
-            void stop() {
-                synchronized (SipSessionGroup.this) {
-                    if (DEBUG) {
-                        Log.d(TAG, "stop keepalive:" + mLocalProfile.getUriString()
-                                + ",RPort=" + mRPort);
-                    }
-                    mRunning = false;
-                    mWakeupTimer.cancel(this);
-                    reset();
-                }
-            }
-
-            private void sendKeepAlive() throws SipException, InterruptedException {
-                synchronized (SipSessionGroup.this) {
-                    mState = SipSession.State.PINGING;
-                    mClientTransaction = mSipHelper.sendOptions(
-                            mLocalProfile, mPeerProfile, generateTag());
-                    mDialog = mClientTransaction.getDialog();
-                    addSipSession(SipSessionImpl.this);
-
-                    startSessionTimer(KEEPALIVE_TIMEOUT);
-                    // when timed out, onError() will be called with SipErrorCode.TIME_OUT
-                }
-            }
-
-            private boolean parseOptionsResult(EventObject evt) {
-                if (expectResponse(Request.OPTIONS, evt)) {
-                    ResponseEvent event = (ResponseEvent) evt;
-                    int rPort = getRPortFromResponse(event.getResponse());
-                    if (rPort != -1) {
-                        if (mRPort == 0) mRPort = rPort;
-                        if (mRPort != rPort) {
-                            mPortChanged = true;
-                            if (DEBUG) Log.d(TAG, String.format(
-                                    "rport is changed: %d <> %d", mRPort, rPort));
-                            mRPort = rPort;
-                        } else {
-                            if (DEBUG) Log.d(TAG, "rport is the same: " + rPort);
-                        }
-                    } else {
-                        if (DEBUG) Log.w(TAG, "peer did not respond rport");
-                    }
-                    return true;
-                }
-                return false;
-            }
-
-            private int getRPortFromResponse(Response response) {
-                ViaHeader viaHeader = (ViaHeader)(response.getHeader(
-                        SIPHeaderNames.VIA));
-                return (viaHeader == null) ? -1 : viaHeader.getRPort();
-            }
-        }
-    }
-
-    /**
-     * @return true if the event is a request event matching the specified
-     *      method; false otherwise
-     */
-    private static boolean isRequestEvent(String method, EventObject event) {
-        try {
-            if (event instanceof RequestEvent) {
-                RequestEvent requestEvent = (RequestEvent) event;
-                return method.equals(requestEvent.getRequest().getMethod());
-            }
-        } catch (Throwable e) {
-        }
-        return false;
-    }
-
-    private static String getCseqMethod(Message message) {
-        return ((CSeqHeader) message.getHeader(CSeqHeader.NAME)).getMethod();
-    }
-
-    /**
-     * @return true if the event is a response event and the CSeqHeader method
-     * match the given arguments; false otherwise
-     */
-    private static boolean expectResponse(
-            String expectedMethod, EventObject evt) {
-        if (evt instanceof ResponseEvent) {
-            ResponseEvent event = (ResponseEvent) evt;
-            Response response = event.getResponse();
-            return expectedMethod.equalsIgnoreCase(getCseqMethod(response));
-        }
-        return false;
-    }
-
-    /**
-     * @return true if the event is a response event and the response code and
-     *      CSeqHeader method match the given arguments; false otherwise
-     */
-    private static boolean expectResponse(
-            int responseCode, String expectedMethod, EventObject evt) {
-        if (evt instanceof ResponseEvent) {
-            ResponseEvent event = (ResponseEvent) evt;
-            Response response = event.getResponse();
-            if (response.getStatusCode() == responseCode) {
-                return expectedMethod.equalsIgnoreCase(getCseqMethod(response));
-            }
-        }
-        return false;
-    }
-
-    private static SipProfile createPeerProfile(HeaderAddress header)
-            throws SipException {
-        try {
-            Address address = header.getAddress();
-            SipURI uri = (SipURI) address.getURI();
-            String username = uri.getUser();
-            if (username == null) username = ANONYMOUS;
-            int port = uri.getPort();
-            SipProfile.Builder builder =
-                    new SipProfile.Builder(username, uri.getHost())
-                    .setDisplayName(address.getDisplayName());
-            if (port > 0) builder.setPort(port);
-            return builder.build();
-        } catch (IllegalArgumentException e) {
-            throw new SipException("createPeerProfile()", e);
-        } catch (ParseException e) {
-            throw new SipException("createPeerProfile()", e);
-        }
-    }
-
-    private static boolean isLoggable(SipSessionImpl s) {
-        if (s != null) {
-            switch (s.mState) {
-                case SipSession.State.PINGING:
-                    return DEBUG_PING;
-            }
-        }
-        return DEBUG;
-    }
-
-    private static boolean isLoggable(EventObject evt) {
-        return isLoggable(null, evt);
-    }
-
-    private static boolean isLoggable(SipSessionImpl s, EventObject evt) {
-        if (!isLoggable(s)) return false;
-        if (evt == null) return false;
-
-        if (evt instanceof ResponseEvent) {
-            Response response = ((ResponseEvent) evt).getResponse();
-            if (Request.OPTIONS.equals(response.getHeader(CSeqHeader.NAME))) {
-                return DEBUG_PING;
-            }
-            return DEBUG;
-        } else if (evt instanceof RequestEvent) {
-            if (isRequestEvent(Request.OPTIONS, evt)) {
-                return DEBUG_PING;
-            }
-            return DEBUG;
-        }
-        return false;
-    }
-
-    private static String log(EventObject evt) {
-        if (evt instanceof RequestEvent) {
-            return ((RequestEvent) evt).getRequest().toString();
-        } else if (evt instanceof ResponseEvent) {
-            return ((ResponseEvent) evt).getResponse().toString();
-        } else {
-            return evt.toString();
-        }
-    }
-
-    private class RegisterCommand extends EventObject {
-        private int mDuration;
-
-        public RegisterCommand(int duration) {
-            super(SipSessionGroup.this);
-            mDuration = duration;
-        }
-
-        public int getDuration() {
-            return mDuration;
-        }
-    }
-
-    private class MakeCallCommand extends EventObject {
-        private String mSessionDescription;
-        private int mTimeout; // in seconds
-
-        public MakeCallCommand(SipProfile peerProfile,
-                String sessionDescription) {
-            this(peerProfile, sessionDescription, -1);
-        }
-
-        public MakeCallCommand(SipProfile peerProfile,
-                String sessionDescription, int timeout) {
-            super(peerProfile);
-            mSessionDescription = sessionDescription;
-            mTimeout = timeout;
-        }
-
-        public SipProfile getPeerProfile() {
-            return (SipProfile) getSource();
-        }
-
-        public String getSessionDescription() {
-            return mSessionDescription;
-        }
-
-        public int getTimeout() {
-            return mTimeout;
-        }
-    }
-
-    /** Class to help safely run KeepAliveProcessCallback in a different thread. */
-    static class KeepAliveProcessCallbackProxy implements KeepAliveProcessCallback {
-        private KeepAliveProcessCallback mCallback;
-
-        KeepAliveProcessCallbackProxy(KeepAliveProcessCallback callback) {
-            mCallback = callback;
-        }
-
-        private void proxy(Runnable runnable) {
-            // One thread for each calling back.
-            // Note: Guarantee ordering if the issue becomes important. Currently,
-            // the chance of handling two callback events at a time is none.
-            new Thread(runnable, "SIP-KeepAliveProcessCallbackThread").start();
-        }
-
-        public void onResponse(final boolean portChanged) {
-            if (mCallback == null) return;
-            proxy(new Runnable() {
-                public void run() {
-                    try {
-                        mCallback.onResponse(portChanged);
-                    } catch (Throwable t) {
-                        Log.w(TAG, "onResponse", t);
-                    }
-                }
-            });
-        }
-
-        public void onError(final int errorCode, final String description) {
-            if (mCallback == null) return;
-            proxy(new Runnable() {
-                public void run() {
-                    try {
-                        mCallback.onError(errorCode, description);
-                    } catch (Throwable t) {
-                        Log.w(TAG, "onError", t);
-                    }
-                }
-            });
-        }
-    }
-}
diff --git a/voip/java/com/android/server/sip/SipSessionListenerProxy.java b/voip/java/com/android/server/sip/SipSessionListenerProxy.java
deleted file mode 100644
index 8655a3a..0000000
--- a/voip/java/com/android/server/sip/SipSessionListenerProxy.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright (C) 2010 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 com.android.server.sip;
-
-import android.net.sip.ISipSession;
-import android.net.sip.ISipSessionListener;
-import android.net.sip.SipProfile;
-import android.os.DeadObjectException;
-import android.util.Log;
-
-/** Class to help safely run a callback in a different thread. */
-class SipSessionListenerProxy extends ISipSessionListener.Stub {
-    private static final String TAG = "SipSession";
-
-    private ISipSessionListener mListener;
-
-    public void setListener(ISipSessionListener listener) {
-        mListener = listener;
-    }
-
-    public ISipSessionListener getListener() {
-        return mListener;
-    }
-
-    private void proxy(Runnable runnable) {
-        // One thread for each calling back.
-        // Note: Guarantee ordering if the issue becomes important. Currently,
-        // the chance of handling two callback events at a time is none.
-        new Thread(runnable, "SipSessionCallbackThread").start();
-    }
-
-    public void onCalling(final ISipSession session) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onCalling(session);
-                } catch (Throwable t) {
-                    handle(t, "onCalling()");
-                }
-            }
-        });
-    }
-
-    public void onRinging(final ISipSession session, final SipProfile caller,
-            final String sessionDescription) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onRinging(session, caller, sessionDescription);
-                } catch (Throwable t) {
-                    handle(t, "onRinging()");
-                }
-            }
-        });
-    }
-
-    public void onRingingBack(final ISipSession session) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onRingingBack(session);
-                } catch (Throwable t) {
-                    handle(t, "onRingingBack()");
-                }
-            }
-        });
-    }
-
-    public void onCallEstablished(final ISipSession session,
-            final String sessionDescription) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onCallEstablished(session, sessionDescription);
-                } catch (Throwable t) {
-                    handle(t, "onCallEstablished()");
-                }
-            }
-        });
-    }
-
-    public void onCallEnded(final ISipSession session) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onCallEnded(session);
-                } catch (Throwable t) {
-                    handle(t, "onCallEnded()");
-                }
-            }
-        });
-    }
-
-    public void onCallTransferring(final ISipSession newSession,
-            final String sessionDescription) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onCallTransferring(newSession, sessionDescription);
-                } catch (Throwable t) {
-                    handle(t, "onCallTransferring()");
-                }
-            }
-        });
-    }
-
-    public void onCallBusy(final ISipSession session) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onCallBusy(session);
-                } catch (Throwable t) {
-                    handle(t, "onCallBusy()");
-                }
-            }
-        });
-    }
-
-    public void onCallChangeFailed(final ISipSession session,
-            final int errorCode, final String message) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onCallChangeFailed(session, errorCode, message);
-                } catch (Throwable t) {
-                    handle(t, "onCallChangeFailed()");
-                }
-            }
-        });
-    }
-
-    public void onError(final ISipSession session, final int errorCode,
-            final String message) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onError(session, errorCode, message);
-                } catch (Throwable t) {
-                    handle(t, "onError()");
-                }
-            }
-        });
-    }
-
-    public void onRegistering(final ISipSession session) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onRegistering(session);
-                } catch (Throwable t) {
-                    handle(t, "onRegistering()");
-                }
-            }
-        });
-    }
-
-    public void onRegistrationDone(final ISipSession session,
-            final int duration) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onRegistrationDone(session, duration);
-                } catch (Throwable t) {
-                    handle(t, "onRegistrationDone()");
-                }
-            }
-        });
-    }
-
-    public void onRegistrationFailed(final ISipSession session,
-            final int errorCode, final String message) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onRegistrationFailed(session, errorCode, message);
-                } catch (Throwable t) {
-                    handle(t, "onRegistrationFailed()");
-                }
-            }
-        });
-    }
-
-    public void onRegistrationTimeout(final ISipSession session) {
-        if (mListener == null) return;
-        proxy(new Runnable() {
-            public void run() {
-                try {
-                    mListener.onRegistrationTimeout(session);
-                } catch (Throwable t) {
-                    handle(t, "onRegistrationTimeout()");
-                }
-            }
-        });
-    }
-
-    private void handle(Throwable t, String message) {
-        if (t instanceof DeadObjectException) {
-            mListener = null;
-            // This creates race but it's harmless. Just don't log the error
-            // when it happens.
-        } else if (mListener != null) {
-            Log.w(TAG, message, t);
-        }
-    }
-}
diff --git a/voip/java/com/android/server/sip/SipWakeLock.java b/voip/java/com/android/server/sip/SipWakeLock.java
deleted file mode 100644
index 0c4d14c..0000000
--- a/voip/java/com/android/server/sip/SipWakeLock.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2010, 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 com.android.server.sip;
-
-import android.os.PowerManager;
-import android.util.Log;
-
-import java.util.HashSet;
-
-class SipWakeLock {
-    private static final boolean DEBUG = false;
-    private static final String TAG = "SipWakeLock";
-    private PowerManager mPowerManager;
-    private PowerManager.WakeLock mWakeLock;
-    private PowerManager.WakeLock mTimerWakeLock;
-    private HashSet<Object> mHolders = new HashSet<Object>();
-
-    SipWakeLock(PowerManager powerManager) {
-        mPowerManager = powerManager;
-    }
-
-    synchronized void reset() {
-        if (DEBUG) Log.v(TAG, "reset count=" + mHolders.size());
-        mHolders.clear();
-        release(null);
-    }
-
-    synchronized void acquire(long timeout) {
-        if (mTimerWakeLock == null) {
-            mTimerWakeLock = mPowerManager.newWakeLock(
-                    PowerManager.PARTIAL_WAKE_LOCK, "SipWakeLock.timer");
-            mTimerWakeLock.setReferenceCounted(true);
-        }
-        mTimerWakeLock.acquire(timeout);
-    }
-
-    synchronized void acquire(Object holder) {
-        mHolders.add(holder);
-        if (mWakeLock == null) {
-            mWakeLock = mPowerManager.newWakeLock(
-                    PowerManager.PARTIAL_WAKE_LOCK, "SipWakeLock");
-        }
-        if (!mWakeLock.isHeld()) mWakeLock.acquire();
-        if (DEBUG) Log.v(TAG, "acquire count=" + mHolders.size());
-    }
-
-    synchronized void release(Object holder) {
-        mHolders.remove(holder);
-        if ((mWakeLock != null) && mHolders.isEmpty()
-                && mWakeLock.isHeld()) {
-            mWakeLock.release();
-        }
-        if (DEBUG) Log.v(TAG, "release count=" + mHolders.size());
-    }
-}
diff --git a/voip/java/com/android/server/sip/SipWakeupTimer.java b/voip/java/com/android/server/sip/SipWakeupTimer.java
deleted file mode 100644
index 00d47ac..0000000
--- a/voip/java/com/android/server/sip/SipWakeupTimer.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Copyright (C) 2011, 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 com.android.server.sip;
-
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.SystemClock;
-import android.util.Log;
-
-import java.io.IOException;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.TreeSet;
-import java.util.concurrent.Executor;
-import javax.sip.SipException;
-
-/**
- * Timer that can schedule events to occur even when the device is in sleep.
- */
-class SipWakeupTimer extends BroadcastReceiver {
-    private static final String TAG = "_SIP.WkTimer_";
-    private static final String TRIGGER_TIME = "TriggerTime";
-    private static final boolean DEBUG_TIMER = SipService.DEBUG && false;
-
-    private Context mContext;
-    private AlarmManager mAlarmManager;
-
-    // runnable --> time to execute in SystemClock
-    private TreeSet<MyEvent> mEventQueue =
-            new TreeSet<MyEvent>(new MyEventComparator());
-
-    private PendingIntent mPendingIntent;
-
-    private Executor mExecutor;
-
-    public SipWakeupTimer(Context context, Executor executor) {
-        mContext = context;
-        mAlarmManager = (AlarmManager)
-                context.getSystemService(Context.ALARM_SERVICE);
-
-        IntentFilter filter = new IntentFilter(getAction());
-        context.registerReceiver(this, filter);
-        mExecutor = executor;
-    }
-
-    /**
-     * Stops the timer. No event can be scheduled after this method is called.
-     */
-    public synchronized void stop() {
-        mContext.unregisterReceiver(this);
-        if (mPendingIntent != null) {
-            mAlarmManager.cancel(mPendingIntent);
-            mPendingIntent = null;
-        }
-        mEventQueue.clear();
-        mEventQueue = null;
-    }
-
-    private boolean stopped() {
-        if (mEventQueue == null) {
-            Log.w(TAG, "Timer stopped");
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    private void cancelAlarm() {
-        mAlarmManager.cancel(mPendingIntent);
-        mPendingIntent = null;
-    }
-
-    private void recalculatePeriods() {
-        if (mEventQueue.isEmpty()) return;
-
-        MyEvent firstEvent = mEventQueue.first();
-        int minPeriod = firstEvent.mMaxPeriod;
-        long minTriggerTime = firstEvent.mTriggerTime;
-        for (MyEvent e : mEventQueue) {
-            e.mPeriod = e.mMaxPeriod / minPeriod * minPeriod;
-            int interval = (int) (e.mLastTriggerTime + e.mMaxPeriod
-                    - minTriggerTime);
-            interval = interval / minPeriod * minPeriod;
-            e.mTriggerTime = minTriggerTime + interval;
-        }
-        TreeSet<MyEvent> newQueue = new TreeSet<MyEvent>(
-                mEventQueue.comparator());
-        newQueue.addAll((Collection<MyEvent>) mEventQueue);
-        mEventQueue.clear();
-        mEventQueue = newQueue;
-        if (DEBUG_TIMER) {
-            Log.d(TAG, "queue re-calculated");
-            printQueue();
-        }
-    }
-
-    // Determines the period and the trigger time of the new event and insert it
-    // to the queue.
-    private void insertEvent(MyEvent event) {
-        long now = SystemClock.elapsedRealtime();
-        if (mEventQueue.isEmpty()) {
-            event.mTriggerTime = now + event.mPeriod;
-            mEventQueue.add(event);
-            return;
-        }
-        MyEvent firstEvent = mEventQueue.first();
-        int minPeriod = firstEvent.mPeriod;
-        if (minPeriod <= event.mMaxPeriod) {
-            event.mPeriod = event.mMaxPeriod / minPeriod * minPeriod;
-            int interval = event.mMaxPeriod;
-            interval -= (int) (firstEvent.mTriggerTime - now);
-            interval = interval / minPeriod * minPeriod;
-            event.mTriggerTime = firstEvent.mTriggerTime + interval;
-            mEventQueue.add(event);
-        } else {
-            long triggerTime = now + event.mPeriod;
-            if (firstEvent.mTriggerTime < triggerTime) {
-                event.mTriggerTime = firstEvent.mTriggerTime;
-                event.mLastTriggerTime -= event.mPeriod;
-            } else {
-                event.mTriggerTime = triggerTime;
-            }
-            mEventQueue.add(event);
-            recalculatePeriods();
-        }
-    }
-
-    /**
-     * Sets a periodic timer.
-     *
-     * @param period the timer period; in milli-second
-     * @param callback is called back when the timer goes off; the same callback
-     *      can be specified in multiple timer events
-     */
-    public synchronized void set(int period, Runnable callback) {
-        if (stopped()) return;
-
-        long now = SystemClock.elapsedRealtime();
-        MyEvent event = new MyEvent(period, callback, now);
-        insertEvent(event);
-
-        if (mEventQueue.first() == event) {
-            if (mEventQueue.size() > 1) cancelAlarm();
-            scheduleNext();
-        }
-
-        long triggerTime = event.mTriggerTime;
-        if (DEBUG_TIMER) {
-            Log.d(TAG, " add event " + event + " scheduled on "
-                    + showTime(triggerTime) + " at " + showTime(now)
-                    + ", #events=" + mEventQueue.size());
-            printQueue();
-        }
-    }
-
-    /**
-     * Cancels all the timer events with the specified callback.
-     *
-     * @param callback the callback
-     */
-    public synchronized void cancel(Runnable callback) {
-        if (stopped() || mEventQueue.isEmpty()) return;
-        if (DEBUG_TIMER) Log.d(TAG, "cancel:" + callback);
-
-        MyEvent firstEvent = mEventQueue.first();
-        for (Iterator<MyEvent> iter = mEventQueue.iterator();
-                iter.hasNext();) {
-            MyEvent event = iter.next();
-            if (event.mCallback == callback) {
-                iter.remove();
-                if (DEBUG_TIMER) Log.d(TAG, "    cancel found:" + event);
-            }
-        }
-        if (mEventQueue.isEmpty()) {
-            cancelAlarm();
-        } else if (mEventQueue.first() != firstEvent) {
-            cancelAlarm();
-            firstEvent = mEventQueue.first();
-            firstEvent.mPeriod = firstEvent.mMaxPeriod;
-            firstEvent.mTriggerTime = firstEvent.mLastTriggerTime
-                    + firstEvent.mPeriod;
-            recalculatePeriods();
-            scheduleNext();
-        }
-        if (DEBUG_TIMER) {
-            Log.d(TAG, "after cancel:");
-            printQueue();
-        }
-    }
-
-    private void scheduleNext() {
-        if (stopped() || mEventQueue.isEmpty()) return;
-
-        if (mPendingIntent != null) {
-            throw new RuntimeException("pendingIntent is not null!");
-        }
-
-        MyEvent event = mEventQueue.first();
-        Intent intent = new Intent(getAction());
-        intent.putExtra(TRIGGER_TIME, event.mTriggerTime);
-        PendingIntent pendingIntent = mPendingIntent =
-                PendingIntent.getBroadcast(mContext, 0, intent,
-                        PendingIntent.FLAG_UPDATE_CURRENT);
-        mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
-                event.mTriggerTime, pendingIntent);
-    }
-
-    @Override
-    public synchronized void onReceive(Context context, Intent intent) {
-        // This callback is already protected by AlarmManager's wake lock.
-        String action = intent.getAction();
-        if (getAction().equals(action)
-                && intent.getExtras().containsKey(TRIGGER_TIME)) {
-            mPendingIntent = null;
-            long triggerTime = intent.getLongExtra(TRIGGER_TIME, -1L);
-            execute(triggerTime);
-        } else {
-            Log.d(TAG, "unrecognized intent: " + intent);
-        }
-    }
-
-    private void printQueue() {
-        int count = 0;
-        for (MyEvent event : mEventQueue) {
-            Log.d(TAG, "     " + event + ": scheduled at "
-                    + showTime(event.mTriggerTime) + ": last at "
-                    + showTime(event.mLastTriggerTime));
-            if (++count >= 5) break;
-        }
-        if (mEventQueue.size() > count) {
-            Log.d(TAG, "     .....");
-        } else if (count == 0) {
-            Log.d(TAG, "     <empty>");
-        }
-    }
-
-    private void execute(long triggerTime) {
-        if (DEBUG_TIMER) Log.d(TAG, "time's up, triggerTime = "
-                + showTime(triggerTime) + ": " + mEventQueue.size());
-        if (stopped() || mEventQueue.isEmpty()) return;
-
-        for (MyEvent event : mEventQueue) {
-            if (event.mTriggerTime != triggerTime) continue;
-            if (DEBUG_TIMER) Log.d(TAG, "execute " + event);
-
-            event.mLastTriggerTime = triggerTime;
-            event.mTriggerTime += event.mPeriod;
-
-            // run the callback in the handler thread to prevent deadlock
-            mExecutor.execute(event.mCallback);
-        }
-        if (DEBUG_TIMER) {
-            Log.d(TAG, "after timeout execution");
-            printQueue();
-        }
-        scheduleNext();
-    }
-
-    private String getAction() {
-        return toString();
-    }
-
-    private String showTime(long time) {
-        int ms = (int) (time % 1000);
-        int s = (int) (time / 1000);
-        int m = s / 60;
-        s %= 60;
-        return String.format("%d.%d.%d", m, s, ms);
-    }
-
-    private static class MyEvent {
-        int mPeriod;
-        int mMaxPeriod;
-        long mTriggerTime;
-        long mLastTriggerTime;
-        Runnable mCallback;
-
-        MyEvent(int period, Runnable callback, long now) {
-            mPeriod = mMaxPeriod = period;
-            mCallback = callback;
-            mLastTriggerTime = now;
-        }
-
-        @Override
-        public String toString() {
-            String s = super.toString();
-            s = s.substring(s.indexOf("@"));
-            return s + ":" + (mPeriod / 1000) + ":" + (mMaxPeriod / 1000) + ":"
-                    + toString(mCallback);
-        }
-
-        private String toString(Object o) {
-            String s = o.toString();
-            int index = s.indexOf("$");
-            if (index > 0) s = s.substring(index + 1);
-            return s;
-        }
-    }
-
-    // Sort the events by mMaxPeriod so that the first event can be used to
-    // align events with larger periods
-    private static class MyEventComparator implements Comparator<MyEvent> {
-        public int compare(MyEvent e1, MyEvent e2) {
-            if (e1 == e2) return 0;
-            int diff = e1.mMaxPeriod - e2.mMaxPeriod;
-            if (diff == 0) diff = -1;
-            return diff;
-        }
-
-        public boolean equals(Object that) {
-            return (this == that);
-        }
-    }
-}
diff --git a/voip/jni/rtp/AmrCodec.cpp b/voip/jni/rtp/AmrCodec.cpp
deleted file mode 100644
index e2d820e..0000000
--- a/voip/jni/rtp/AmrCodec.cpp
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyrightm (C) 2010 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.
- */
-
-#include <string.h>
-
-#include "AudioCodec.h"
-
-#include "gsmamr_dec.h"
-#include "gsmamr_enc.h"
-
-namespace {
-
-const int gFrameBits[8] = {95, 103, 118, 134, 148, 159, 204, 244};
-
-//------------------------------------------------------------------------------
-
-// See RFC 4867 for the encoding details.
-
-class AmrCodec : public AudioCodec
-{
-public:
-    AmrCodec() {
-        if (AMREncodeInit(&mEncoder, &mSidSync, false)) {
-            mEncoder = NULL;
-        }
-        if (GSMInitDecode(&mDecoder, (Word8 *)"RTP")) {
-            mDecoder = NULL;
-        }
-    }
-
-    ~AmrCodec() {
-        if (mEncoder) {
-            AMREncodeExit(&mEncoder, &mSidSync);
-        }
-        if (mDecoder) {
-            GSMDecodeFrameExit(&mDecoder);
-        }
-    }
-
-    int set(int sampleRate, const char *fmtp);
-    int encode(void *payload, int16_t *samples);
-    int decode(int16_t *samples, int count, void *payload, int length);
-
-private:
-    void *mEncoder;
-    void *mSidSync;
-    void *mDecoder;
-
-    int mMode;
-    int mModeSet;
-    bool mOctetAligned;
-};
-
-int AmrCodec::set(int sampleRate, const char *fmtp)
-{
-    // These parameters are not supported.
-    if (strcasestr(fmtp, "crc=1") || strcasestr(fmtp, "robust-sorting=1") ||
-        strcasestr(fmtp, "interleaving=")) {
-        return -1;
-    }
-
-    // Handle mode-set and octet-align.
-    const char *modes = strcasestr(fmtp, "mode-set=");
-    if (modes) {
-        mMode = 0;
-        mModeSet = 0;
-        for (char c = *modes; c && c != ' '; c = *++modes) {
-            if (c >= '0' && c <= '7') {
-                int mode = c - '0';
-                if (mode > mMode) {
-                    mMode = mode;
-                }
-                mModeSet |= 1 << mode;
-            }
-        }
-    } else {
-        mMode = 7;
-        mModeSet = 0xFF;
-    }
-    mOctetAligned = (strcasestr(fmtp, "octet-align=1") != NULL);
-
-    // TODO: handle mode-change-*.
-
-    return (sampleRate == 8000 && mEncoder && mDecoder) ? 160 : -1;
-}
-
-int AmrCodec::encode(void *payload, int16_t *samples)
-{
-    unsigned char *bytes = (unsigned char *)payload;
-    Frame_Type_3GPP type;
-
-    int length = AMREncode(mEncoder, mSidSync, (Mode)mMode,
-        samples, bytes + 1, &type, AMR_TX_WMF);
-
-    if (type != mMode || length != (8 + gFrameBits[mMode] + 7) >> 3) {
-        return -1;
-    }
-
-    if (mOctetAligned) {
-        bytes[0] = 0xF0;
-        bytes[1] = (mMode << 3) | 0x04;
-        ++length;
-    } else {
-        // CMR = 15 (4-bit), F = 0 (1-bit), FT = mMode (4-bit), Q = 1 (1-bit).
-        bytes[0] = 0xFF;
-        bytes[1] = 0xC0 | (mMode << 1) | 1;
-
-        // Shift left 6 bits and update the length.
-        bytes[length + 1] = 0;
-        for (int i = 0; i <= length; ++i) {
-            bytes[i] = (bytes[i] << 6) | (bytes[i + 1] >> 2);
-        }
-        length = (10 + gFrameBits[mMode] + 7) >> 3;
-    }
-    return length;
-}
-
-int AmrCodec::decode(int16_t *samples, int count, void *payload, int length)
-{
-    unsigned char *bytes = (unsigned char *)payload;
-    Frame_Type_3GPP type;
-    if (length < 2) {
-        return -1;
-    }
-    int request = bytes[0] >> 4;
-
-    if (mOctetAligned) {
-        if ((bytes[1] & 0xC4) != 0x04) {
-            return -1;
-        }
-        type = (Frame_Type_3GPP)(bytes[1] >> 3);
-        if (length != (16 + gFrameBits[type] + 7) >> 3) {
-            return -1;
-        }
-        length -= 2;
-        bytes += 2;
-    } else {
-        if ((bytes[0] & 0x0C) || !(bytes[1] & 0x40)) {
-            return -1;
-        }
-        type = (Frame_Type_3GPP)((bytes[0] << 1 | bytes[1] >> 7) & 0x07);
-        if (length != (10 + gFrameBits[type] + 7) >> 3) {
-            return -1;
-        }
-
-        // Shift left 2 bits and update the length.
-        --length;
-        for (int i = 1; i < length; ++i) {
-            bytes[i] = (bytes[i] << 2) | (bytes[i + 1] >> 6);
-        }
-        bytes[length] <<= 2;
-        length = (gFrameBits[type] + 7) >> 3;
-        ++bytes;
-    }
-
-    if (AMRDecode(mDecoder, type, bytes, samples, MIME_IETF) != length) {
-        return -1;
-    }
-
-    // Handle CMR
-    if (request < 8 && request != mMode) {
-        for (int i = request; i >= 0; --i) {
-            if (mModeSet & (1 << i)) {
-                mMode = request;
-                break;
-            }
-        }
-    }
-
-    return 160;
-}
-
-//------------------------------------------------------------------------------
-
-// See RFC 3551 for the encoding details.
-
-class GsmEfrCodec : public AudioCodec
-{
-public:
-    GsmEfrCodec() {
-        if (AMREncodeInit(&mEncoder, &mSidSync, false)) {
-            mEncoder = NULL;
-        }
-        if (GSMInitDecode(&mDecoder, (Word8 *)"RTP")) {
-            mDecoder = NULL;
-        }
-    }
-
-    ~GsmEfrCodec() {
-        if (mEncoder) {
-            AMREncodeExit(&mEncoder, &mSidSync);
-        }
-        if (mDecoder) {
-            GSMDecodeFrameExit(&mDecoder);
-        }
-    }
-
-    int set(int sampleRate, const char *fmtp) {
-        return (sampleRate == 8000 && mEncoder && mDecoder) ? 160 : -1;
-    }
-
-    int encode(void *payload, int16_t *samples);
-    int decode(int16_t *samples, int count, void *payload, int length);
-
-private:
-    void *mEncoder;
-    void *mSidSync;
-    void *mDecoder;
-};
-
-int GsmEfrCodec::encode(void *payload, int16_t *samples)
-{
-    unsigned char *bytes = (unsigned char *)payload;
-    Frame_Type_3GPP type;
-
-    int length = AMREncode(mEncoder, mSidSync, MR122,
-        samples, bytes, &type, AMR_TX_WMF);
-
-    if (type == AMR_122 && length == 32) {
-        bytes[0] = 0xC0 | (bytes[1] >> 4);
-        for (int i = 1; i < 31; ++i) {
-            bytes[i] = (bytes[i] << 4) | (bytes[i + 1] >> 4);
-        }
-        return 31;
-    }
-    return -1;
-}
-
-int GsmEfrCodec::decode(int16_t *samples, int count, void *payload, int length)
-{
-    unsigned char *bytes = (unsigned char *)payload;
-    int n = 0;
-    while (n + 160 <= count && length >= 31 && (bytes[0] >> 4) == 0x0C) {
-        for (int i = 0; i < 30; ++i) {
-            bytes[i] = (bytes[i] << 4) | (bytes[i + 1] >> 4);
-        }
-        bytes[30] <<= 4;
-
-        if (AMRDecode(mDecoder, AMR_122, bytes, &samples[n], MIME_IETF) != 31) {
-            break;
-        }
-        n += 160;
-        length -= 31;
-        bytes += 31;
-    }
-    return n;
-}
-
-} // namespace
-
-AudioCodec *newAmrCodec()
-{
-    return new AmrCodec;
-}
-
-AudioCodec *newGsmEfrCodec()
-{
-    return new GsmEfrCodec;
-}
diff --git a/voip/jni/rtp/Android.mk b/voip/jni/rtp/Android.mk
deleted file mode 100644
index b265cdd..0000000
--- a/voip/jni/rtp/Android.mk
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright (C) 2010 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := librtp_jni
-
-LOCAL_SRC_FILES := \
-	AudioCodec.cpp \
-	AudioGroup.cpp \
-	EchoSuppressor.cpp \
-	RtpStream.cpp \
-	util.cpp \
-	rtp_jni.cpp
-
-LOCAL_SRC_FILES += \
-	AmrCodec.cpp \
-	G711Codec.cpp \
-	GsmCodec.cpp
-
-LOCAL_SHARED_LIBRARIES := \
-	libnativehelper \
-	libcutils \
-	libutils \
-	libmedia \
-	libstagefright_amrnb_common
-
-LOCAL_STATIC_LIBRARIES := libgsm libstagefright_amrnbdec libstagefright_amrnbenc
-
-LOCAL_C_INCLUDES += \
-	$(JNI_H_INCLUDE) \
-	external/libgsm/inc \
-	frameworks/av/media/libstagefright/codecs/amrnb/common/include \
-	frameworks/av/media/libstagefright/codecs/amrnb/common/ \
-	frameworks/av/media/libstagefright/codecs/amrnb/enc/include \
-	frameworks/av/media/libstagefright/codecs/amrnb/enc/src \
-	frameworks/av/media/libstagefright/codecs/amrnb/dec/include \
-	frameworks/av/media/libstagefright/codecs/amrnb/dec/src \
-	$(call include-path-for, audio-effects)
-
-LOCAL_CFLAGS += -fvisibility=hidden
-
-
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/voip/jni/rtp/AudioCodec.cpp b/voip/jni/rtp/AudioCodec.cpp
deleted file mode 100644
index c75fbc9..0000000
--- a/voip/jni/rtp/AudioCodec.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyrightm (C) 2010 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.
- */
-
-#include <strings.h>
-
-#include "AudioCodec.h"
-
-extern AudioCodec *newAlawCodec();
-extern AudioCodec *newUlawCodec();
-extern AudioCodec *newGsmCodec();
-extern AudioCodec *newAmrCodec();
-extern AudioCodec *newGsmEfrCodec();
-
-struct AudioCodecType {
-    const char *name;
-    AudioCodec *(*create)();
-} gAudioCodecTypes[] = {
-    {"PCMA", newAlawCodec},
-    {"PCMU", newUlawCodec},
-    {"GSM", newGsmCodec},
-    {"AMR", newAmrCodec},
-    {"GSM-EFR", newGsmEfrCodec},
-    {NULL, NULL},
-};
-
-AudioCodec *newAudioCodec(const char *codecName)
-{
-    AudioCodecType *type = gAudioCodecTypes;
-    while (type->name != NULL) {
-        if (strcasecmp(codecName, type->name) == 0) {
-            AudioCodec *codec = type->create();
-            codec->name = type->name;
-            return codec;
-        }
-        ++type;
-    }
-    return NULL;
-}
diff --git a/voip/jni/rtp/AudioCodec.h b/voip/jni/rtp/AudioCodec.h
deleted file mode 100644
index 741730b..0000000
--- a/voip/jni/rtp/AudioCodec.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyrightm (C) 2010 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.
- */
-
-#include <stdint.h>
-
-#ifndef __AUDIO_CODEC_H__
-#define __AUDIO_CODEC_H__
-
-class AudioCodec
-{
-public:
-    const char *name;
-    // Needed by destruction through base class pointers.
-    virtual ~AudioCodec() {}
-    // Returns sampleCount or non-positive value if unsupported.
-    virtual int set(int sampleRate, const char *fmtp) = 0;
-    // Returns the length of payload in bytes.
-    virtual int encode(void *payload, int16_t *samples) = 0;
-    // Returns the number of decoded samples.
-    virtual int decode(int16_t *samples, int count, void *payload, int length) = 0;
-};
-
-AudioCodec *newAudioCodec(const char *codecName);
-
-#endif
diff --git a/voip/jni/rtp/AudioGroup.cpp b/voip/jni/rtp/AudioGroup.cpp
deleted file mode 100644
index 2f0829e..0000000
--- a/voip/jni/rtp/AudioGroup.cpp
+++ /dev/null
@@ -1,1073 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/epoll.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <time.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-
-// #define LOG_NDEBUG 0
-#define LOG_TAG "AudioGroup"
-#include <cutils/atomic.h>
-#include <cutils/properties.h>
-#include <utils/Log.h>
-#include <utils/Errors.h>
-#include <utils/RefBase.h>
-#include <utils/threads.h>
-#include <utils/SystemClock.h>
-#include <media/AudioSystem.h>
-#include <media/AudioRecord.h>
-#include <media/AudioTrack.h>
-#include <media/mediarecorder.h>
-#include <media/AudioEffect.h>
-#include <audio_effects/effect_aec.h>
-#include <system/audio.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-
-#include "AudioCodec.h"
-#include "EchoSuppressor.h"
-
-extern int parse(JNIEnv *env, jstring jAddress, int port, sockaddr_storage *ss);
-
-namespace {
-
-using namespace android;
-
-int gRandom = -1;
-
-// We use a circular array to implement jitter buffer. The simplest way is doing
-// a modulo operation on the index while accessing the array. However modulo can
-// be expensive on some platforms, such as ARM. Thus we round up the size of the
-// array to the nearest power of 2 and then use bitwise-and instead of modulo.
-// Currently we make it 2048ms long and assume packet interval is 50ms or less.
-// The first 100ms is the place where samples get mixed. The rest is the real
-// jitter buffer. For a stream at 8000Hz it takes 32 kilobytes. These numbers
-// are chosen by experiments and each of them can be adjusted as needed.
-
-// Originally a stream does not send packets when it is receive-only or there is
-// nothing to mix. However, this causes some problems with certain firewalls and
-// proxies. A firewall might remove a port mapping when there is no outgoing
-// packet for a preiod of time, and a proxy might wait for incoming packets from
-// both sides before start forwarding. To solve these problems, we send out a
-// silence packet on the stream for every second. It should be good enough to
-// keep the stream alive with relatively low resources.
-
-// Other notes:
-// + We use elapsedRealtime() to get the time. Since we use 32bit variables
-//   instead of 64bit ones, comparison must be done by subtraction.
-// + Sampling rate must be multiple of 1000Hz, and packet length must be in
-//   milliseconds. No floating points.
-// + If we cannot get enough CPU, we drop samples and simulate packet loss.
-// + Resampling is not done yet, so streams in one group must use the same rate.
-//   For the first release only 8000Hz is supported.
-
-#define BUFFER_SIZE     2048
-#define HISTORY_SIZE    100
-#define MEASURE_BASE    100
-#define MEASURE_PERIOD  5000
-#define DTMF_PERIOD     200
-
-class AudioStream
-{
-public:
-    AudioStream();
-    ~AudioStream();
-    bool set(int mode, int socket, sockaddr_storage *remote,
-        AudioCodec *codec, int sampleRate, int sampleCount,
-        int codecType, int dtmfType);
-
-    void sendDtmf(int event);
-    bool mix(int32_t *output, int head, int tail, int sampleRate);
-    void encode(int tick, AudioStream *chain);
-    void decode(int tick);
-
-private:
-    enum {
-        NORMAL = 0,
-        SEND_ONLY = 1,
-        RECEIVE_ONLY = 2,
-        LAST_MODE = 2,
-    };
-
-    int mMode;
-    int mSocket;
-    sockaddr_storage mRemote;
-    AudioCodec *mCodec;
-    uint32_t mCodecMagic;
-    uint32_t mDtmfMagic;
-    bool mFixRemote;
-
-    int mTick;
-    int mSampleRate;
-    int mSampleCount;
-    int mInterval;
-    int mKeepAlive;
-
-    int16_t *mBuffer;
-    int mBufferMask;
-    int mBufferHead;
-    int mBufferTail;
-    int mLatencyTimer;
-    int mLatencyScore;
-
-    uint16_t mSequence;
-    uint32_t mTimestamp;
-    uint32_t mSsrc;
-
-    int mDtmfEvent;
-    int mDtmfStart;
-
-    AudioStream *mNext;
-
-    friend class AudioGroup;
-};
-
-AudioStream::AudioStream()
-{
-    mSocket = -1;
-    mCodec = NULL;
-    mBuffer = NULL;
-    mNext = NULL;
-}
-
-AudioStream::~AudioStream()
-{
-    close(mSocket);
-    delete mCodec;
-    delete [] mBuffer;
-    ALOGD("stream[%d] is dead", mSocket);
-}
-
-bool AudioStream::set(int mode, int socket, sockaddr_storage *remote,
-    AudioCodec *codec, int sampleRate, int sampleCount,
-    int codecType, int dtmfType)
-{
-    if (mode < 0 || mode > LAST_MODE) {
-        return false;
-    }
-    mMode = mode;
-
-    mCodecMagic = (0x8000 | codecType) << 16;
-    mDtmfMagic = (dtmfType == -1) ? 0 : (0x8000 | dtmfType) << 16;
-
-    mTick = elapsedRealtime();
-    mSampleRate = sampleRate / 1000;
-    mSampleCount = sampleCount;
-    mInterval = mSampleCount / mSampleRate;
-
-    // Allocate jitter buffer.
-    for (mBufferMask = 8; mBufferMask < mSampleRate; mBufferMask <<= 1);
-    mBufferMask *= BUFFER_SIZE;
-    mBuffer = new int16_t[mBufferMask];
-    --mBufferMask;
-    mBufferHead = 0;
-    mBufferTail = 0;
-    mLatencyTimer = 0;
-    mLatencyScore = 0;
-
-    // Initialize random bits.
-    read(gRandom, &mSequence, sizeof(mSequence));
-    read(gRandom, &mTimestamp, sizeof(mTimestamp));
-    read(gRandom, &mSsrc, sizeof(mSsrc));
-
-    mDtmfEvent = -1;
-    mDtmfStart = 0;
-
-    // Only take over these things when succeeded.
-    mSocket = socket;
-    if (codec) {
-        mRemote = *remote;
-        mCodec = codec;
-
-        // Here we should never get an private address, but some buggy proxy
-        // servers do give us one. To solve this, we replace the address when
-        // the first time we successfully decode an incoming packet.
-        mFixRemote = false;
-        if (remote->ss_family == AF_INET) {
-            unsigned char *address =
-                (unsigned char *)&((sockaddr_in *)remote)->sin_addr;
-            if (address[0] == 10 ||
-                (address[0] == 172 && (address[1] >> 4) == 1) ||
-                (address[0] == 192 && address[1] == 168)) {
-                mFixRemote = true;
-            }
-        }
-    }
-
-    ALOGD("stream[%d] is configured as %s %dkHz %dms mode %d", mSocket,
-        (codec ? codec->name : "RAW"), mSampleRate, mInterval, mMode);
-    return true;
-}
-
-void AudioStream::sendDtmf(int event)
-{
-    if (mDtmfMagic != 0) {
-        mDtmfEvent = event << 24;
-        mDtmfStart = mTimestamp + mSampleCount;
-    }
-}
-
-bool AudioStream::mix(int32_t *output, int head, int tail, int sampleRate)
-{
-    if (mMode == SEND_ONLY) {
-        return false;
-    }
-
-    if (head - mBufferHead < 0) {
-        head = mBufferHead;
-    }
-    if (tail - mBufferTail > 0) {
-        tail = mBufferTail;
-    }
-    if (tail - head <= 0) {
-        return false;
-    }
-
-    head *= mSampleRate;
-    tail *= mSampleRate;
-
-    if (sampleRate == mSampleRate) {
-        for (int i = head; i - tail < 0; ++i) {
-            output[i - head] += mBuffer[i & mBufferMask];
-        }
-    } else {
-        // TODO: implement resampling.
-        return false;
-    }
-    return true;
-}
-
-void AudioStream::encode(int tick, AudioStream *chain)
-{
-    if (tick - mTick >= mInterval) {
-        // We just missed the train. Pretend that packets in between are lost.
-        int skipped = (tick - mTick) / mInterval;
-        mTick += skipped * mInterval;
-        mSequence += skipped;
-        mTimestamp += skipped * mSampleCount;
-        ALOGV("stream[%d] skips %d packets", mSocket, skipped);
-    }
-
-    tick = mTick;
-    mTick += mInterval;
-    ++mSequence;
-    mTimestamp += mSampleCount;
-
-    // If there is an ongoing DTMF event, send it now.
-    if (mMode != RECEIVE_ONLY && mDtmfEvent != -1) {
-        int duration = mTimestamp - mDtmfStart;
-        // Make sure duration is reasonable.
-        if (duration >= 0 && duration < mSampleRate * DTMF_PERIOD) {
-            duration += mSampleCount;
-            int32_t buffer[4] = {
-                htonl(mDtmfMagic | mSequence),
-                htonl(mDtmfStart),
-                mSsrc,
-                htonl(mDtmfEvent | duration),
-            };
-            if (duration >= mSampleRate * DTMF_PERIOD) {
-                buffer[3] |= htonl(1 << 23);
-                mDtmfEvent = -1;
-            }
-            sendto(mSocket, buffer, sizeof(buffer), MSG_DONTWAIT,
-                (sockaddr *)&mRemote, sizeof(mRemote));
-            return;
-        }
-        mDtmfEvent = -1;
-    }
-
-    int32_t buffer[mSampleCount + 3];
-    bool data = false;
-    if (mMode != RECEIVE_ONLY) {
-        // Mix all other streams.
-        memset(buffer, 0, sizeof(buffer));
-        while (chain) {
-            if (chain != this) {
-                data |= chain->mix(buffer, tick - mInterval, tick, mSampleRate);
-            }
-            chain = chain->mNext;
-        }
-    }
-
-    int16_t samples[mSampleCount];
-    if (data) {
-        // Saturate into 16 bits.
-        for (int i = 0; i < mSampleCount; ++i) {
-            int32_t sample = buffer[i];
-            if (sample < -32768) {
-                sample = -32768;
-            }
-            if (sample > 32767) {
-                sample = 32767;
-            }
-            samples[i] = sample;
-        }
-    } else {
-        if ((mTick ^ mKeepAlive) >> 10 == 0) {
-            return;
-        }
-        mKeepAlive = mTick;
-        memset(samples, 0, sizeof(samples));
-
-        if (mMode != RECEIVE_ONLY) {
-            ALOGV("stream[%d] no data", mSocket);
-        }
-    }
-
-    if (!mCodec) {
-        // Special case for device stream.
-        send(mSocket, samples, sizeof(samples), MSG_DONTWAIT);
-        return;
-    }
-
-    // Cook the packet and send it out.
-    buffer[0] = htonl(mCodecMagic | mSequence);
-    buffer[1] = htonl(mTimestamp);
-    buffer[2] = mSsrc;
-    int length = mCodec->encode(&buffer[3], samples);
-    if (length <= 0) {
-        ALOGV("stream[%d] encoder error", mSocket);
-        return;
-    }
-    sendto(mSocket, buffer, length + 12, MSG_DONTWAIT, (sockaddr *)&mRemote,
-        sizeof(mRemote));
-}
-
-void AudioStream::decode(int tick)
-{
-    char c;
-    if (mMode == SEND_ONLY) {
-        recv(mSocket, &c, 1, MSG_DONTWAIT);
-        return;
-    }
-
-    // Make sure mBufferHead and mBufferTail are reasonable.
-    if ((unsigned int)(tick + BUFFER_SIZE - mBufferHead) > BUFFER_SIZE * 2) {
-        mBufferHead = tick - HISTORY_SIZE;
-        mBufferTail = mBufferHead;
-    }
-
-    if (tick - mBufferHead > HISTORY_SIZE) {
-        // Throw away outdated samples.
-        mBufferHead = tick - HISTORY_SIZE;
-        if (mBufferTail - mBufferHead < 0) {
-            mBufferTail = mBufferHead;
-        }
-    }
-
-    // Adjust the jitter buffer if the latency keeps larger than the threshold
-    // in the measurement period.
-    int score = mBufferTail - tick - MEASURE_BASE;
-    if (mLatencyScore > score || mLatencyScore <= 0) {
-        mLatencyScore = score;
-        mLatencyTimer = tick;
-    } else if (tick - mLatencyTimer >= MEASURE_PERIOD) {
-        ALOGV("stream[%d] reduces latency of %dms", mSocket, mLatencyScore);
-        mBufferTail -= mLatencyScore;
-        mLatencyScore = -1;
-    }
-
-    int count = (BUFFER_SIZE - (mBufferTail - mBufferHead)) * mSampleRate;
-    if (count < mSampleCount) {
-        // Buffer overflow. Drop the packet.
-        ALOGV("stream[%d] buffer overflow", mSocket);
-        recv(mSocket, &c, 1, MSG_DONTWAIT);
-        return;
-    }
-
-    // Receive the packet and decode it.
-    int16_t samples[count];
-    if (!mCodec) {
-        // Special case for device stream.
-        count = recv(mSocket, samples, sizeof(samples),
-            MSG_TRUNC | MSG_DONTWAIT) >> 1;
-    } else {
-        __attribute__((aligned(4))) uint8_t buffer[2048];
-        sockaddr_storage remote;
-        socklen_t addrlen = sizeof(remote);
-
-        int length = recvfrom(mSocket, buffer, sizeof(buffer),
-            MSG_TRUNC | MSG_DONTWAIT, (sockaddr *)&remote, &addrlen);
-
-        // Do we need to check SSRC, sequence, and timestamp? They are not
-        // reliable but at least they can be used to identify duplicates?
-        if (length < 12 || length > (int)sizeof(buffer) ||
-            (ntohl(*(uint32_t *)buffer) & 0xC07F0000) != mCodecMagic) {
-            ALOGV("stream[%d] malformed packet", mSocket);
-            return;
-        }
-        int offset = 12 + ((buffer[0] & 0x0F) << 2);
-        if ((buffer[0] & 0x10) != 0) {
-            offset += 4 + (ntohs(*(uint16_t *)&buffer[offset + 2]) << 2);
-        }
-        if ((buffer[0] & 0x20) != 0) {
-            length -= buffer[length - 1];
-        }
-        length -= offset;
-        if (length >= 0) {
-            length = mCodec->decode(samples, count, &buffer[offset], length);
-        }
-        if (length > 0 && mFixRemote) {
-            mRemote = remote;
-            mFixRemote = false;
-        }
-        count = length;
-    }
-    if (count <= 0) {
-        ALOGV("stream[%d] decoder error", mSocket);
-        return;
-    }
-
-    if (tick - mBufferTail > 0) {
-        // Buffer underrun. Reset the jitter buffer.
-        ALOGV("stream[%d] buffer underrun", mSocket);
-        if (mBufferTail - mBufferHead <= 0) {
-            mBufferHead = tick + mInterval;
-            mBufferTail = mBufferHead;
-        } else {
-            int tail = (tick + mInterval) * mSampleRate;
-            for (int i = mBufferTail * mSampleRate; i - tail < 0; ++i) {
-                mBuffer[i & mBufferMask] = 0;
-            }
-            mBufferTail = tick + mInterval;
-        }
-    }
-
-    // Append to the jitter buffer.
-    int tail = mBufferTail * mSampleRate;
-    for (int i = 0; i < count; ++i) {
-        mBuffer[tail & mBufferMask] = samples[i];
-        ++tail;
-    }
-    mBufferTail += mInterval;
-}
-
-//------------------------------------------------------------------------------
-
-class AudioGroup
-{
-public:
-    AudioGroup();
-    ~AudioGroup();
-    bool set(int sampleRate, int sampleCount);
-
-    bool setMode(int mode);
-    bool sendDtmf(int event);
-    bool add(AudioStream *stream);
-    bool remove(AudioStream *stream);
-    bool platformHasAec() { return mPlatformHasAec; }
-
-private:
-    enum {
-        ON_HOLD = 0,
-        MUTED = 1,
-        NORMAL = 2,
-        ECHO_SUPPRESSION = 3,
-        LAST_MODE = 3,
-    };
-
-    bool checkPlatformAec();
-
-    AudioStream *mChain;
-    int mEventQueue;
-    volatile int mDtmfEvent;
-
-    int mMode;
-    int mSampleRate;
-    int mSampleCount;
-    int mDeviceSocket;
-    bool mPlatformHasAec;
-
-    class NetworkThread : public Thread
-    {
-    public:
-        NetworkThread(AudioGroup *group) : Thread(false), mGroup(group) {}
-
-        bool start()
-        {
-            if (run("Network", ANDROID_PRIORITY_AUDIO) != NO_ERROR) {
-                ALOGE("cannot start network thread");
-                return false;
-            }
-            return true;
-        }
-
-    private:
-        AudioGroup *mGroup;
-        bool threadLoop();
-    };
-    sp<NetworkThread> mNetworkThread;
-
-    class DeviceThread : public Thread
-    {
-    public:
-        DeviceThread(AudioGroup *group) : Thread(false), mGroup(group) {}
-
-        bool start()
-        {
-            if (run("Device", ANDROID_PRIORITY_AUDIO) != NO_ERROR) {
-                ALOGE("cannot start device thread");
-                return false;
-            }
-            return true;
-        }
-
-    private:
-        AudioGroup *mGroup;
-        bool threadLoop();
-    };
-    sp<DeviceThread> mDeviceThread;
-};
-
-AudioGroup::AudioGroup()
-{
-    mMode = ON_HOLD;
-    mChain = NULL;
-    mEventQueue = -1;
-    mDtmfEvent = -1;
-    mDeviceSocket = -1;
-    mNetworkThread = new NetworkThread(this);
-    mDeviceThread = new DeviceThread(this);
-    mPlatformHasAec = checkPlatformAec();
-}
-
-AudioGroup::~AudioGroup()
-{
-    mNetworkThread->requestExitAndWait();
-    mDeviceThread->requestExitAndWait();
-    close(mEventQueue);
-    close(mDeviceSocket);
-    while (mChain) {
-        AudioStream *next = mChain->mNext;
-        delete mChain;
-        mChain = next;
-    }
-    ALOGD("group[%d] is dead", mDeviceSocket);
-}
-
-bool AudioGroup::set(int sampleRate, int sampleCount)
-{
-    mEventQueue = epoll_create(2);
-    if (mEventQueue == -1) {
-        ALOGE("epoll_create: %s", strerror(errno));
-        return false;
-    }
-
-    mSampleRate = sampleRate;
-    mSampleCount = sampleCount;
-
-    // Create device socket.
-    int pair[2];
-    if (socketpair(AF_UNIX, SOCK_DGRAM, 0, pair)) {
-        ALOGE("socketpair: %s", strerror(errno));
-        return false;
-    }
-    mDeviceSocket = pair[0];
-
-    // Create device stream.
-    mChain = new AudioStream;
-    if (!mChain->set(AudioStream::NORMAL, pair[1], NULL, NULL,
-        sampleRate, sampleCount, -1, -1)) {
-        close(pair[1]);
-        ALOGE("cannot initialize device stream");
-        return false;
-    }
-
-    // Give device socket a reasonable timeout.
-    timeval tv;
-    tv.tv_sec = 0;
-    tv.tv_usec = 1000 * sampleCount / sampleRate * 500;
-    if (setsockopt(pair[0], SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))) {
-        ALOGE("setsockopt: %s", strerror(errno));
-        return false;
-    }
-
-    // Add device stream into event queue.
-    epoll_event event;
-    event.events = EPOLLIN;
-    event.data.ptr = mChain;
-    if (epoll_ctl(mEventQueue, EPOLL_CTL_ADD, pair[1], &event)) {
-        ALOGE("epoll_ctl: %s", strerror(errno));
-        return false;
-    }
-
-    // Anything else?
-    ALOGD("stream[%d] joins group[%d]", pair[1], pair[0]);
-    return true;
-}
-
-bool AudioGroup::setMode(int mode)
-{
-    if (mode < 0 || mode > LAST_MODE) {
-        return false;
-    }
-    // FIXME: temporary code to overcome echo and mic gain issues on herring and tuna boards.
-    // Must be modified/removed when the root cause of the issue is fixed in the hardware or
-    // driver
-    char value[PROPERTY_VALUE_MAX];
-    property_get("ro.product.board", value, "");
-    if (mode == NORMAL &&
-            (!strcmp(value, "herring") || !strcmp(value, "tuna"))) {
-        mode = ECHO_SUPPRESSION;
-    }
-    if (mMode == mode) {
-        return true;
-    }
-
-    mDeviceThread->requestExitAndWait();
-    ALOGD("group[%d] switches from mode %d to %d", mDeviceSocket, mMode, mode);
-    mMode = mode;
-    return (mode == ON_HOLD) || mDeviceThread->start();
-}
-
-bool AudioGroup::sendDtmf(int event)
-{
-    if (event < 0 || event > 15) {
-        return false;
-    }
-
-    // DTMF is rarely used, so we try to make it as lightweight as possible.
-    // Using volatile might be dodgy, but using a pipe or pthread primitives
-    // or stop-set-restart threads seems too heavy. Will investigate later.
-    timespec ts;
-    ts.tv_sec = 0;
-    ts.tv_nsec = 100000000;
-    for (int i = 0; mDtmfEvent != -1 && i < 20; ++i) {
-        nanosleep(&ts, NULL);
-    }
-    if (mDtmfEvent != -1) {
-        return false;
-    }
-    mDtmfEvent = event;
-    nanosleep(&ts, NULL);
-    return true;
-}
-
-bool AudioGroup::add(AudioStream *stream)
-{
-    mNetworkThread->requestExitAndWait();
-
-    epoll_event event;
-    event.events = EPOLLIN;
-    event.data.ptr = stream;
-    if (epoll_ctl(mEventQueue, EPOLL_CTL_ADD, stream->mSocket, &event)) {
-        ALOGE("epoll_ctl: %s", strerror(errno));
-        return false;
-    }
-
-    stream->mNext = mChain->mNext;
-    mChain->mNext = stream;
-    if (!mNetworkThread->start()) {
-        // Only take over the stream when succeeded.
-        mChain->mNext = stream->mNext;
-        return false;
-    }
-
-    ALOGD("stream[%d] joins group[%d]", stream->mSocket, mDeviceSocket);
-    return true;
-}
-
-bool AudioGroup::remove(AudioStream *stream)
-{
-    mNetworkThread->requestExitAndWait();
-
-    for (AudioStream *chain = mChain; chain->mNext; chain = chain->mNext) {
-        if (chain->mNext == stream) {
-            if (epoll_ctl(mEventQueue, EPOLL_CTL_DEL, stream->mSocket, NULL)) {
-                ALOGE("epoll_ctl: %s", strerror(errno));
-                return false;
-            }
-            chain->mNext = stream->mNext;
-            ALOGD("stream[%d] leaves group[%d]", stream->mSocket, mDeviceSocket);
-            delete stream;
-            break;
-        }
-    }
-
-    // Do not start network thread if there is only one stream.
-    if (!mChain->mNext || !mNetworkThread->start()) {
-        return false;
-    }
-    return true;
-}
-
-bool AudioGroup::NetworkThread::threadLoop()
-{
-    AudioStream *chain = mGroup->mChain;
-    int tick = elapsedRealtime();
-    int deadline = tick + 10;
-    int count = 0;
-
-    for (AudioStream *stream = chain; stream; stream = stream->mNext) {
-        if (tick - stream->mTick >= 0) {
-            stream->encode(tick, chain);
-        }
-        if (deadline - stream->mTick > 0) {
-            deadline = stream->mTick;
-        }
-        ++count;
-    }
-
-    int event = mGroup->mDtmfEvent;
-    if (event != -1) {
-        for (AudioStream *stream = chain; stream; stream = stream->mNext) {
-            stream->sendDtmf(event);
-        }
-        mGroup->mDtmfEvent = -1;
-    }
-
-    deadline -= tick;
-    if (deadline < 1) {
-        deadline = 1;
-    }
-
-    epoll_event events[count];
-    count = epoll_wait(mGroup->mEventQueue, events, count, deadline);
-    if (count == -1) {
-        ALOGE("epoll_wait: %s", strerror(errno));
-        return false;
-    }
-    for (int i = 0; i < count; ++i) {
-        ((AudioStream *)events[i].data.ptr)->decode(tick);
-    }
-
-    return true;
-}
-
-bool AudioGroup::checkPlatformAec()
-{
-    effect_descriptor_t fxDesc;
-    uint32_t numFx;
-
-    if (AudioEffect::queryNumberEffects(&numFx) != NO_ERROR) {
-        return false;
-    }
-    for (uint32_t i = 0; i < numFx; i++) {
-        if (AudioEffect::queryEffect(i, &fxDesc) != NO_ERROR) {
-            continue;
-        }
-        if (memcmp(&fxDesc.type, FX_IID_AEC, sizeof(effect_uuid_t)) == 0) {
-            return true;
-        }
-    }
-    return false;
-}
-
-bool AudioGroup::DeviceThread::threadLoop()
-{
-    int mode = mGroup->mMode;
-    int sampleRate = mGroup->mSampleRate;
-    int sampleCount = mGroup->mSampleCount;
-    int deviceSocket = mGroup->mDeviceSocket;
-
-    // Find out the frame count for AudioTrack and AudioRecord.
-    size_t output = 0;
-    size_t input = 0;
-    if (AudioTrack::getMinFrameCount(&output, AUDIO_STREAM_VOICE_CALL,
-        sampleRate) != NO_ERROR || output <= 0 ||
-        AudioRecord::getMinFrameCount(&input, sampleRate,
-        AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_IN_MONO) != NO_ERROR || input <= 0) {
-        ALOGE("cannot compute frame count");
-        return false;
-    }
-    ALOGD("reported frame count: output %d, input %d", output, input);
-
-    if (output < sampleCount * 2) {
-        output = sampleCount * 2;
-    }
-    if (input < sampleCount * 2) {
-        input = sampleCount * 2;
-    }
-    ALOGD("adjusted frame count: output %d, input %d", output, input);
-
-    // Initialize AudioTrack and AudioRecord.
-    AudioTrack track;
-    AudioRecord record;
-    if (track.set(AUDIO_STREAM_VOICE_CALL, sampleRate, AUDIO_FORMAT_PCM_16_BIT,
-                AUDIO_CHANNEL_OUT_MONO, output) != NO_ERROR ||
-            record.set(AUDIO_SOURCE_VOICE_COMMUNICATION, sampleRate, AUDIO_FORMAT_PCM_16_BIT,
-                AUDIO_CHANNEL_IN_MONO, input) != NO_ERROR) {
-        ALOGE("cannot initialize audio device");
-        return false;
-    }
-    ALOGD("latency: output %d, input %d", track.latency(), record.latency());
-
-    // Give device socket a reasonable buffer size.
-    setsockopt(deviceSocket, SOL_SOCKET, SO_RCVBUF, &output, sizeof(output));
-    setsockopt(deviceSocket, SOL_SOCKET, SO_SNDBUF, &output, sizeof(output));
-
-    // Drain device socket.
-    char c;
-    while (recv(deviceSocket, &c, 1, MSG_DONTWAIT) == 1);
-
-    // check if platform supports echo cancellation and do not active local echo suppression in
-    // this case
-    EchoSuppressor *echo = NULL;
-    AudioEffect *aec = NULL;
-    if (mode == ECHO_SUPPRESSION) {
-        if (mGroup->platformHasAec()) {
-            aec = new AudioEffect(FX_IID_AEC,
-                                    NULL,
-                                    0,
-                                    0,
-                                    0,
-                                    record.getSessionId(),
-                                    record.getInput());
-            status_t status = aec->initCheck();
-            if (status == NO_ERROR || status == ALREADY_EXISTS) {
-                aec->setEnabled(true);
-            } else {
-                delete aec;
-                aec = NULL;
-            }
-        }
-        // Create local echo suppressor if platform AEC cannot be used.
-        if (aec == NULL) {
-             echo = new EchoSuppressor(sampleCount,
-                                       (track.latency() + record.latency()) * sampleRate / 1000);
-        }
-    }
-    // Start AudioRecord before AudioTrack. This prevents AudioTrack from being
-    // disabled due to buffer underrun while waiting for AudioRecord.
-    if (mode != MUTED) {
-        record.start();
-        int16_t one;
-        record.read(&one, sizeof(one));
-    }
-    track.start();
-
-    while (!exitPending()) {
-        int16_t output[sampleCount];
-        if (recv(deviceSocket, output, sizeof(output), 0) <= 0) {
-            memset(output, 0, sizeof(output));
-        }
-
-        int16_t input[sampleCount];
-        int toWrite = sampleCount;
-        int toRead = (mode == MUTED) ? 0 : sampleCount;
-        int chances = 100;
-
-        while (--chances > 0 && (toWrite > 0 || toRead > 0)) {
-            if (toWrite > 0) {
-                AudioTrack::Buffer buffer;
-                buffer.frameCount = toWrite;
-
-                status_t status = track.obtainBuffer(&buffer, 1);
-                if (status == NO_ERROR) {
-                    int offset = sampleCount - toWrite;
-                    memcpy(buffer.i8, &output[offset], buffer.size);
-                    toWrite -= buffer.frameCount;
-                    track.releaseBuffer(&buffer);
-                } else if (status != TIMED_OUT && status != WOULD_BLOCK) {
-                    ALOGE("cannot write to AudioTrack");
-                    goto exit;
-                }
-            }
-
-            if (toRead > 0) {
-                AudioRecord::Buffer buffer;
-                buffer.frameCount = toRead;
-
-                status_t status = record.obtainBuffer(&buffer, 1);
-                if (status == NO_ERROR) {
-                    int offset = sampleCount - toRead;
-                    memcpy(&input[offset], buffer.i8, buffer.size);
-                    toRead -= buffer.frameCount;
-                    record.releaseBuffer(&buffer);
-                } else if (status != TIMED_OUT && status != WOULD_BLOCK) {
-                    ALOGE("cannot read from AudioRecord");
-                    goto exit;
-                }
-            }
-        }
-
-        if (chances <= 0) {
-            ALOGW("device loop timeout");
-            while (recv(deviceSocket, &c, 1, MSG_DONTWAIT) == 1);
-        }
-
-        if (mode != MUTED) {
-            if (echo != NULL) {
-                ALOGV("echo->run()");
-                echo->run(output, input);
-            }
-            send(deviceSocket, input, sizeof(input), MSG_DONTWAIT);
-        }
-    }
-
-exit:
-    delete echo;
-    delete aec;
-    return true;
-}
-
-//------------------------------------------------------------------------------
-
-static jfieldID gNative;
-static jfieldID gMode;
-
-int add(JNIEnv *env, jobject thiz, jint mode,
-    jint socket, jstring jRemoteAddress, jint remotePort,
-    jstring jCodecSpec, jint dtmfType)
-{
-    AudioCodec *codec = NULL;
-    AudioStream *stream = NULL;
-    AudioGroup *group = NULL;
-
-    // Sanity check.
-    sockaddr_storage remote;
-    if (parse(env, jRemoteAddress, remotePort, &remote) < 0) {
-        // Exception already thrown.
-        return 0;
-    }
-    if (!jCodecSpec) {
-        jniThrowNullPointerException(env, "codecSpec");
-        return 0;
-    }
-    const char *codecSpec = env->GetStringUTFChars(jCodecSpec, NULL);
-    if (!codecSpec) {
-        // Exception already thrown.
-        return 0;
-    }
-    socket = dup(socket);
-    if (socket == -1) {
-        jniThrowException(env, "java/lang/IllegalStateException",
-            "cannot get stream socket");
-        return 0;
-    }
-
-    // Create audio codec.
-    int codecType = -1;
-    char codecName[16];
-    int sampleRate = -1;
-    sscanf(codecSpec, "%d %15[^/]%*c%d", &codecType, codecName, &sampleRate);
-    codec = newAudioCodec(codecName);
-    int sampleCount = (codec ? codec->set(sampleRate, codecSpec) : -1);
-    env->ReleaseStringUTFChars(jCodecSpec, codecSpec);
-    if (sampleCount <= 0) {
-        jniThrowException(env, "java/lang/IllegalStateException",
-            "cannot initialize audio codec");
-        goto error;
-    }
-
-    // Create audio stream.
-    stream = new AudioStream;
-    if (!stream->set(mode, socket, &remote, codec, sampleRate, sampleCount,
-        codecType, dtmfType)) {
-        jniThrowException(env, "java/lang/IllegalStateException",
-            "cannot initialize audio stream");
-        goto error;
-    }
-    socket = -1;
-    codec = NULL;
-
-    // Create audio group.
-    group = (AudioGroup *)env->GetIntField(thiz, gNative);
-    if (!group) {
-        int mode = env->GetIntField(thiz, gMode);
-        group = new AudioGroup;
-        if (!group->set(8000, 256) || !group->setMode(mode)) {
-            jniThrowException(env, "java/lang/IllegalStateException",
-                "cannot initialize audio group");
-            goto error;
-        }
-    }
-
-    // Add audio stream into audio group.
-    if (!group->add(stream)) {
-        jniThrowException(env, "java/lang/IllegalStateException",
-            "cannot add audio stream");
-        goto error;
-    }
-
-    // Succeed.
-    env->SetIntField(thiz, gNative, (int)group);
-    return (int)stream;
-
-error:
-    delete group;
-    delete stream;
-    delete codec;
-    close(socket);
-    env->SetIntField(thiz, gNative, 0);
-    return 0;
-}
-
-void remove(JNIEnv *env, jobject thiz, jint stream)
-{
-    AudioGroup *group = (AudioGroup *)env->GetIntField(thiz, gNative);
-    if (group) {
-        if (!stream || !group->remove((AudioStream *)stream)) {
-            delete group;
-            env->SetIntField(thiz, gNative, 0);
-        }
-    }
-}
-
-void setMode(JNIEnv *env, jobject thiz, jint mode)
-{
-    AudioGroup *group = (AudioGroup *)env->GetIntField(thiz, gNative);
-    if (group && !group->setMode(mode)) {
-        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
-    }
-}
-
-void sendDtmf(JNIEnv *env, jobject thiz, jint event)
-{
-    AudioGroup *group = (AudioGroup *)env->GetIntField(thiz, gNative);
-    if (group && !group->sendDtmf(event)) {
-        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
-    }
-}
-
-JNINativeMethod gMethods[] = {
-    {"nativeAdd", "(IILjava/lang/String;ILjava/lang/String;I)I", (void *)add},
-    {"nativeRemove", "(I)V", (void *)remove},
-    {"nativeSetMode", "(I)V", (void *)setMode},
-    {"nativeSendDtmf", "(I)V", (void *)sendDtmf},
-};
-
-} // namespace
-
-int registerAudioGroup(JNIEnv *env)
-{
-    gRandom = open("/dev/urandom", O_RDONLY);
-    if (gRandom == -1) {
-        ALOGE("urandom: %s", strerror(errno));
-        return -1;
-    }
-
-    jclass clazz;
-    if ((clazz = env->FindClass("android/net/rtp/AudioGroup")) == NULL ||
-        (gNative = env->GetFieldID(clazz, "mNative", "I")) == NULL ||
-        (gMode = env->GetFieldID(clazz, "mMode", "I")) == NULL ||
-        env->RegisterNatives(clazz, gMethods, NELEM(gMethods)) < 0) {
-        ALOGE("JNI registration failed");
-        return -1;
-    }
-    return 0;
-}
diff --git a/voip/jni/rtp/EchoSuppressor.cpp b/voip/jni/rtp/EchoSuppressor.cpp
deleted file mode 100644
index e223136..0000000
--- a/voip/jni/rtp/EchoSuppressor.cpp
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyrightm (C) 2010 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.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <string.h>
-#include <math.h>
-
-#define LOG_TAG "Echo"
-#include <utils/Log.h>
-
-#include "EchoSuppressor.h"
-
-// It is very difficult to do echo cancellation at this level due to the lack of
-// the timing information of the samples being played and recorded. Therefore,
-// for the first release only echo suppression is implemented.
-
-// The algorithm is derived from the "previous works" summarized in
-//   A new class of doubletalk detectors based on cross-correlation,
-//   J Benesty, DR Morgan, JH Cho, IEEE Trans. on Speech and Audio Processing.
-// The method proposed in that paper is not used because of its high complexity.
-
-// It is well known that cross-correlation can be computed using convolution,
-// but unfortunately not every mobile processor has a (fast enough) FPU. Thus
-// we use integer arithmetic as much as possible and do lots of bookkeeping.
-// Again, parameters and thresholds are chosen by experiments.
-
-EchoSuppressor::EchoSuppressor(int sampleCount, int tailLength)
-{
-    tailLength += sampleCount * 4;
-
-    int shift = 0;
-    while ((sampleCount >> shift) > 1 && (tailLength >> shift) > 256) {
-        ++shift;
-    }
-
-    mShift = shift + 4;
-    mScale = 1 << shift;
-    mSampleCount = sampleCount;
-    mWindowSize = sampleCount >> shift;
-    mTailLength = tailLength >> shift;
-    mRecordLength = tailLength * 2 / sampleCount;
-    mRecordOffset = 0;
-
-    mXs = new uint16_t[mTailLength + mWindowSize];
-    memset(mXs, 0, sizeof(*mXs) * (mTailLength + mWindowSize));
-    mXSums = new uint32_t[mTailLength];
-    memset(mXSums, 0, sizeof(*mXSums) * mTailLength);
-    mX2Sums = new uint32_t[mTailLength];
-    memset(mX2Sums, 0, sizeof(*mX2Sums) * mTailLength);
-    mXRecords = new uint16_t[mRecordLength * mWindowSize];
-    memset(mXRecords, 0, sizeof(*mXRecords) * mRecordLength * mWindowSize);
-
-    mYSum = 0;
-    mY2Sum = 0;
-    mYRecords = new uint32_t[mRecordLength];
-    memset(mYRecords, 0, sizeof(*mYRecords) * mRecordLength);
-    mY2Records = new uint32_t[mRecordLength];
-    memset(mY2Records, 0, sizeof(*mY2Records) * mRecordLength);
-
-    mXYSums = new uint32_t[mTailLength];
-    memset(mXYSums, 0, sizeof(*mXYSums) * mTailLength);
-    mXYRecords = new uint32_t[mRecordLength * mTailLength];
-    memset(mXYRecords, 0, sizeof(*mXYRecords) * mRecordLength * mTailLength);
-
-    mLastX = 0;
-    mLastY = 0;
-    mWeight = 1.0f / (mRecordLength * mWindowSize);
-}
-
-EchoSuppressor::~EchoSuppressor()
-{
-    delete [] mXs;
-    delete [] mXSums;
-    delete [] mX2Sums;
-    delete [] mXRecords;
-    delete [] mYRecords;
-    delete [] mY2Records;
-    delete [] mXYSums;
-    delete [] mXYRecords;
-}
-
-void EchoSuppressor::run(int16_t *playbacked, int16_t *recorded)
-{
-    // Update Xs.
-    for (int i = mTailLength - 1; i >= 0; --i) {
-        mXs[i + mWindowSize] = mXs[i];
-    }
-    for (int i = mWindowSize - 1, j = 0; i >= 0; --i, j += mScale) {
-        uint32_t sum = 0;
-        for (int k = 0; k < mScale; ++k) {
-            int32_t x = playbacked[j + k] << 15;
-            mLastX += x;
-            sum += ((mLastX >= 0) ? mLastX : -mLastX) >> 15;
-            mLastX -= (mLastX >> 10) + x;
-        }
-        mXs[i] = sum >> mShift;
-    }
-
-    // Update XSums, X2Sums, and XRecords.
-    for (int i = mTailLength - mWindowSize - 1; i >= 0; --i) {
-        mXSums[i + mWindowSize] = mXSums[i];
-        mX2Sums[i + mWindowSize] = mX2Sums[i];
-    }
-    uint16_t *xRecords = &mXRecords[mRecordOffset * mWindowSize];
-    for (int i = mWindowSize - 1; i >= 0; --i) {
-        uint16_t x = mXs[i];
-        mXSums[i] = mXSums[i + 1] + x - xRecords[i];
-        mX2Sums[i] = mX2Sums[i + 1] + x * x - xRecords[i] * xRecords[i];
-        xRecords[i] = x;
-    }
-
-    // Compute Ys.
-    uint16_t ys[mWindowSize];
-    for (int i = mWindowSize - 1, j = 0; i >= 0; --i, j += mScale) {
-        uint32_t sum = 0;
-        for (int k = 0; k < mScale; ++k) {
-            int32_t y = recorded[j + k] << 15;
-            mLastY += y;
-            sum += ((mLastY >= 0) ? mLastY : -mLastY) >> 15;
-            mLastY -= (mLastY >> 10) + y;
-        }
-        ys[i] = sum >> mShift;
-    }
-
-    // Update YSum, Y2Sum, YRecords, and Y2Records.
-    uint32_t ySum = 0;
-    uint32_t y2Sum = 0;
-    for (int i = mWindowSize - 1; i >= 0; --i) {
-        ySum += ys[i];
-        y2Sum += ys[i] * ys[i];
-    }
-    mYSum += ySum - mYRecords[mRecordOffset];
-    mY2Sum += y2Sum - mY2Records[mRecordOffset];
-    mYRecords[mRecordOffset] = ySum;
-    mY2Records[mRecordOffset] = y2Sum;
-
-    // Update XYSums and XYRecords.
-    uint32_t *xyRecords = &mXYRecords[mRecordOffset * mTailLength];
-    for (int i = mTailLength - 1; i >= 0; --i) {
-        uint32_t xySum = 0;
-        for (int j = mWindowSize - 1; j >= 0; --j) {
-            xySum += mXs[i + j] * ys[j];
-        }
-        mXYSums[i] += xySum - xyRecords[i];
-        xyRecords[i] = xySum;
-    }
-
-    // Compute correlations.
-    int latency = 0;
-    float corr2 = 0.0f;
-    float varX = 0.0f;
-    float varY = mY2Sum - mWeight * mYSum * mYSum;
-    for (int i = mTailLength - 1; i >= 0; --i) {
-        float cov = mXYSums[i] - mWeight * mXSums[i] * mYSum;
-        if (cov > 0.0f) {
-            float varXi = mX2Sums[i] - mWeight * mXSums[i] * mXSums[i];
-            float corr2i = cov * cov / (varXi * varY + 1);
-            if (corr2i > corr2) {
-                varX = varXi;
-                corr2 = corr2i;
-                latency = i;
-            }
-        }
-    }
-    //ALOGI("corr^2 %.5f, var %8.0f %8.0f, latency %d", corr2, varX, varY,
-    //        latency * mScale);
-
-    // Do echo suppression.
-    if (corr2 > 0.1f && varX > 10000.0f) {
-        int factor = (corr2 > 1.0f) ? 0 : (1.0f - sqrtf(corr2)) * 4096;
-        for (int i = 0; i < mSampleCount; ++i) {
-            recorded[i] = recorded[i] * factor >> 16;
-        }
-    }
-
-    // Increase RecordOffset.
-    ++mRecordOffset;
-    if (mRecordOffset == mRecordLength) {
-        mRecordOffset = 0;
-    }
-}
diff --git a/voip/jni/rtp/EchoSuppressor.h b/voip/jni/rtp/EchoSuppressor.h
deleted file mode 100644
index 2f3b593..0000000
--- a/voip/jni/rtp/EchoSuppressor.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyrightm (C) 2010 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.
- */
-
-#ifndef __ECHO_SUPPRESSOR_H__
-#define __ECHO_SUPPRESSOR_H__
-
-#include <stdint.h>
-
-class EchoSuppressor
-{
-public:
-    // The sampleCount must be power of 2.
-    EchoSuppressor(int sampleCount, int tailLength);
-    ~EchoSuppressor();
-    void run(int16_t *playbacked, int16_t *recorded);
-
-private:
-    int mShift;
-    int mScale;
-    int mSampleCount;
-    int mWindowSize;
-    int mTailLength;
-    int mRecordLength;
-    int mRecordOffset;
-
-    uint16_t *mXs;
-    uint32_t *mXSums;
-    uint32_t *mX2Sums;
-    uint16_t *mXRecords;
-
-    uint32_t mYSum;
-    uint32_t mY2Sum;
-    uint32_t *mYRecords;
-    uint32_t *mY2Records;
-
-    uint32_t *mXYSums;
-    uint32_t *mXYRecords;
-
-    int32_t mLastX;
-    int32_t mLastY;
-
-    float mWeight;
-};
-
-#endif
diff --git a/voip/jni/rtp/G711Codec.cpp b/voip/jni/rtp/G711Codec.cpp
deleted file mode 100644
index ef54863..0000000
--- a/voip/jni/rtp/G711Codec.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyrightm (C) 2010 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.
- */
-
-#include "AudioCodec.h"
-
-namespace {
-
-const int8_t gExponents[128] = {
-    0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
-
-//------------------------------------------------------------------------------
-
-class UlawCodec : public AudioCodec
-{
-public:
-    int set(int sampleRate, const char *fmtp) {
-        mSampleCount = sampleRate / 50;
-        return mSampleCount;
-    }
-    int encode(void *payload, int16_t *samples);
-    int decode(int16_t *samples, int count, void *payload, int length);
-private:
-    int mSampleCount;
-};
-
-int UlawCodec::encode(void *payload, int16_t *samples)
-{
-    int8_t *ulaws = (int8_t *)payload;
-    for (int i = 0; i < mSampleCount; ++i) {
-        int sample = samples[i];
-        int sign = (sample >> 8) & 0x80;
-        if (sample < 0) {
-            sample = -sample;
-        }
-        sample += 132;
-        if (sample > 32767) {
-            sample = 32767;
-        }
-        int exponent = gExponents[sample >> 8];
-        int mantissa = (sample >> (exponent + 3)) & 0x0F;
-        ulaws[i] = ~(sign | (exponent << 4) | mantissa);
-    }
-    return mSampleCount;
-}
-
-int UlawCodec::decode(int16_t *samples, int count, void *payload, int length)
-{
-    int8_t *ulaws = (int8_t *)payload;
-    if (length > count) {
-        length = count;
-    }
-    for (int i = 0; i < length; ++i) {
-        int ulaw = ~ulaws[i];
-        int exponent = (ulaw >> 4) & 0x07;
-        int mantissa = ulaw & 0x0F;
-        int sample = (((mantissa << 3) + 132) << exponent) - 132;
-        samples[i] = (ulaw < 0 ? -sample : sample);
-    }
-    return length;
-}
-
-//------------------------------------------------------------------------------
-
-class AlawCodec : public AudioCodec
-{
-public:
-    int set(int sampleRate, const char *fmtp) {
-        mSampleCount = sampleRate / 50;
-        return mSampleCount;
-    }
-    int encode(void *payload, int16_t *samples);
-    int decode(int16_t *samples, int count, void *payload, int length);
-private:
-    int mSampleCount;
-};
-
-int AlawCodec::encode(void *payload, int16_t *samples)
-{
-    int8_t *alaws = (int8_t *)payload;
-    for (int i = 0; i < mSampleCount; ++i) {
-        int sample = samples[i];
-        int sign = (sample >> 8) & 0x80;
-        if (sample < 0) {
-            sample = -sample;
-        }
-        if (sample > 32767) {
-            sample = 32767;
-        }
-        int exponent = gExponents[sample >> 8];
-        int mantissa = (sample >> (exponent == 0 ? 4 : exponent + 3)) & 0x0F;
-        alaws[i] = (sign | (exponent << 4) | mantissa) ^ 0xD5;
-    }
-    return mSampleCount;
-}
-
-int AlawCodec::decode(int16_t *samples, int count, void *payload, int length)
-{
-    int8_t *alaws = (int8_t *)payload;
-    if (length > count) {
-        length = count;
-    }
-    for (int i = 0; i < length; ++i) {
-        int alaw = alaws[i] ^ 0x55;
-        int exponent = (alaw >> 4) & 0x07;
-        int mantissa = alaw & 0x0F;
-        int sample = (exponent == 0 ? (mantissa << 4) + 8 :
-            ((mantissa << 3) + 132) << exponent);
-        samples[i] = (alaw < 0 ? sample : -sample);
-    }
-    return length;
-}
-
-} // namespace
-
-AudioCodec *newUlawCodec()
-{
-    return new UlawCodec;
-}
-
-AudioCodec *newAlawCodec()
-{
-    return new AlawCodec;
-}
diff --git a/voip/jni/rtp/GsmCodec.cpp b/voip/jni/rtp/GsmCodec.cpp
deleted file mode 100644
index 61dfdc9..0000000
--- a/voip/jni/rtp/GsmCodec.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyrightm (C) 2010 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.
- */
-
-#include "AudioCodec.h"
-
-extern "C" {
-#include "gsm.h"
-}
-
-namespace {
-
-class GsmCodec : public AudioCodec
-{
-public:
-    GsmCodec() {
-        mEncode = gsm_create();
-        mDecode = gsm_create();
-    }
-
-    ~GsmCodec() {
-        if (mEncode) {
-            gsm_destroy(mEncode);
-        }
-        if (mDecode) {
-            gsm_destroy(mDecode);
-        }
-    }
-
-    int set(int sampleRate, const char *fmtp) {
-        return (sampleRate == 8000 && mEncode && mDecode) ? 160 : -1;
-    }
-
-    int encode(void *payload, int16_t *samples);
-    int decode(int16_t *samples, int count, void *payload, int length);
-
-private:
-    gsm mEncode;
-    gsm mDecode;
-};
-
-int GsmCodec::encode(void *payload, int16_t *samples)
-{
-    gsm_encode(mEncode, samples, (unsigned char *)payload);
-    return 33;
-}
-
-int GsmCodec::decode(int16_t *samples, int count, void *payload, int length)
-{
-    unsigned char *bytes = (unsigned char *)payload;
-    int n = 0;
-    while (n + 160 <= count && length >= 33 &&
-        gsm_decode(mDecode, bytes, &samples[n]) == 0) {
-        n += 160;
-        length -= 33;
-        bytes += 33;
-    }
-    return n;
-}
-
-} // namespace
-
-AudioCodec *newGsmCodec()
-{
-    return new GsmCodec;
-}
diff --git a/voip/jni/rtp/RtpStream.cpp b/voip/jni/rtp/RtpStream.cpp
deleted file mode 100644
index bfe8e24..0000000
--- a/voip/jni/rtp/RtpStream.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-
-#define LOG_TAG "RtpStream"
-#include <utils/Log.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-
-extern int parse(JNIEnv *env, jstring jAddress, int port, sockaddr_storage *ss);
-
-namespace {
-
-jfieldID gSocket;
-
-jint create(JNIEnv *env, jobject thiz, jstring jAddress)
-{
-    env->SetIntField(thiz, gSocket, -1);
-
-    sockaddr_storage ss;
-    if (parse(env, jAddress, 0, &ss) < 0) {
-        // Exception already thrown.
-        return -1;
-    }
-
-    int socket = ::socket(ss.ss_family, SOCK_DGRAM, 0);
-    socklen_t len = sizeof(ss);
-    if (socket == -1 || bind(socket, (sockaddr *)&ss, sizeof(ss)) != 0 ||
-        getsockname(socket, (sockaddr *)&ss, &len) != 0) {
-        jniThrowException(env, "java/net/SocketException", strerror(errno));
-        ::close(socket);
-        return -1;
-    }
-
-    uint16_t *p = (ss.ss_family == AF_INET) ?
-        &((sockaddr_in *)&ss)->sin_port : &((sockaddr_in6 *)&ss)->sin6_port;
-    uint16_t port = ntohs(*p);
-    if ((port & 1) == 0) {
-        env->SetIntField(thiz, gSocket, socket);
-        return port;
-    }
-    ::close(socket);
-
-    socket = ::socket(ss.ss_family, SOCK_DGRAM, 0);
-    if (socket != -1) {
-        uint16_t delta = port << 1;
-        ++port;
-
-        for (int i = 0; i < 1000; ++i) {
-            do {
-                port += delta;
-            } while (port < 1024);
-            *p = htons(port);
-
-            if (bind(socket, (sockaddr *)&ss, sizeof(ss)) == 0) {
-                env->SetIntField(thiz, gSocket, socket);
-                return port;
-            }
-        }
-    }
-
-    jniThrowException(env, "java/net/SocketException", strerror(errno));
-    ::close(socket);
-    return -1;
-}
-
-void close(JNIEnv *env, jobject thiz)
-{
-    int socket = env->GetIntField(thiz, gSocket);
-    ::close(socket);
-    env->SetIntField(thiz, gSocket, -1);
-}
-
-JNINativeMethod gMethods[] = {
-    {"create", "(Ljava/lang/String;)I", (void *)create},
-    {"close", "()V", (void *)close},
-};
-
-} // namespace
-
-int registerRtpStream(JNIEnv *env)
-{
-    jclass clazz;
-    if ((clazz = env->FindClass("android/net/rtp/RtpStream")) == NULL ||
-        (gSocket = env->GetFieldID(clazz, "mSocket", "I")) == NULL ||
-        env->RegisterNatives(clazz, gMethods, NELEM(gMethods)) < 0) {
-        ALOGE("JNI registration failed");
-        return -1;
-    }
-    return 0;
-}
diff --git a/voip/jni/rtp/rtp_jni.cpp b/voip/jni/rtp/rtp_jni.cpp
deleted file mode 100644
index 9f4bff9..0000000
--- a/voip/jni/rtp/rtp_jni.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#include <stdio.h>
-
-#include "jni.h"
-
-extern int registerRtpStream(JNIEnv *env);
-extern int registerAudioGroup(JNIEnv *env);
-
-__attribute__((visibility("default"))) jint JNI_OnLoad(JavaVM *vm, void *unused)
-{
-    JNIEnv *env = NULL;
-    if (vm->GetEnv((void **)&env, JNI_VERSION_1_4) != JNI_OK ||
-        registerRtpStream(env) < 0 || registerAudioGroup(env) < 0) {
-        return -1;
-    }
-    return JNI_VERSION_1_4;
-}
diff --git a/voip/jni/rtp/util.cpp b/voip/jni/rtp/util.cpp
deleted file mode 100644
index 1d702fc..0000000
--- a/voip/jni/rtp/util.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-
-int parse(JNIEnv *env, jstring jAddress, int port, sockaddr_storage *ss)
-{
-    if (!jAddress) {
-        jniThrowNullPointerException(env, "address");
-        return -1;
-    }
-    if (port < 0 || port > 65535) {
-        jniThrowException(env, "java/lang/IllegalArgumentException", "port");
-        return -1;
-    }
-    const char *address = env->GetStringUTFChars(jAddress, NULL);
-    if (!address) {
-        // Exception already thrown.
-        return -1;
-    }
-    memset(ss, 0, sizeof(*ss));
-
-    sockaddr_in *sin = (sockaddr_in *)ss;
-    if (inet_pton(AF_INET, address, &(sin->sin_addr)) > 0) {
-        sin->sin_family = AF_INET;
-        sin->sin_port = htons(port);
-        env->ReleaseStringUTFChars(jAddress, address);
-        return 0;
-    }
-
-    sockaddr_in6 *sin6 = (sockaddr_in6 *)ss;
-    if (inet_pton(AF_INET6, address, &(sin6->sin6_addr)) > 0) {
-        sin6->sin6_family = AF_INET6;
-        sin6->sin6_port = htons(port);
-        env->ReleaseStringUTFChars(jAddress, address);
-        return 0;
-    }
-
-    env->ReleaseStringUTFChars(jAddress, address);
-    jniThrowException(env, "java/lang/IllegalArgumentException", "address");
-    return -1;
-}
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 55de065..0be453c 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -45,7 +45,7 @@
 
     void startScan(boolean forceActive);
 
-    List<ScanResult> getScanResults();
+    List<ScanResult> getScanResults(String callingPackage);
 
     void disconnect();
 
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 4861759..c08db07 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -777,7 +777,7 @@
      */
     public List<ScanResult> getScanResults() {
         try {
-            return mService.getScanResults();
+            return mService.getScanResults(mContext.getBasePackageName());
         } catch (RemoteException e) {
             return null;
         }
diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java
index 5e25623..7a9f106 100644
--- a/wifi/java/android/net/wifi/WifiNative.java
+++ b/wifi/java/android/net/wifi/WifiNative.java
@@ -42,7 +42,7 @@
 
     private static final boolean DBG = false;
     private final String mTAG;
-    private static final int DEFAULT_GROUP_OWNER_INTENT = 7;
+    private static final int DEFAULT_GROUP_OWNER_INTENT = 6;
 
     static final int BLUETOOTH_COEXISTENCE_MODE_ENABLED = 0;
     static final int BLUETOOTH_COEXISTENCE_MODE_DISABLED = 1;
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 0a61972..ed8b99b 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -103,7 +103,6 @@
  */
 public class WifiStateMachine extends StateMachine {
 
-    private static final String TAG = "WifiStateMachine";
     private static final String NETWORKTYPE = "WIFI";
     private static final boolean DBG = false;
 
@@ -565,7 +564,7 @@
     private final IBatteryStats mBatteryStats;
 
     public WifiStateMachine(Context context, String wlanInterface) {
-        super(TAG);
+        super("WifiStateMachine");
 
         mContext = context;
         mInterfaceName = wlanInterface;
@@ -678,7 +677,7 @@
         mScanResultCache = new LruCache<String, ScanResult>(SCAN_RESULT_CACHE_SIZE);
 
         PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
-        mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
+        mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getName());
 
         mSuspendWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WifiSuspend");
         mSuspendWakeLock.setReferenceCounted(false);
@@ -1768,9 +1767,6 @@
     private void handleSuccessfulIpConfiguration(DhcpResults dhcpResults) {
         mLastSignalLevel = -1; // force update of signal strength
         mReconnectCount = 0; //Reset IP failure tracking
-        if (dhcpResults.serverAddress == null) {
-            dhcpResults = null;
-        }
         synchronized (mDhcpResultsLock) {
             mDhcpResults = dhcpResults;
         }
@@ -2315,7 +2311,7 @@
             if (!mWifiNative.setSerialNumber(detail)) {
                 loge("Failed to set serial number " + detail);
             }
-            if (!mWifiNative.setConfigMethods("physical_display virtual_push_button keypad")) {
+            if (!mWifiNative.setConfigMethods("physical_display virtual_push_button")) {
                 loge("Failed to set WPS config methods");
             }
             if (!mWifiNative.setDeviceType(mPrimaryDeviceType)) {
@@ -3132,14 +3128,14 @@
                             break;
                         default:
                             result = new WpsResult(Status.FAILURE);
-                            Log.e(TAG, "Invalid setup for WPS");
+                            loge("Invalid setup for WPS");
                             break;
                     }
                     if (result.status == Status.SUCCESS) {
                         replyToMessage(message, WifiManager.START_WPS_SUCCEEDED, result);
                         transitionTo(mWpsRunningState);
                     } else {
-                        Log.e(TAG, "Failed to start WPS with config " + wpsInfo.toString());
+                        loge("Failed to start WPS with config " + wpsInfo.toString());
                         replyToMessage(message, WifiManager.WPS_FAILED, WifiManager.ERROR);
                     }
                     break;
@@ -3465,7 +3461,7 @@
         public void exit() {
             /* Request a CS wakelock during transition to mobile */
             checkAndSetConnectivityInstance();
-            mCm.requestNetworkTransitionWakelock(TAG);
+            mCm.requestNetworkTransitionWakelock(getName());
         }
     }
 
@@ -4040,12 +4036,4 @@
         msg.arg2 = srcMsg.arg2;
         return msg;
     }
-
-    private void log(String s) {
-        Log.d(TAG, s);
-    }
-
-    private void loge(String s) {
-        Log.e(TAG, s);
-    }
 }
diff --git a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
index 423558f..53e6b51 100644
--- a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
@@ -77,7 +77,6 @@
 
     /* STOPSHIP: Keep this configurable for debugging until ship */
     private static boolean DBG = false;
-    private static final String TAG = "WifiWatchdogStateMachine";
 
     private static final int BASE = Protocol.BASE_WIFI_WATCHDOG;
 
@@ -306,7 +305,7 @@
      *                       (all other states)
      */
     private WifiWatchdogStateMachine(Context context) {
-        super(TAG);
+        super("WifiWatchdogStateMachine");
         mContext = context;
         mContentResolver = context.getContentResolver();
         mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
@@ -968,14 +967,6 @@
         return Settings.Global.putInt(cr, name, value ? 1 : 0);
     }
 
-    private static void logd(String s) {
-        Log.d(TAG, s);
-    }
-
-    private static void loge(String s) {
-        Log.e(TAG, s);
-    }
-
     /**
      * Bundle of good link count parameters
      */
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
index debf988..77604a4 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
@@ -2460,11 +2460,13 @@
         return msg;
     }
 
-    private void logd(String s) {
+    @Override
+    protected void logd(String s) {
         Slog.d(TAG, s);
     }
 
-    private void loge(String s) {
+    @Override
+    protected void loge(String s) {
         Slog.e(TAG, s);
     }