Merge "Fix issue #28641630: Service client dumps are timing out for no reason" into nyc-dev
diff --git a/api/current.txt b/api/current.txt
index e1569f1..ff70a06 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3580,8 +3580,8 @@
     method public final deprecated void removeDialog(int);
     method public void reportFullyDrawn();
     method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
-    method public final void requestKeyboardShortcutsHelper();
     method public final void requestPermissions(java.lang.String[], int);
+    method public final void requestShowKeyboardShortcuts();
     method public boolean requestVisibleBehind(boolean);
     method public final boolean requestWindowFeature(int);
     method public final void runOnUiThread(java.lang.Runnable);
@@ -4430,6 +4430,7 @@
     method public void onActivityResult(int, int, android.content.Intent);
     method public void onAttach(android.content.Context);
     method public deprecated void onAttach(android.app.Activity);
+    method public void onAttachFragment(android.app.Fragment);
     method public void onConfigurationChanged(android.content.res.Configuration);
     method public boolean onContextItemSelected(android.view.MenuItem);
     method public void onCreate(android.os.Bundle);
@@ -5631,7 +5632,6 @@
   public final class UiAutomation {
     method public void clearWindowAnimationFrameStats();
     method public boolean clearWindowContentFrameStats(int);
-    method public void destroy();
     method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(java.lang.Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException;
     method public android.os.ParcelFileDescriptor executeShellCommand(java.lang.String);
     method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
@@ -6073,6 +6073,7 @@
     field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
     field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0
     field public static final int KEYGUARD_DISABLE_FINGERPRINT = 32; // 0x20
+    field public static final int KEYGUARD_DISABLE_REMOTE_INPUT = 64; // 0x40
     field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2
     field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4
     field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10
@@ -24995,14 +24996,14 @@
   }
 
   public final class NfcFCardEmulation {
-    method public boolean disableNfcFForegroundService(android.app.Activity);
-    method public boolean enableNfcFForegroundService(android.app.Activity, android.content.ComponentName);
+    method public boolean disableService(android.app.Activity) throws java.lang.RuntimeException;
+    method public boolean enableService(android.app.Activity, android.content.ComponentName) throws java.lang.RuntimeException;
     method public static synchronized android.nfc.cardemulation.NfcFCardEmulation getInstance(android.nfc.NfcAdapter);
-    method public java.lang.String getNfcid2ForService(android.content.ComponentName);
-    method public java.lang.String getSystemCodeForService(android.content.ComponentName);
-    method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String);
-    method public boolean removeSystemCodeForService(android.content.ComponentName);
-    method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String);
+    method public java.lang.String getNfcid2ForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public java.lang.String getSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String) throws java.lang.RuntimeException;
+    method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String) throws java.lang.RuntimeException;
+    method public boolean unregisterSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
   }
 
   public abstract class OffHostApduService extends android.app.Service {
@@ -45665,8 +45666,7 @@
     method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
     method public void onScaleChanged(android.webkit.WebView, float, float);
     method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
-    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
-    method public deprecated void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+    method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
     method public deprecated android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, java.lang.String);
     method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest);
     method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
diff --git a/api/removed.txt b/api/removed.txt
index 0db555f..a160218 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -466,6 +466,14 @@
 
 }
 
+package android.webkit {
+
+  public class WebViewClient {
+    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+  }
+
+}
+
 package android.widget {
 
   public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
diff --git a/api/system-current.txt b/api/system-current.txt
index 55f8b6f..911fc2b 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3708,8 +3708,8 @@
     method public final deprecated void removeDialog(int);
     method public void reportFullyDrawn();
     method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
-    method public final void requestKeyboardShortcutsHelper();
     method public final void requestPermissions(java.lang.String[], int);
+    method public final void requestShowKeyboardShortcuts();
     method public boolean requestVisibleBehind(boolean);
     method public final boolean requestWindowFeature(int);
     method public final void runOnUiThread(java.lang.Runnable);
@@ -4575,6 +4575,7 @@
     method public void onActivityResult(int, int, android.content.Intent);
     method public void onAttach(android.content.Context);
     method public deprecated void onAttach(android.app.Activity);
+    method public void onAttachFragment(android.app.Fragment);
     method public void onConfigurationChanged(android.content.res.Configuration);
     method public boolean onContextItemSelected(android.view.MenuItem);
     method public void onCreate(android.os.Bundle);
@@ -5778,7 +5779,6 @@
   public final class UiAutomation {
     method public void clearWindowAnimationFrameStats();
     method public boolean clearWindowContentFrameStats(int);
-    method public void destroy();
     method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(java.lang.Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException;
     method public android.os.ParcelFileDescriptor executeShellCommand(java.lang.String);
     method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
@@ -6240,6 +6240,7 @@
     field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
     field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0
     field public static final int KEYGUARD_DISABLE_FINGERPRINT = 32; // 0x20
+    field public static final int KEYGUARD_DISABLE_REMOTE_INPUT = 64; // 0x40
     field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2
     field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4
     field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10
@@ -27437,14 +27438,14 @@
   }
 
   public final class NfcFCardEmulation {
-    method public boolean disableNfcFForegroundService(android.app.Activity);
-    method public boolean enableNfcFForegroundService(android.app.Activity, android.content.ComponentName);
+    method public boolean disableService(android.app.Activity) throws java.lang.RuntimeException;
+    method public boolean enableService(android.app.Activity, android.content.ComponentName) throws java.lang.RuntimeException;
     method public static synchronized android.nfc.cardemulation.NfcFCardEmulation getInstance(android.nfc.NfcAdapter);
-    method public java.lang.String getNfcid2ForService(android.content.ComponentName);
-    method public java.lang.String getSystemCodeForService(android.content.ComponentName);
-    method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String);
-    method public boolean removeSystemCodeForService(android.content.ComponentName);
-    method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String);
+    method public java.lang.String getNfcid2ForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public java.lang.String getSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String) throws java.lang.RuntimeException;
+    method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String) throws java.lang.RuntimeException;
+    method public boolean unregisterSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
   }
 
   public abstract class OffHostApduService extends android.app.Service {
@@ -31778,6 +31779,7 @@
     method public deprecated void setUserRestrictions(android.os.Bundle);
     method public deprecated void setUserRestrictions(android.os.Bundle, android.os.UserHandle);
     method public static boolean supportsMultipleUsers();
+    method public int getUserRestrictionSource(java.lang.String, android.os.UserHandle);
     field public static final java.lang.String ALLOW_PARENT_PROFILE_APP_LINKING = "allow_parent_profile_app_linking";
     field public static final java.lang.String DISALLOW_ADD_USER = "no_add_user";
     field public static final java.lang.String DISALLOW_ADJUST_VOLUME = "no_adjust_volume";
@@ -31815,6 +31817,13 @@
     field public static final java.lang.String KEY_RESTRICTIONS_PENDING = "restrictions_pending";
     field public static final int USER_CREATION_FAILED_NOT_PERMITTED = 1; // 0x1
     field public static final int USER_CREATION_FAILED_NO_MORE_USERS = 2; // 0x2
+    field public static final int RESTRICTION_NOT_SET = 0; // 0x0
+    field public static final int RESTRICTION_SOURCE_SYSTEM = 1; // 0x1
+    field public static final int RESTRICTION_SOURCE_DEVICE_OWNER = 2; // 0x2
+    field public static final int RESTRICTION_SOURCE_PROFILE_OWNER = 4; // 0x4
+  }
+
+  public static abstract class UserManager.UserRestrictionSource implements java.lang.annotation.Annotation {
   }
 
   public abstract class Vibrator {
@@ -48787,8 +48796,7 @@
     method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
     method public void onScaleChanged(android.webkit.WebView, float, float);
     method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
-    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
-    method public deprecated void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+    method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
     method public deprecated android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, java.lang.String);
     method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest);
     method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
diff --git a/api/system-removed.txt b/api/system-removed.txt
index 5f9d350..3f2613e 100644
--- a/api/system-removed.txt
+++ b/api/system-removed.txt
@@ -464,6 +464,14 @@
 
 }
 
+package android.webkit {
+
+  public class WebViewClient {
+    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+  }
+
+}
+
 package android.widget {
 
   public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
diff --git a/api/test-current.txt b/api/test-current.txt
index 1376ef1..9165cb0 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -3580,8 +3580,8 @@
     method public final deprecated void removeDialog(int);
     method public void reportFullyDrawn();
     method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
-    method public final void requestKeyboardShortcutsHelper();
     method public final void requestPermissions(java.lang.String[], int);
+    method public final void requestShowKeyboardShortcuts();
     method public boolean requestVisibleBehind(boolean);
     method public final boolean requestWindowFeature(int);
     method public final void runOnUiThread(java.lang.Runnable);
@@ -4431,6 +4431,7 @@
     method public void onActivityResult(int, int, android.content.Intent);
     method public void onAttach(android.content.Context);
     method public deprecated void onAttach(android.app.Activity);
+    method public void onAttachFragment(android.app.Fragment);
     method public void onConfigurationChanged(android.content.res.Configuration);
     method public boolean onContextItemSelected(android.view.MenuItem);
     method public void onCreate(android.os.Bundle);
@@ -6078,6 +6079,7 @@
     field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
     field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0
     field public static final int KEYGUARD_DISABLE_FINGERPRINT = 32; // 0x20
+    field public static final int KEYGUARD_DISABLE_REMOTE_INPUT = 64; // 0x40
     field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2
     field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4
     field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10
@@ -25063,14 +25065,14 @@
   }
 
   public final class NfcFCardEmulation {
-    method public boolean disableNfcFForegroundService(android.app.Activity);
-    method public boolean enableNfcFForegroundService(android.app.Activity, android.content.ComponentName);
+    method public boolean disableService(android.app.Activity) throws java.lang.RuntimeException;
+    method public boolean enableService(android.app.Activity, android.content.ComponentName) throws java.lang.RuntimeException;
     method public static synchronized android.nfc.cardemulation.NfcFCardEmulation getInstance(android.nfc.NfcAdapter);
-    method public java.lang.String getNfcid2ForService(android.content.ComponentName);
-    method public java.lang.String getSystemCodeForService(android.content.ComponentName);
-    method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String);
-    method public boolean removeSystemCodeForService(android.content.ComponentName);
-    method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String);
+    method public java.lang.String getNfcid2ForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public java.lang.String getSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String) throws java.lang.RuntimeException;
+    method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String) throws java.lang.RuntimeException;
+    method public boolean unregisterSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
   }
 
   public abstract class OffHostApduService extends android.app.Service {
@@ -45743,8 +45745,7 @@
     method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
     method public void onScaleChanged(android.webkit.WebView, float, float);
     method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
-    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
-    method public deprecated void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+    method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
     method public deprecated android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, java.lang.String);
     method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest);
     method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
diff --git a/api/test-removed.txt b/api/test-removed.txt
index 0db555f..a160218 100644
--- a/api/test-removed.txt
+++ b/api/test-removed.txt
@@ -466,6 +466,14 @@
 
 }
 
+package android.webkit {
+
+  public class WebViewClient {
+    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+  }
+
+}
+
 package android.widget {
 
   public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index 19cb927..4470eda 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -301,14 +301,13 @@
 
         private IIntentSender.Stub mLocalSender = new IIntentSender.Stub() {
             @Override
-            public int send(int code, Intent intent, String resolvedType,
+            public void send(int code, Intent intent, String resolvedType,
                     IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
                 try {
                     mResult.offer(intent, 5, TimeUnit.SECONDS);
                 } catch (InterruptedException e) {
                     throw new RuntimeException(e);
                 }
-                return 0;
             }
         };
 
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 07d3b8a..59edc8c 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1688,10 +1688,10 @@
     }
 
     /**
-     * Request the Keyboard Shortcuts screen to show up. If it succeeds, this will trigger
+     * Request the Keyboard Shortcuts screen to show up. This will trigger
      * {@link #onProvideKeyboardShortcuts} to retrieve the shortcuts for the foreground activity.
      */
-    public final void requestKeyboardShortcutsHelper() {
+    public final void requestShowKeyboardShortcuts() {
         Intent intent = new Intent(Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS);
         intent.setComponent(new ComponentName(KEYBOARD_SHORTCUTS_RECEIVER_PKG_NAME,
                 KEYBOARD_SHORTCUTS_RECEIVER_CLASS_NAME));
@@ -1757,10 +1757,6 @@
      * receive either {@link #onRestart}, {@link #onDestroy}, or nothing,
      * depending on later user activity.
      *
-     * <p>Note that this method may never be called, in low memory situations
-     * where the system does not have enough memory to keep your activity's
-     * process running after its {@link #onPause} method is called.
-     *
      * <p><em>Derived classes must call through to the super class's
      * implementation of this method.  If they do not, an exception will be
      * thrown.</em></p>
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index a4f404f..6ba6b0f 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -2977,6 +2977,22 @@
             reply.writeNoException();
             return true;
         }
+        case SEND_INTENT_SENDER_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            IIntentSender sender = IIntentSender.Stub.asInterface(data.readStrongBinder());
+            int scode = data.readInt();
+            Intent intent = data.readInt() != 0 ? Intent.CREATOR.createFromParcel(data) : null;
+            String resolvedType = data.readString();
+            IIntentReceiver finishedReceiver = IIntentReceiver.Stub.asInterface(
+                    data.readStrongBinder());
+            String requiredPermission = data.readString();
+            Bundle options = data.readInt() != 0 ? Bundle.CREATOR.createFromParcel(data) : null;
+            int result = sendIntentSender(sender, scode, intent, resolvedType, finishedReceiver,
+                    requiredPermission, options);
+            reply.writeNoException();
+            reply.writeInt(result);
+            return true;
+        }
         }
 
         return super.onTransact(code, data, reply, flags);
@@ -6973,5 +6989,37 @@
         reply.recycle();
     }
 
+    public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
+            IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)
+            throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeStrongBinder(target.asBinder());
+        data.writeInt(code);
+        if ((intent!=null)) {
+            data.writeInt(1);
+            intent.writeToParcel(data, 0);
+        }
+        else {
+            data.writeInt(0);
+        }
+        data.writeString(resolvedType);
+        data.writeStrongBinder((((finishedReceiver!=null))?(finishedReceiver.asBinder()):(null)));
+        data.writeString(requiredPermission);
+        if ((options!=null)) {
+            data.writeInt(1);
+            options.writeToParcel(data, 0);
+        }
+        else {
+            data.writeInt(0);
+        }
+        mRemote.transact(SEND_INTENT_SENDER_TRANSACTION, data, reply, 0);
+        final int res = reply.readInt();
+        data.recycle();
+        reply.recycle();
+        return res;
+    }
+
     private IBinder mRemote;
 }
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index a30f629..4c8ddc7 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -161,10 +161,10 @@
     private static final String KEY_LAUNCH_TASK_ID = "android.activity.launchTaskId";
 
     /**
-     * See {@link #setAvoidMoveToFront}.
+     * See {@link #setTaskOverlay}.
      * @hide
      */
-    private static final String KEY_DONT_MOVE_TO_FRONT = "android.activity.dontMoveToFront";
+    private static final String KEY_TASK_OVERLAY = "android.activity.taskOverlay";
 
     /**
      * Where the docked stack should be positioned.
@@ -239,7 +239,7 @@
     private int mLaunchStackId = INVALID_STACK_ID;
     private int mLaunchTaskId = -1;
     private int mDockCreateMode = DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
-    private boolean mAvoidMoveToFront;
+    private boolean mTaskOverlay;
     private AppTransitionAnimationSpec mAnimSpecs[];
 
     /**
@@ -782,7 +782,7 @@
         }
         mLaunchStackId = opts.getInt(KEY_LAUNCH_STACK_ID, INVALID_STACK_ID);
         mLaunchTaskId = opts.getInt(KEY_LAUNCH_TASK_ID, -1);
-        mAvoidMoveToFront = opts.getBoolean(KEY_DONT_MOVE_TO_FRONT, false);
+        mTaskOverlay = opts.getBoolean(KEY_TASK_OVERLAY, false);
         mDockCreateMode = opts.getInt(KEY_DOCK_CREATE_MODE, DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT);
         if (opts.containsKey(KEY_ANIM_SPECS)) {
             Parcelable[] specs = opts.getParcelableArray(KEY_ANIM_SPECS);
@@ -961,20 +961,20 @@
     }
 
     /**
-     * Set's whether the task should be moved to the front. This is different from
-     * {@link #getLaunchTaskBehind()} as we don't want to have an animation at all when launching
-     * an activity that shouldn't be moved to the front.
+     * Set's whether the activity launched with this option should be a task overlay. That is the
+     * activity will always be the top activity of the task and doesn't cause the task to be moved
+     * to the front when it is added.
      * @hide
      */
-    public void setAvoidMoveToFront(boolean avoidMoveToFront) {
-        mAvoidMoveToFront = avoidMoveToFront;
+    public void setTaskOverlay(boolean taskOverlay) {
+        mTaskOverlay = taskOverlay;
     }
 
     /**
      * @hide
      */
-    public boolean getAvoidMoveToFront() {
-        return mAvoidMoveToFront;
+    public boolean getTaskOverlay() {
+        return mTaskOverlay;
     }
 
     /** @hide */
@@ -1130,7 +1130,7 @@
         }
         b.putInt(KEY_LAUNCH_STACK_ID, mLaunchStackId);
         b.putInt(KEY_LAUNCH_TASK_ID, mLaunchTaskId);
-        b.putBoolean(KEY_DONT_MOVE_TO_FRONT, mAvoidMoveToFront);
+        b.putBoolean(KEY_TASK_OVERLAY, mTaskOverlay);
         b.putInt(KEY_DOCK_CREATE_MODE, mDockCreateMode);
         if (mAnimSpecs != null) {
             b.putParcelableArray(KEY_ANIM_SPECS, mAnimSpecs);
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index e54edf2..cfffe34 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4183,12 +4183,10 @@
                         // window is being added.
                         r.mPendingRemoveWindow = r.window;
                         r.mPendingRemoveWindowManager = wm;
-                        if (r.mPreserveWindow) {
-                            // We can only keep the part of the view hierarchy that we control,
-                            // everything else must be removed, because it might not be able to
-                            // behave properly when activity is relaunching.
-                            r.window.clearContentView();
-                        }
+                        // We can only keep the part of the view hierarchy that we control,
+                        // everything else must be removed, because it might not be able to
+                        // behave properly when activity is relaunching.
+                        r.window.clearContentView();
                     } else {
                         wm.removeViewImmediate(v);
                     }
@@ -4196,6 +4194,13 @@
                 if (wtoken != null && r.mPendingRemoveWindow == null) {
                     WindowManagerGlobal.getInstance().closeAll(wtoken,
                             r.activity.getClass().getName(), "Activity");
+                } else if (r.mPendingRemoveWindow != null) {
+                    // We're preserving only one window, others should be closed so app views
+                    // will be detached before the final tear down. It should be done now because
+                    // some components (e.g. WebView) rely on detach callbacks to perform receiver
+                    // unregister and other cleanup.
+                    WindowManagerGlobal.getInstance().closeAllExceptView(token, v,
+                            r.activity.getClass().getName(), "Activity");
                 }
                 r.activity.mDecor = null;
             }
@@ -5205,10 +5210,6 @@
             } else {
                 Log.e(TAG, "Unable to setupGraphicsSupport due to missing code-cache directory");
             }
-
-            // Add the lib dir path to hardware renderer so that vulkan layers
-            // can be searched for within that directory.
-            ThreadedRenderer.setLibDir(data.info.getLibDir());
         }
 
         // Install the Network Security Config Provider. This must happen before the application
diff --git a/core/java/android/app/ApplicationLoaders.java b/core/java/android/app/ApplicationLoaders.java
index d89e186..c869944 100644
--- a/core/java/android/app/ApplicationLoaders.java
+++ b/core/java/android/app/ApplicationLoaders.java
@@ -65,6 +65,8 @@
 
                 Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
 
+                setupVulkanLayerPath(pathClassloader, librarySearchPath);
+
                 mLoaders.put(zip, pathClassloader);
                 return pathClassloader;
             }
@@ -76,6 +78,8 @@
         }
     }
 
+    private static native void setupVulkanLayerPath(ClassLoader classLoader, String librarySearchPath);
+
     /**
      * Adds a new path the classpath of the given loader.
      * @throws IllegalStateException if the provided class loader is not a {@link PathClassLoader}.
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 7ef6d41..a637ef4 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -1430,6 +1430,18 @@
     }
 
     /**
+     * Called when a fragment is attached as a child of this fragment.
+     *
+     * <p>This is called after the attached fragment's <code>onAttach</code> and before
+     * the attached fragment's <code>onCreate</code> if the fragment has not yet had a previous
+     * call to <code>onCreate</code>.</p>
+     *
+     * @param childFragment child fragment being attached
+     */
+    public void onAttachFragment(Fragment childFragment) {
+    }
+
+    /**
      * Called when a fragment is first attached to its context.
      * {@link #onCreate(Bundle)} will be called after this.
      */
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index 13b2716..cd7665c 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -941,6 +941,8 @@
                     }
                     if (f.mParentFragment == null) {
                         mHost.onAttachFragment(f);
+                    } else {
+                        f.mParentFragment.onAttachFragment(f);
                     }
 
                     if (!f.mRetaining) {
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 2fcad0d..81788da 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -653,6 +653,10 @@
 
     public void startConfirmDeviceCredentialIntent(Intent intent) throws RemoteException;
 
+    public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
+            IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)
+            throws RemoteException;
+
     /*
      * Private non-Binder interfaces
      */
@@ -1038,4 +1042,5 @@
     int NOTIFY_LOCKED_PROFILE = IBinder.FIRST_CALL_TRANSACTION + 373;
     int START_CONFIRM_DEVICE_CREDENTIAL_INTENT = IBinder.FIRST_CALL_TRANSACTION + 374;
     int SEND_IDLE_JOB_TRIGGER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 375;
+    int SEND_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 376;
 }
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 752dc1e..7d43a11 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -450,9 +450,6 @@
             }
         }
 
-        final List<String> zipPaths = new ArrayList<>();
-        final List<String> libPaths = new ArrayList<>();
-
         if (mRegisterPackage) {
             try {
                 ActivityManagerNative.getDefault().addPackageDependency(mPackageName);
@@ -461,8 +458,10 @@
             }
         }
 
+        final List<String> zipPaths = new ArrayList<>();
+        final List<String> libPaths = new ArrayList<>();
         makePaths(mActivityThread, mApplicationInfo, zipPaths, libPaths);
-        final String zip = mIncludeCode ? TextUtils.join(File.pathSeparator, zipPaths) : "";
+
         final boolean isBundledApp = mApplicationInfo.isSystemApp()
                 && !mApplicationInfo.isUpdatedSystemApp();
 
@@ -476,10 +475,28 @@
 
         final String librarySearchPath = TextUtils.join(File.pathSeparator, libPaths);
 
+        // If we're not asked to include code, we construct a classloader that has
+        // no code path included. We still need to set up the library search paths
+        // and permitted path because NativeActivity relies on it (it attempts to
+        // call System.loadLibrary() on a classloader from a LoadedApk with
+        // mIncludeCode == false).
+        if (!mIncludeCode) {
+            if (mClassLoader == null) {
+                StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
+                mClassLoader = ApplicationLoaders.getDefault().getClassLoader(
+                    "" /* codePath */, mApplicationInfo.targetSdkVersion, isBundledApp,
+                    librarySearchPath, libraryPermittedPath, mBaseClassLoader);
+                StrictMode.setThreadPolicy(oldPolicy);
+            }
+
+            return;
+        }
+
         /*
-         * With all the combination done (if necessary, actually
-         * create the class loader.
+         * With all the combination done (if necessary, actually create the java class
+         * loader and set up JIT profiling support if necessary.
          */
+        final String zip = TextUtils.join(File.pathSeparator, zipPaths);
 
         if (ActivityThread.localLOGV)
             Slog.v(ActivityThread.TAG, "Class path: " + zip +
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index 412b098..cb15392 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -803,7 +803,8 @@
             String resolvedType = intent != null ?
                     intent.resolveTypeIfNeeded(context.getContentResolver())
                     : null;
-            int res = mTarget.send(code, intent, resolvedType,
+            int res = ActivityManagerNative.getDefault().sendIntentSender(
+                    mTarget, code, intent, resolvedType,
                     onFinished != null
                             ? new FinishedDispatcher(this, onFinished, handler)
                             : null,
diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
index 5ec59b4..0d4d007 100644
--- a/core/java/android/app/UiAutomation.java
+++ b/core/java/android/app/UiAutomation.java
@@ -322,7 +322,10 @@
     /**
      * Destroy this UiAutomation. After calling this method, attempting to use the object will
      * result in errors.
+     *
+     * @hide
      */
+    @TestApi
     public void destroy() {
         disconnect();
         mIsDestroyed = true;
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 451acf3..f78ed1e 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -2571,6 +2571,11 @@
     public static final int KEYGUARD_DISABLE_FINGERPRINT = 1 << 5;
 
     /**
+     * Disable text entry into notifications on secure keyguard screens (e.g. PIN/Pattern/Password).
+     */
+    public static final int KEYGUARD_DISABLE_REMOTE_INPUT = 1 << 6;
+
+    /**
      * Disable all current and future keyguard customizations.
      */
     public static final int KEYGUARD_DISABLE_FEATURES_ALL = 0x7fffffff;
diff --git a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
index eaf20d8..d468bd4 100644
--- a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
+++ b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
@@ -237,8 +237,8 @@
         private final IBluetoothGatt mBluetoothGatt;
 
         // mClientIf 0: not registered
-        // -1: scan stopped
-        // >0: registered and scan started
+        // -1: advertise stopped or registration timeout
+        // >0: registered and advertising started
         private int mClientIf;
         private boolean mIsAdvertising = false;
 
@@ -268,6 +268,10 @@
                 if (mClientIf > 0 && mIsAdvertising) {
                     mLeAdvertisers.put(mAdvertiseCallback, this);
                 } else if (mClientIf <= 0) {
+
+                    // Registration timeout, reset mClientIf to -1 so no subsequent operations can
+                    // proceed.
+                    if (mClientIf == 0) mClientIf = -1;
                     // Post internal error if registration failed.
                     postStartFailure(mAdvertiseCallback,
                             AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR);
@@ -308,10 +312,15 @@
             Log.d(TAG, "onClientRegistered() - status=" + status + " clientIf=" + clientIf);
             synchronized (this) {
                 if (status == BluetoothGatt.GATT_SUCCESS) {
-                    mClientIf = clientIf;
                     try {
-                        mBluetoothGatt.startMultiAdvertising(mClientIf, mAdvertisement,
-                                mScanResponse, mSettings);
+                        if (mClientIf == -1) {
+                            // Registration succeeds after timeout, unregister client.
+                            mBluetoothGatt.unregisterClient(clientIf);
+                        } else {
+                            mClientIf = clientIf;
+                            mBluetoothGatt.startMultiAdvertising(mClientIf, mAdvertisement,
+                                    mScanResponse, mSettings);
+                        }
                         return;
                     } catch (RemoteException e) {
                         Log.e(TAG, "failed to start advertising", e);
diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java
index 03449cc..5715ff8 100644
--- a/core/java/android/bluetooth/le/BluetoothLeScanner.java
+++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java
@@ -278,7 +278,7 @@
         private List<List<ResultStorageDescriptor>> mResultStorages;
 
         // mLeHandle 0: not registered
-        // -1: scan stopped
+        // -1: scan stopped or registration failed
         // > 0: registered and scan started
         private int mClientIf;
 
@@ -310,6 +310,9 @@
                 if (mClientIf > 0) {
                     mLeScanClients.put(mScanCallback, this);
                 } else {
+                    // Registration timed out or got exception, reset clientIf to -1 so no
+                    // subsequent operations can proceed.
+                    if (mClientIf == 0) mClientIf = -1;
                     postCallbackError(mScanCallback,
                             ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED);
                 }
@@ -352,19 +355,19 @@
         @Override
         public void onClientRegistered(int status, int clientIf) {
             Log.d(TAG, "onClientRegistered() - status=" + status +
-                    " clientIf=" + clientIf);
+                    " clientIf=" + clientIf + " mClientIf=" + mClientIf);
             synchronized (this) {
-                if (mClientIf == -1) {
-                    if (DBG) Log.d(TAG, "onClientRegistered LE scan canceled");
-                }
-
                 if (status == BluetoothGatt.GATT_SUCCESS) {
-                    mClientIf = clientIf;
                     try {
-                        mBluetoothGatt.startScan(mClientIf, false, mSettings, mFilters,
-                                mWorkSource, mResultStorages,
-                                ActivityThread.currentOpPackageName());
-
+                        if (mClientIf == -1) {
+                            // Registration succeeds after timeout, unregister client.
+                            mBluetoothGatt.unregisterClient(clientIf);
+                        } else {
+                            mClientIf = clientIf;
+                            mBluetoothGatt.startScan(mClientIf, false, mSettings, mFilters,
+                                    mWorkSource, mResultStorages,
+                                    ActivityThread.currentOpPackageName());
+                        }
                     } catch (RemoteException e) {
                         Log.e(TAG, "fail to start le scan: " + e);
                         mClientIf = -1;
diff --git a/core/java/android/content/ContentValues.java b/core/java/android/content/ContentValues.java
index 0d25f80..7ed827c 100644
--- a/core/java/android/content/ContentValues.java
+++ b/core/java/android/content/ContentValues.java
@@ -230,11 +230,12 @@
     }
 
     /**
-     * Gets a value. Valid value types are {@link String}, {@link Boolean}, and
-     * {@link Number} implementations.
+     * Gets a value. Valid value types are {@link String}, {@link Boolean},
+     * {@link Number}, and {@code byte[]} implementations.
      *
      * @param key the value to get
-     * @return the data for the value
+     * @return the data for the value, or {@code null} if the value is missing or if {@code null}
+     *         was previously added with the given {@code key}
      */
     public Object get(String key) {
         return mValues.get(key);
@@ -255,7 +256,7 @@
      * Gets a value and converts it to a Long.
      *
      * @param key the value to get
-     * @return the Long value, or null if the value is missing or cannot be converted
+     * @return the Long value, or {@code null} if the value is missing or cannot be converted
      */
     public Long getAsLong(String key) {
         Object value = mValues.get(key);
@@ -280,7 +281,7 @@
      * Gets a value and converts it to an Integer.
      *
      * @param key the value to get
-     * @return the Integer value, or null if the value is missing or cannot be converted
+     * @return the Integer value, or {@code null} if the value is missing or cannot be converted
      */
     public Integer getAsInteger(String key) {
         Object value = mValues.get(key);
@@ -305,7 +306,7 @@
      * Gets a value and converts it to a Short.
      *
      * @param key the value to get
-     * @return the Short value, or null if the value is missing or cannot be converted
+     * @return the Short value, or {@code null} if the value is missing or cannot be converted
      */
     public Short getAsShort(String key) {
         Object value = mValues.get(key);
@@ -330,7 +331,7 @@
      * Gets a value and converts it to a Byte.
      *
      * @param key the value to get
-     * @return the Byte value, or null if the value is missing or cannot be converted
+     * @return the Byte value, or {@code null} if the value is missing or cannot be converted
      */
     public Byte getAsByte(String key) {
         Object value = mValues.get(key);
@@ -355,7 +356,7 @@
      * Gets a value and converts it to a Double.
      *
      * @param key the value to get
-     * @return the Double value, or null if the value is missing or cannot be converted
+     * @return the Double value, or {@code null} if the value is missing or cannot be converted
      */
     public Double getAsDouble(String key) {
         Object value = mValues.get(key);
@@ -380,7 +381,7 @@
      * Gets a value and converts it to a Float.
      *
      * @param key the value to get
-     * @return the Float value, or null if the value is missing or cannot be converted
+     * @return the Float value, or {@code null} if the value is missing or cannot be converted
      */
     public Float getAsFloat(String key) {
         Object value = mValues.get(key);
@@ -405,7 +406,7 @@
      * Gets a value and converts it to a Boolean.
      *
      * @param key the value to get
-     * @return the Boolean value, or null if the value is missing or cannot be converted
+     * @return the Boolean value, or {@code null} if the value is missing or cannot be converted
      */
     public Boolean getAsBoolean(String key) {
         Object value = mValues.get(key);
@@ -428,7 +429,8 @@
      * any other types to byte arrays.
      *
      * @param key the value to get
-     * @return the byte[] value, or null is the value is missing or not a byte[]
+     * @return the {@code byte[]} value, or {@code null} is the value is missing or not a
+     *         {@code byte[]}
      */
     public byte[] getAsByteArray(String key) {
         Object value = mValues.get(key);
diff --git a/core/java/android/content/IIntentSender.aidl b/core/java/android/content/IIntentSender.aidl
index f3affa7..45c62d4 100644
--- a/core/java/android/content/IIntentSender.aidl
+++ b/core/java/android/content/IIntentSender.aidl
@@ -21,7 +21,7 @@
 import android.os.Bundle;
 
 /** @hide */
-interface IIntentSender {
-    int send(int code, in Intent intent, String resolvedType,
+oneway interface IIntentSender {
+    void send(int code, in Intent intent, String resolvedType,
             IIntentReceiver finishedReceiver, String requiredPermission, in Bundle options);
 }
diff --git a/core/java/android/content/IntentSender.java b/core/java/android/content/IntentSender.java
index 13a767e..32ca6c2 100644
--- a/core/java/android/content/IntentSender.java
+++ b/core/java/android/content/IntentSender.java
@@ -17,10 +17,6 @@
 package android.content;
 
 import android.app.ActivityManagerNative;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IIntentSender;
-import android.content.IIntentReceiver;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.Handler;
@@ -191,7 +187,8 @@
             String resolvedType = intent != null ?
                     intent.resolveTypeIfNeeded(context.getContentResolver())
                     : null;
-            int res = mTarget.send(code, intent, resolvedType,
+            int res = ActivityManagerNative.getDefault().sendIntentSender(mTarget,
+                    code, intent, resolvedType,
                     onFinished != null
                             ? new FinishedDispatcher(this, onFinished, handler)
                             : null,
diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java
index fb5bfd3..273522a 100644
--- a/core/java/android/content/res/ColorStateList.java
+++ b/core/java/android/content/res/ColorStateList.java
@@ -46,29 +46,81 @@
 /**
  *
  * Lets you map {@link android.view.View} state sets to colors.
- *
+ * <p>
  * {@link android.content.res.ColorStateList}s are created from XML resource files defined in the
- * "color" subdirectory directory of an application's resource directory.  The XML file contains
- * a single "selector" element with a number of "item" elements inside.  For example:
- *
+ * "color" subdirectory directory of an application's resource directory. The XML file contains
+ * a single "selector" element with a number of "item" elements inside. For example:
  * <pre>
  * &lt;selector xmlns:android="http://schemas.android.com/apk/res/android"&gt;
- *   &lt;item android:state_focused="true" android:color="@color/testcolor1"/&gt;
- *   &lt;item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" /&gt;
- *   &lt;item android:state_enabled="false" android:color="@color/testcolor3" /&gt;
- *   &lt;item android:color="@color/testcolor5"/&gt;
+ *   &lt;item android:state_focused="true"
+ *           android:color="@color/sample_focused" /&gt;
+ *   &lt;item android:state_pressed="true"
+ *           android:state_enabled="false"
+ *           android:color="@color/sample_disabled_pressed" /&gt;
+ *   &lt;item android:state_enabled="false"
+ *           android:color="@color/sample_disabled_not_pressed" /&gt;
+ *   &lt;item android:color="@color/sample_default" /&gt;
  * &lt;/selector&gt;
  * </pre>
  *
  * This defines a set of state spec / color pairs where each state spec specifies a set of
  * states that a view must either be in or not be in and the color specifies the color associated
- * with that spec.  The list of state specs will be processed in order of the items in the XML file.
- * An item with no state spec is considered to match any set of states and is generally useful as
- * a final item to be used as a default.  Note that if you have such an item before any other items
- * in the list then any subsequent items will end up being ignored.
- * <p>For more information, see the guide to <a
- * href="{@docRoot}guide/topics/resources/color-list-resource.html">Color State
- * List Resource</a>.</p>
+ * with that spec.
+ *
+ * <a name="StateSpec"></a>
+ * <h3>State specs</h3>
+ * <p>
+ * Each item defines a set of state spec and color pairs, where the state spec is a series of
+ * attributes set to either {@code true} or {@code false} to represent inclusion or exclusion. If
+ * an attribute is not specified for an item, it may be any value.
+ * <p>
+ * For example, the following item will be matched whenever the focused state is set; any other
+ * states may be set or unset:
+ * <pre>
+ * &lt;item android:state_focused="true"
+ *         android:color="@color/sample_focused" /&gt;
+ * </pre>
+ * <p>
+ * Typically, a color state list will reference framework-defined state attributes such as
+ * {@link android.R.attr#state_focused android:state_focused} or
+ * {@link android.R.attr#state_enabled android:state_enabled}; however, app-defined attributes may
+ * also be used.
+ * <p>
+ * <strong>Note:</strong> The list of state specs will be matched against in the order that they
+ * appear in the XML file. For this reason, more-specific items should be placed earlier in the
+ * file. An item with no state spec is considered to match any set of states and is generally
+ * useful as a final item to be used as a default.
+ * <p>
+ * If an item with no state spec if placed before other items, those items
+ * will be ignored.
+ *
+ * <a name="ItemAttributes"></a>
+ * <h3>Item attributes</h3>
+ * <p>
+ * Each item must define an {@link android.R.attr#color android:color} attribute, which may be
+ * an HTML-style hex color, a reference to a color resource, or -- in API 23 and above -- a theme
+ * attribute that resolves to a color.
+ * <p>
+ * Starting with API 23, items may optionally define an {@link android.R.attr#alpha android:alpha}
+ * attribute to modify the base color's opacity. This attribute takes a either floating-point value
+ * between 0 and 1 or a theme attribute that resolves as such. The item's overall color is
+ * calculated by multiplying by the base color's alpha channel by the {@code alpha} value. For
+ * example, the following item represents the theme's accent color at 50% opacity:
+ * <pre>
+ * &lt;item android:state_enabled="false"
+ *         android:color="?android:attr/colorAccent"
+ *         android:alpha="0.5" /&gt;
+ * </pre>
+ *
+ * <a name="DeveloperGuide"></a>
+ * <h3>Developer guide</h3>
+ * <p>
+ * For more information, see the guide to
+ * <a href="{@docRoot}guide/topics/resources/color-list-resource.html">Color State
+ * List Resource</a>.
+ *
+ * @attr ref android.R.styleable#ColorStateListItem_alpha
+ * @attr ref android.R.styleable#ColorStateListItem_color
  */
 public class ColorStateList extends ComplexColor implements Parcelable {
     private static final String TAG = "ColorStateList";
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 50e7356..0f64b92 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -1431,10 +1431,9 @@
      *            row. The keys should be the column names and the values the
      *            column values
      * @param conflictAlgorithm for insert conflict resolver
-     * @return the row ID of the newly inserted row
-     * OR the primary key of the existing row if the input param 'conflictAlgorithm' =
-     * {@link #CONFLICT_IGNORE}
-     * OR -1 if any error
+     * @return the row ID of the newly inserted row OR <code>-1</code> if either the
+     *            input parameter <code>conflictAlgorithm</code> = {@link #CONFLICT_IGNORE}
+     *            or an error occurred.
      */
     public long insertWithOnConflict(String table, String nullColumnHack,
             ContentValues initialValues, int conflictAlgorithm) {
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 923be5e..4799773 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -1714,18 +1714,9 @@
     private void clearInsetOfPreviousIme() {
         if (DEBUG) Log.v(TAG, "clearInsetOfPreviousIme() "
                 + " mShouldClearInsetOfPreviousIme=" + mShouldClearInsetOfPreviousIme);
-        if (!mShouldClearInsetOfPreviousIme || mWindow == null) return;
-        try {
-            // We do not call onWindowShown() and onWindowHidden() so as not to make the IME author
-            // confused.
-            // TODO: Find out a better way which has less side-effect.
-            mWindow.show();
-            mWindow.hide();
-        } catch (WindowManager.BadTokenException e) {
-            if (DEBUG) Log.v(TAG, "clearInsetOfPreviousIme: BadTokenException: IME is done.");
-            mWindowVisible = false;
-            mWindowAdded = false;
-        }
+        if (!mShouldClearInsetOfPreviousIme) return;
+
+        mImm.clearLastInputMethodWindowForTransition(mToken);
         mShouldClearInsetOfPreviousIme = false;
     }
 
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 43d9bf32..a45e6f5 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -3362,6 +3362,10 @@
     /**
      * Determines if the calling application is subject to metered network restrictions while
      * running on background.
+     *
+     * @return {@link #RESTRICT_BACKGROUND_STATUS_DISABLED},
+     * {@link #RESTRICT_BACKGROUND_STATUS_ENABLED},
+     * or {@link #RESTRICT_BACKGROUND_STATUS_WHITELISTED}
      */
     public @RestrictBackgroundStatus int getRestrictBackgroundStatus() {
         try {
diff --git a/core/java/android/net/INetworkPolicyListener.aidl b/core/java/android/net/INetworkPolicyListener.aidl
index 6523192..812f1fe 100644
--- a/core/java/android/net/INetworkPolicyListener.aidl
+++ b/core/java/android/net/INetworkPolicyListener.aidl
@@ -23,6 +23,5 @@
     void onMeteredIfacesChanged(in String[] meteredIfaces);
     void onRestrictBackgroundChanged(boolean restrictBackground);
     void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted);
-    void onRestrictPowerChanged(boolean restrictPower);
 
 }
diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl
index fc9b8dd..224ff5b 100644
--- a/core/java/android/net/INetworkPolicyManager.aidl
+++ b/core/java/android/net/INetworkPolicyManager.aidl
@@ -54,7 +54,6 @@
     /** Control if background data is restricted system-wide. */
     void setRestrictBackground(boolean restrictBackground);
     boolean getRestrictBackground();
-    boolean getRestrictPower();
 
     /** Callback used to change internal state on tethering */
     void onTetheringChanged(String iface, boolean tethering);
diff --git a/core/java/android/net/UidRange.java b/core/java/android/net/UidRange.java
index 2e586b3..fd465d9 100644
--- a/core/java/android/net/UidRange.java
+++ b/core/java/android/net/UidRange.java
@@ -48,6 +48,17 @@
         return start / PER_USER_RANGE;
     }
 
+    public boolean contains(int uid) {
+        return start <= uid && uid <= stop;
+    }
+
+    /**
+     * @return {@code true} if this range contains every UID contained by the {@param other} range.
+     */
+    public boolean containsRange(UidRange other) {
+        return start <= other.start && other.stop <= stop;
+    }
+
     @Override
     public int hashCode() {
         int result = 17;
diff --git a/core/java/android/nfc/cardemulation/HostNfcFService.java b/core/java/android/nfc/cardemulation/HostNfcFService.java
index 273ddeb..1d4baf4 100644
--- a/core/java/android/nfc/cardemulation/HostNfcFService.java
+++ b/core/java/android/nfc/cardemulation/HostNfcFService.java
@@ -19,6 +19,7 @@
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.app.Service;
+import android.content.ComponentName;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
@@ -31,6 +32,67 @@
 /**
  * <p>HostNfcFService is a convenience {@link Service} class that can be
  * extended to emulate an NFC-F card inside an Android service component.
+ *
+ * <h3>NFC Protocols</h3>
+ * <p>Cards emulated by this class are based on the NFC-Forum NFC-F
+ * protocol (based on the JIS-X 6319-4 specification.)</p>
+ *
+ * <h3>System Code and NFCID2 registration</h3>
+ * <p>A {@link HostNfcFService HostNfcFService service} can register
+ * exactly one System Code and one NFCID2. For details about the use of
+ * System Code and NFCID2, see the NFC Forum Digital specification.</p>
+ * <p>To statically register a System Code and NFCID2 with the service, a {@link #SERVICE_META_DATA}
+ * entry must be included in the declaration of the service. An example of a HostNfcFService
+ * manifest declaration is shown below:
+ *
+ * <pre> &lt;service android:name=".MyHostNfcFService" android:exported="true" android:permission="android.permission.BIND_NFC_SERVICE"&gt;
+ *     &lt;intent-filter&gt;
+ *         &lt;action android:name="android.nfc.cardemulation.action.HOST_NFCF_SERVICE"/&gt;
+ *     &lt;/intent-filter&gt;
+ *     &lt;meta-data android:name="android.nfc.cardemulation.host_nfcf_service" android:resource="@xml/nfcfservice"/&gt;
+ * &lt;/service&gt;</pre>
+ *
+ * This meta-data tag points to an nfcfservice.xml file.
+ * An example of this file with a System Code and NFCID2 declaration is shown below:
+ * <pre>
+ * &lt;host-nfcf-service xmlns:android="http://schemas.android.com/apk/res/android"
+ *           android:description="@string/servicedesc"&gt;
+ *       &lt;system-code-filter android:name="4000"/&gt;
+ *       &lt;nfcid2-filter android:name="02FE000000000000"/&gt;
+ * &lt;/host-nfcf-service&gt;
+ * </pre>
+ *
+ * <p>The {@link android.R.styleable#HostNfcFService &lt;host-nfcf-service&gt;} is required
+ * to contain a
+ * {@link android.R.styleable#HostApduService_description &lt;android:description&gt;}
+ * attribute that contains a user-friendly description of the service that may be shown in UI.
+ * <p>The {@link android.R.styleable#HostNfcFService &lt;host-nfcf-service&gt;} must
+ * contain:
+ * <ul>
+ * <li>Exactly one {@link android.R.styleable#SystemCodeFilter &lt;system-code-filter&gt;} tag.</li>
+ * <li>Exactly one {@link android.R.styleable#Nfcid2Filter &lt;nfcid2-filter&gt;} tag.</li>
+ * </ul>
+ * </p>
+ *
+ * <p>Alternatively, the System Code and NFCID2 can be dynamically registererd for a service
+ * by using the {@link NfcFCardEmulation#registerSystemCodeForService(ComponentName, String)} and
+ * {@link NfcFCardEmulation#setNfcid2ForService(ComponentName, String)} methods.
+ * </p>
+ *
+ * <h3>Service selection</h3>
+ * <p>When a remote NFC devices wants to communicate with your service, it
+ * sends a SENSF_REQ command to the NFC controller, requesting a System Code.
+ * If a {@link NfcFCardEmulation NfcFCardEmulation service} has registered
+ * this system code and has been enabled by the foreground application, the
+ * NFC controller will respond with the NFCID2 that is registered for this service.
+ * The reader can then continue data exchange with this service by using the NFCID2.</p>
+ *
+ * <h3>Data exchange</h3>
+ * <p>After service selection, all frames addressed to the NFCID2 of this service will
+ * be sent through {@link #processNfcFPacket(byte[], Bundle)}, until the NFC link is
+ * broken.<p>
+ *
+ * <p>When the NFC link is broken, {@link #onDeactivated(int)} will be called.</p>
  */
 public abstract class HostNfcFService extends Service {
     /**
diff --git a/core/java/android/nfc/cardemulation/NfcFCardEmulation.java b/core/java/android/nfc/cardemulation/NfcFCardEmulation.java
index a506504..6bb5d8e 100644
--- a/core/java/android/nfc/cardemulation/NfcFCardEmulation.java
+++ b/core/java/android/nfc/cardemulation/NfcFCardEmulation.java
@@ -108,12 +108,12 @@
      * the System Code contained in the Manifest file is returned. After calling
      * {@link #registerSystemCodeForService(ComponentName, String)}, the System Code
      * registered there is returned. After calling
-     * {@link #removeSystemCodeForService(ComponentName)}, "null" is returned.
+     * {@link #unregisterSystemCodeForService(ComponentName)}, "null" is returned.
      *
      * @param service The component name of the service
      * @return the current System Code
      */
-    public String getSystemCodeForService(ComponentName service) {
+    public String getSystemCodeForService(ComponentName service) throws RuntimeException {
         if (service == null) {
             throw new NullPointerException("service is null");
         }
@@ -130,6 +130,7 @@
                 return sService.getSystemCodeForService(UserHandle.myUserId(), service);
             } catch (RemoteException ee) {
                 Log.e(TAG, "Failed to reach CardEmulationService.");
+                ee.rethrowAsRuntimeException();
                 return null;
             }
         }
@@ -157,7 +158,8 @@
      * @param systemCode The System Code to be registered
      * @return whether the registration was successful.
      */
-    public boolean registerSystemCodeForService(ComponentName service, String systemCode) {
+    public boolean registerSystemCodeForService(ComponentName service, String systemCode)
+            throws RuntimeException {
         if (service == null || systemCode == null) {
             throw new NullPointerException("service or systemCode is null");
         }
@@ -176,6 +178,7 @@
                         service, systemCode);
             } catch (RemoteException ee) {
                 Log.e(TAG, "Failed to reach CardEmulationService.");
+                ee.rethrowAsRuntimeException();
                 return false;
             }
         }
@@ -187,7 +190,7 @@
      * @param service The component name of the service
      * @return whether the System Code was successfully removed.
      */
-    public boolean removeSystemCodeForService(ComponentName service) {
+    public boolean unregisterSystemCodeForService(ComponentName service) throws RuntimeException {
         if (service == null) {
             throw new NullPointerException("service is null");
         }
@@ -204,6 +207,7 @@
                 return sService.removeSystemCodeForService(UserHandle.myUserId(), service);
             } catch (RemoteException ee) {
                 Log.e(TAG, "Failed to reach CardEmulationService.");
+                ee.rethrowAsRuntimeException();
                 return false;
             }
         }
@@ -221,7 +225,7 @@
      * @param service The component name of the service
      * @return the current NFCID2
      */
-    public String getNfcid2ForService(ComponentName service) {
+    public String getNfcid2ForService(ComponentName service) throws RuntimeException {
         if (service == null) {
             throw new NullPointerException("service is null");
         }
@@ -238,6 +242,7 @@
                 return sService.getNfcid2ForService(UserHandle.myUserId(), service);
             } catch (RemoteException ee) {
                 Log.e(TAG, "Failed to reach CardEmulationService.");
+                ee.rethrowAsRuntimeException();
                 return null;
             }
         }
@@ -262,7 +267,8 @@
      * @param nfcid2 The NFCID2 to be registered
      * @return whether the setting was successful.
      */
-    public boolean setNfcid2ForService(ComponentName service, String nfcid2) {
+    public boolean setNfcid2ForService(ComponentName service, String nfcid2)
+            throws RuntimeException {
         if (service == null || nfcid2 == null) {
             throw new NullPointerException("service or nfcid2 is null");
         }
@@ -281,6 +287,7 @@
                         service, nfcid2);
             } catch (RemoteException ee) {
                 Log.e(TAG, "Failed to reach CardEmulationService.");
+                ee.rethrowAsRuntimeException();
                 return false;
             }
         }
@@ -292,12 +299,12 @@
      *
      * <p>The specified HCE-F service is only enabled when the corresponding application is
      * in the foreground and this method has been called. When the application is moved to
-     * the background, {@link #disableNfcFForegroundService(Activity)} is called, or
+     * the background, {@link #disableService(Activity)} is called, or
      * NFCID2 or System Code is replaced, the HCE-F service is disabled.
      *
      * <p>The specified Activity must currently be in resumed state. A good
      * paradigm is to call this method in your {@link Activity#onResume}, and to call
-     * {@link #disableNfcFForegroundService(Activity)} in your {@link Activity#onPause}.
+     * {@link #disableService(Activity)} in your {@link Activity#onPause}.
      *
      * <p>Note that this preference is not persisted by the OS, and hence must be
      * called every time the Activity is resumed.
@@ -306,7 +313,7 @@
      * @param service The service to be preferred while this activity is in the foreground
      * @return whether the registration was successful
      */
-    public boolean enableNfcFForegroundService(Activity activity, ComponentName service) {
+    public boolean enableService(Activity activity, ComponentName service) throws RuntimeException {
         if (activity == null || service == null) {
             throw new NullPointerException("activity or service is null");
         }
@@ -327,6 +334,7 @@
                 return sService.enableNfcFForegroundService(service);
             } catch (RemoteException ee) {
                 Log.e(TAG, "Failed to reach CardEmulationService.");
+                ee.rethrowAsRuntimeException();
                 return false;
             }
         }
@@ -342,7 +350,7 @@
      * @param activity The activity which the service was registered for
      * @return true when successful
      */
-    public boolean disableNfcFForegroundService(Activity activity) {
+    public boolean disableService(Activity activity) throws RuntimeException {
         if (activity == null) {
             throw new NullPointerException("activity is null");
         }
@@ -362,6 +370,7 @@
                 return sService.disableNfcFForegroundService();
             } catch (RemoteException ee) {
                 Log.e(TAG, "Failed to reach CardEmulationService.");
+                ee.rethrowAsRuntimeException();
                 return false;
             }
         }
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index 55b0d2a..b27cb32 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -58,6 +58,7 @@
     boolean canHaveRestrictedProfile(int userHandle);
     int getUserSerialNumber(int userHandle);
     int getUserHandle(int userSerialNumber);
+    int getUserRestrictionSource(String restrictionKey, int userHandle);
     Bundle getUserRestrictions(int userHandle);
     boolean hasBaseUserRestriction(String restrictionKey, int userHandle);
     boolean hasUserRestriction(in String restrictionKey, int userHandle);
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 1948df9..dcec982 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -18,6 +18,7 @@
 
 import android.Manifest;
 import android.accounts.AccountManager;
+import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
@@ -43,6 +44,8 @@
 import com.android.internal.R;
 
 import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -63,6 +66,41 @@
     private final Context mContext;
 
     /**
+     * @hide
+     * No user restriction.
+     */
+    @SystemApi
+    public static final int RESTRICTION_NOT_SET = 0x0;
+
+    /**
+     * @hide
+     * User restriction set by system/user.
+     */
+    @SystemApi
+    public static final int RESTRICTION_SOURCE_SYSTEM = 0x1;
+
+    /**
+     * @hide
+     * User restriction set by a device owner.
+     */
+    @SystemApi
+    public static final int RESTRICTION_SOURCE_DEVICE_OWNER = 0x2;
+
+    /**
+     * @hide
+     * User restriction set by a profile owner.
+     */
+    @SystemApi
+    public static final int RESTRICTION_SOURCE_PROFILE_OWNER = 0x4;
+
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(flag=true, value={RESTRICTION_NOT_SET, RESTRICTION_SOURCE_SYSTEM,
+            RESTRICTION_SOURCE_DEVICE_OWNER, RESTRICTION_SOURCE_PROFILE_OWNER})
+    @SystemApi
+    public @interface UserRestrictionSource {}
+
+    /**
      * Specifies if a user is disallowed from adding and removing accounts, unless they are
      * {@link android.accounts.AccountManager#addAccountExplicitly programmatically} added by
      * Authenticator.
@@ -1023,6 +1061,27 @@
     }
 
     /**
+     * @hide
+     *
+     * Returns who set a user restriction on a user.
+     * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
+     * @param restrictionKey the string key representing the restriction
+     * @param userHandle the UserHandle of the user for whom to retrieve the restrictions.
+     * @return The source of user restriction. Any combination of {@link #RESTRICTION_NOT_SET},
+     *         {@link #RESTRICTION_SOURCE_SYSTEM}, {@link #RESTRICTION_SOURCE_DEVICE_OWNER}
+     *         and {@link #RESTRICTION_SOURCE_PROFILE_OWNER}
+     */
+    @SystemApi
+    @UserRestrictionSource
+    public int getUserRestrictionSource(String restrictionKey, UserHandle userHandle) {
+        try {
+            return mService.getUserRestrictionSource(restrictionKey, userHandle.getIdentifier());
+        } catch (RemoteException re) {
+            throw re.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Returns the user-wide restrictions imposed on this user.
      * @return a Bundle containing all the restrictions.
      */
diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java
index 4b70649..5a98482 100644
--- a/core/java/android/os/storage/VolumeInfo.java
+++ b/core/java/android/os/storage/VolumeInfo.java
@@ -442,6 +442,7 @@
         // note that docsui treats this as *force* show advanced. So sending
         // false permits advanced to be shown based on user preferences.
         intent.putExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, isPrimary());
+        intent.putExtra(DocumentsContract.EXTRA_FANCY_FEATURES, true);
         intent.putExtra(DocumentsContract.EXTRA_SHOW_FILESIZE, true);
         return intent;
     }
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index aba3972..1158776 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -99,6 +99,9 @@
     public static final String EXTRA_SHOW_FILESIZE = "android.content.extra.SHOW_FILESIZE";
 
     /** {@hide} */
+    public static final String EXTRA_FANCY_FEATURES = "android.content.extra.FANCY";
+
+    /** {@hide} */
     public static final String EXTRA_TARGET_URI = "android.content.extra.TARGET_URI";
 
     /**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 7b4be71..76f5175 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1462,12 +1462,15 @@
 
     private static final class GenerationTracker {
         private final MemoryIntArray mArray;
+        private final Runnable mErrorHandler;
         private final int mIndex;
         private int mCurrentGeneration;
 
-        public GenerationTracker(@NonNull MemoryIntArray array, int index) {
+        public GenerationTracker(@NonNull MemoryIntArray array, int index,
+                Runnable errorHandler) {
             mArray = array;
             mIndex = index;
+            mErrorHandler = errorHandler;
             mCurrentGeneration = readCurrentGeneration();
         }
 
@@ -1487,9 +1490,23 @@
                 return mArray.get(mIndex);
             } catch (IOException e) {
                 Log.e(TAG, "Error getting current generation", e);
+                if (mErrorHandler != null) {
+                    mErrorHandler.run();
+                }
             }
             return -1;
         }
+
+        public void destroy() {
+            try {
+                mArray.close();
+            } catch (IOException e) {
+                Log.e(TAG, "Error closing backing array", e);
+                if (mErrorHandler != null) {
+                    mErrorHandler.run();
+                }
+            }
+        }
     }
 
     // Thread-safe.
@@ -1616,7 +1633,20 @@
                                                     + cr.getPackageName() + " and user:"
                                                     + userHandle + " with index:" + index);
                                         }
-                                        mGenerationTracker = new GenerationTracker(array, index);
+                                        mGenerationTracker = new GenerationTracker(array, index,
+                                                () -> {
+                                            synchronized (this) {
+                                                Log.e(TAG, "Error accessing generation"
+                                                        + " tracker - removing");
+                                                if (mGenerationTracker != null) {
+                                                    GenerationTracker generationTracker =
+                                                            mGenerationTracker;
+                                                    mGenerationTracker = null;
+                                                    generationTracker.destroy();
+                                                    mValues.clear();
+                                                }
+                                            }
+                                        });
                                     }
                                 }
                                 mValues.put(name, value);
diff --git a/core/java/android/util/MemoryIntArray.java b/core/java/android/util/MemoryIntArray.java
index c3bd963..8f9b36e 100644
--- a/core/java/android/util/MemoryIntArray.java
+++ b/core/java/android/util/MemoryIntArray.java
@@ -20,6 +20,7 @@
 import android.os.ParcelFileDescriptor;
 import android.os.Parcelable;
 import android.os.Process;
+import libcore.io.IoUtils;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -46,6 +47,8 @@
  * @hide
  */
 public final class MemoryIntArray implements Parcelable, Closeable {
+    private static final String TAG = "MemoryIntArray";
+
     private static final int MAX_SIZE = 1024;
 
     private final int mOwnerPid;
@@ -142,8 +145,9 @@
     @Override
     public void close() throws IOException {
         if (!isClosed()) {
-            nativeClose(mFd.getFd(), mMemoryAddr, isOwner());
+            ParcelFileDescriptor pfd = mFd;
             mFd = null;
+            nativeClose(pfd.getFd(), mMemoryAddr, isOwner());
         }
     }
 
@@ -156,7 +160,7 @@
 
     @Override
     protected void finalize() throws Throwable {
-        close();
+        IoUtils.closeQuietly(this);
         super.finalize();
     }
 
@@ -230,7 +234,6 @@
     private native int nativeGet(int fd, long memoryAddr, int index, boolean owner);
     private native void nativeSet(int fd, long memoryAddr, int index, int value, boolean owner);
     private native int nativeSize(int fd);
-    private native static int nativeGetMemoryPageSize();
 
     /**
      * @return The max array size.
@@ -246,7 +249,8 @@
             try {
                 return new MemoryIntArray(parcel);
             } catch (IOException ioe) {
-                throw new RuntimeException(ioe);
+                Log.e(TAG, "Error unparceling MemoryIntArray");
+                return null;
             }
         }
 
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index 0dfbe70..fb482b4 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -160,6 +160,8 @@
      * ACTION_DRAG_STARTED.
      * </p>
      * @see #ACTION_DRAG_ENDED
+     * @see #getX()
+     * @see #getY()
      */
     public static final int ACTION_DRAG_STARTED = 1;
 
@@ -323,17 +325,16 @@
 
     /**
      * Gets the X coordinate of the drag point. The value is only valid if the event action is
-     * {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}.
-     * @return The current drag point's Y coordinate
+     * {@link #ACTION_DRAG_STARTED}, {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}.
+     * @return The current drag point's X coordinate
      */
     public float getX() {
         return mX;
     }
 
     /**
-     * Gets the Y coordinate of the drag point. The value is valid if the
-     * event action is {@link #ACTION_DRAG_ENTERED}, {@link #ACTION_DRAG_LOCATION},
-     * {@link #ACTION_DROP}, or {@link #ACTION_DRAG_EXITED}.
+     * Gets the Y coordinate of the drag point. The value is only valid if the event action is
+     * {@link #ACTION_DRAG_STARTED}, {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}.
      * @return The current drag point's Y coordinate
      */
     public float getY() {
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 4ba97d5..f8a6a17 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -163,7 +163,12 @@
             IAppTransitionAnimationSpecsFuture specsFuture, IRemoteCallback startedCallback,
             boolean scaleUp);
     void executeAppTransition();
-    void setAppStartingWindow(IBinder token, String pkg, int theme,
+
+    /**
+     * Called to set the starting window for the input token and returns true if the starting
+     * window was set for the token.
+     */
+    boolean setAppStartingWindow(IBinder token, String pkg, int theme,
             in CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
             int icon, int logo, int windowFlags, IBinder transferFrom, boolean createIfNeeded);
     void setAppVisibility(IBinder token, boolean visible);
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 1cd2fb0..e650d95 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -252,17 +252,6 @@
     }
 
     /**
-     * Sets the library directory to use as a search path for vulkan layers.
-     *
-     * @param libDir A directory that contains vulkan layers
-     *
-     * @hide
-     */
-    public static void setLibDir(String libDir) {
-        ThreadedRenderer.setupVulkanLayerPath(libDir);
-    }
-
-    /**
      * Creates a hardware renderer using OpenGL.
      *
      * @param translucent True if the surface is translucent, false otherwise
@@ -980,7 +969,6 @@
     }
 
     static native void setupShadersDiskCache(String cacheFile);
-    static native void setupVulkanLayerPath(String layerPath);
 
     private static native void nSetAtlas(long nativeProxy, GraphicBuffer buffer, long[] map);
     private static native void nSetProcessStatsBuffer(long nativeProxy, int fd);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 4e7d1914..77884f6 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -8740,7 +8740,7 @@
      * @param direction The direction of the focus
      */
     public void addFocusables(ArrayList<View> views, @FocusDirection int direction) {
-        addFocusables(views, direction, FOCUSABLES_TOUCH_MODE);
+        addFocusables(views, direction, isInTouchMode() ? FOCUSABLES_TOUCH_MODE : FOCUSABLES_ALL);
     }
 
     /**
@@ -8768,7 +8768,7 @@
             return;
         }
         if ((focusableMode & FOCUSABLES_TOUCH_MODE) == FOCUSABLES_TOUCH_MODE
-                && isInTouchMode() && !isFocusableInTouchMode()) {
+                && !isFocusableInTouchMode()) {
             return;
         }
         views.add(this);
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 0222d37..2f23b61 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -1579,7 +1579,19 @@
             Log.d(View.VIEW_LOG_TAG, "Sending drag-started to view: " + child);
         }
 
+        final float tx = mCurrentDragStartEvent.mX;
+        final float ty = mCurrentDragStartEvent.mY;
+
+        final float[] point = getTempPoint();
+        point[0] = tx;
+        point[1] = ty;
+        transformPointToViewLocal(point, child);
+
+        mCurrentDragStartEvent.mX = point[0];
+        mCurrentDragStartEvent.mY = point[1];
         final boolean canAccept = child.dispatchDragEvent(mCurrentDragStartEvent);
+        mCurrentDragStartEvent.mX = tx;
+        mCurrentDragStartEvent.mY = ty;
         if (canAccept) {
             mChildrenInterestedInDrag.add(child);
             if (!child.canAcceptDrag()) {
@@ -5482,6 +5494,9 @@
     }
 
     /**
+     * @param forceParentCheck true to guarantee that this call will propagate to all ancestors,
+     *      false otherwise
+     *
      * @hide
      */
     public boolean getChildVisibleRect(
@@ -5541,7 +5556,12 @@
                 (int) Math.ceil(rect.right), (int) Math.ceil(rect.bottom));
 
         if ((forceParentCheck || rectIsVisible) && mParent != null) {
-            rectIsVisible = mParent.getChildVisibleRect(this, r, offset);
+            if (mParent instanceof ViewGroup) {
+                rectIsVisible = ((ViewGroup) mParent)
+                        .getChildVisibleRect(this, r, offset, forceParentCheck);
+            } else {
+                rectIsVisible = mParent.getChildVisibleRect(this, r, offset);
+            }
         }
         return rectIsVisible;
     }
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 9b74fc0..fe24230 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -1803,7 +1803,21 @@
          */
         public final void setSurfaceInsets(View view, boolean manual, boolean preservePrevious) {
             final int surfaceInset = (int) Math.ceil(view.getZ() * 2);
-            surfaceInsets.set(surfaceInset, surfaceInset, surfaceInset, surfaceInset);
+            // Partial workaround for b/28318973. Every inset change causes a freeform window
+            // to jump a little for a few frames. If we never allow surface insets to decrease,
+            // they will stabilize quickly (often from the very beginning, as most windows start
+            // as focused).
+            // TODO(b/22668382) to fix this properly.
+            if (surfaceInset == 0) {
+                // OK to have 0 (this is the case for non-freeform windows).
+                surfaceInsets.set(0, 0, 0, 0);
+            } else {
+                surfaceInsets.set(
+                        Math.max(surfaceInset, surfaceInsets.left),
+                        Math.max(surfaceInset, surfaceInsets.top),
+                        Math.max(surfaceInset, surfaceInsets.right),
+                        Math.max(surfaceInset, surfaceInsets.bottom));
+            }
             hasManualSurfaceInsets = manual;
             preservePreviousSurfaceInsets = preservePrevious;
         }
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 887cc3a..11734d3 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -391,17 +391,34 @@
         }
     }
 
+    /**
+     * Remove all roots with specified token.
+     *
+     * @param token app or window token.
+     * @param who name of caller, used in logs.
+     * @param what type of caller, used in logs.
+     */
     public void closeAll(IBinder token, String who, String what) {
+        closeAllExceptView(token, null /* view */, who, what);
+    }
+
+    /**
+     * Remove all roots with specified token, except maybe one view.
+     *
+     * @param token app or window token.
+     * @param view view that should be should be preserved along with it's root.
+     *             Pass null if everything should be removed.
+     * @param who name of caller, used in logs.
+     * @param what type of caller, used in logs.
+     */
+    public void closeAllExceptView(IBinder token, View view, String who, String what) {
         synchronized (mLock) {
             int count = mViews.size();
-            //Log.i("foo", "Closing all windows of " + token);
             for (int i = 0; i < count; i++) {
-                //Log.i("foo", "@ " + i + " token " + mParams[i].token
-                //        + " view " + mRoots[i].getView());
-                if (token == null || mParams.get(i).token == token) {
+                if ((view == null || mViews.get(i) != view)
+                        && (token == null || mParams.get(i).token == token)) {
                     ViewRootImpl root = mRoots.get(i);
 
-                    //Log.i("foo", "Force closing " + root);
                     if (who != null) {
                         WindowLeaked leak = new WindowLeaked(
                                 what + " " + who + " has leaked window "
diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java
index 4b188c4..610dff8 100644
--- a/core/java/android/view/WindowManagerInternal.java
+++ b/core/java/android/view/WindowManagerInternal.java
@@ -261,6 +261,13 @@
     public abstract void saveLastInputMethodWindowForTransition();
 
     /**
+     * Clears last input method window for transition.
+     *
+     * Note that it is assumed that this method is called only by InputMethodManagerService.
+     */
+    public abstract void clearLastInputMethodWindowForTransition();
+
+    /**
       * Returns true when the hardware keyboard is available.
       */
     public abstract boolean isHardKeyboardAvailable();
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 908a99d..e6f5b83 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -938,7 +938,11 @@
      * be correct.
      *
      * @param attrs The LayoutParams of the window.
-     * @param rotation Rotation of the display.
+     * @param taskBounds The bounds of the task this window is on or {@code null} if no task is
+     *                   associated with the window.
+     * @param displayRotation Rotation of the display.
+     * @param displayWidth The width of the display.
+     * @param displayHeight The height of the display.
      * @param outContentInsets The areas covered by system windows, expressed as positive insets.
      * @param outStableInsets The areas covered by stable system windows irrespective of their
      *                        current visibility. Expressed as positive insets.
@@ -946,8 +950,9 @@
      * @return Whether to always consume the navigation bar.
      *         See {@link #isNavBarForcedShownLw(WindowState)}.
      */
-    public boolean getInsetHintLw(WindowManager.LayoutParams attrs, int rotation,
-            Rect outContentInsets, Rect outStableInsets, Rect outOutsets);
+    public boolean getInsetHintLw(WindowManager.LayoutParams attrs, Rect taskBounds,
+            int displayRotation, int displayWidth, int displayHeight, Rect outContentInsets,
+            Rect outStableInsets, Rect outOutsets);
 
     /**
      * Called when layout of the windows is finished.  After this function has
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 5a9a212..16187589 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -2140,6 +2140,28 @@
     }
 
     /**
+     * Tells the system that the IME decided to not show a window and the system no longer needs to
+     * use the previous IME's inset.
+     *
+     * <p>Caveat: {@link android.inputmethodservice.InputMethodService#clearInsetOfPreviousIme()}
+     * is the only expected caller of this method.  Do not depend on this anywhere else.</p>
+     *
+     * <p>TODO: We probably need to reconsider how IME should be handled.</p>
+     * @hide
+     * @param token Supplies the identifying token given to an input method when it was started,
+     * which allows it to perform this operation on itself.
+     */
+    public void clearLastInputMethodWindowForTransition(final IBinder token) {
+        synchronized (mH) {
+            try {
+                mService.clearLastInputMethodWindowForTransition(token);
+            } catch (RemoteException e) {
+                throw e.rethrowFromSystemServer();
+            }
+        }
+    }
+
+    /**
      * Force switch to the last used input method and subtype. If the last input method didn't have
      * any subtypes, the framework will simply switch to the last input method with no subtype
      * specified.
diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java
index 8318656..76d3fb1 100644
--- a/core/java/android/webkit/WebViewClient.java
+++ b/core/java/android/webkit/WebViewClient.java
@@ -403,9 +403,7 @@
      *
      * @param view The WebView that is initiating the callback.
      * @param event The key event.
-     * @deprecated This method is subsumed by the more generic onUnhandledInputEvent.
      */
-    @Deprecated
     public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
         onUnhandledInputEventInternal(view, event);
     }
@@ -427,6 +425,7 @@
      *
      * @param view The WebView that is initiating the callback.
      * @param event The input event.
+     * @removed
      */
     public void onUnhandledInputEvent(WebView view, InputEvent event) {
         if (event instanceof KeyEvent) {
diff --git a/core/java/android/widget/DatePickerCalendarDelegate.java b/core/java/android/widget/DatePickerCalendarDelegate.java
index 332e89c..0a23b34 100755
--- a/core/java/android/widget/DatePickerCalendarDelegate.java
+++ b/core/java/android/widget/DatePickerCalendarDelegate.java
@@ -24,6 +24,8 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.icu.text.DisplayContext;
+import android.icu.text.SimpleDateFormat;
 import android.os.Parcelable;
 import android.text.format.DateFormat;
 import android.text.format.DateUtils;
@@ -38,7 +40,6 @@
 import android.widget.DayPickerView.OnDaySelectedListener;
 import android.widget.YearPickerView.OnYearSelectedListener;
 
-import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Locale;
 
@@ -303,6 +304,7 @@
         // Update the date formatter.
         final String datePattern = DateFormat.getBestDateTimePattern(locale, "EMMMd");
         mMonthDayFormat = new SimpleDateFormat(datePattern, locale);
+        mMonthDayFormat.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
         mYearFormat = new SimpleDateFormat("y", locale);
 
         // Update the header text.
diff --git a/core/java/android/widget/SimpleMonthView.java b/core/java/android/widget/SimpleMonthView.java
index d8c7c35..97d834a 100644
--- a/core/java/android/widget/SimpleMonthView.java
+++ b/core/java/android/widget/SimpleMonthView.java
@@ -30,6 +30,7 @@
 import android.graphics.Paint.Style;
 import android.graphics.Rect;
 import android.graphics.Typeface;
+import android.icu.text.DisplayContext;
 import android.icu.text.SimpleDateFormat;
 import android.os.Bundle;
 import android.text.TextPaint;
@@ -184,6 +185,7 @@
     private void updateMonthYearLabel() {
         final String format = DateFormat.getBestDateTimePattern(mLocale, MONTH_YEAR_FORMAT);
         final SimpleDateFormat formatter = new SimpleDateFormat(format, mLocale);
+        formatter.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
         mMonthYearLabel = formatter.format(mCalendar.getTime());
     }
 
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index ed6ab56..a5b2a91 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -825,13 +825,31 @@
                     if (ii == null) {
                         continue;
                     }
-                    final ActivityInfo ai = ii.resolveActivityInfo(pm, 0);
+
+                    // We reimplement Intent#resolveActivityInfo here because if we have an
+                    // implicit intent, we want the ResolveInfo returned by PackageManager
+                    // instead of one we reconstruct ourselves. The ResolveInfo returned might
+                    // have extra metadata and resolvePackageName set and we want to respect that.
+                    ResolveInfo ri = null;
+                    ActivityInfo ai = null;
+                    final ComponentName cn = ii.getComponent();
+                    if (cn != null) {
+                        try {
+                            ai = pm.getActivityInfo(ii.getComponent(), 0);
+                            ri = new ResolveInfo();
+                            ri.activityInfo = ai;
+                        } catch (PackageManager.NameNotFoundException ignored) {
+                            // ai will == null below
+                        }
+                    }
+                    if (ai == null) {
+                        ri = pm.resolveActivity(ii, PackageManager.MATCH_DEFAULT_ONLY);
+                        ai = ri != null ? ri.activityInfo : null;
+                    }
                     if (ai == null) {
                         Log.w(TAG, "No activity found for " + ii);
                         continue;
                     }
-                    ResolveInfo ri = new ResolveInfo();
-                    ri.activityInfo = ai;
                     UserManager userManager =
                             (UserManager) getSystemService(Context.USER_SERVICE);
                     if (ii instanceof LabeledIntent) {
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 44e072d..216a4f1 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -90,7 +90,7 @@
     void noteWakeUp(String reason, int reasonUid);
     void noteInteractive(boolean interactive);
     void noteConnectivityChanged(int type, String extra);
-    void noteMobileRadioPowerState(int powerState, long timestampNs);
+    void noteMobileRadioPowerState(int powerState, long timestampNs, int uid);
     void notePhoneOn();
     void notePhoneOff();
     void notePhoneSignalStrength(in SignalStrength signalStrength);
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 9fdc9c4..937fc75 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -3538,7 +3538,7 @@
         mNumConnectivityChange++;
     }
 
-    public void noteMobileRadioPowerState(int powerState, long timestampNs) {
+    public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) {
         final long elapsedRealtime = mClocks.elapsedRealtime();
         final long uptime = mClocks.uptimeMillis();
         if (mMobileRadioPowerState != powerState) {
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 2b7afea..a3e41e4 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -56,6 +56,8 @@
 import java.io.InputStreamReader;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.security.Security;
+import java.security.Provider;
 import java.util.ArrayList;
 
 /**
@@ -198,6 +200,7 @@
         // Ask the WebViewFactory to do any initialization that must run in the zygote process,
         // for memory sharing purposes.
         WebViewFactory.prepareWebViewInZygote();
+        warmUpJcaProviders();
         Log.d(TAG, "end preload");
     }
 
@@ -220,6 +223,24 @@
     }
 
     /**
+     * Warm up the providers that are already registered.
+     *
+     * By doing it here we avoid that each app does it when requesting a service from the
+     * provider for the first time.
+     */
+    private static void warmUpJcaProviders() {
+        long startTime = SystemClock.uptimeMillis();
+        Trace.traceBegin(
+                Trace.TRACE_TAG_DALVIK, "Starting warm up of JCA providers");
+        for (Provider p : Security.getProviders()) {
+            p.warmUpServiceProvision();
+        }
+        Log.i(TAG, "Warmed up JCA providers in "
+                + (SystemClock.uptimeMillis()-startTime) + "ms.");
+        Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
+    }
+
+    /**
      * Performs Zygote process initialization. Loads and initializes
      * commonly used classes.
      *
@@ -549,6 +570,7 @@
     private static boolean startSystemServer(String abiList, String socketName)
             throws MethodAndArgsCaller, RuntimeException {
         long capabilities = posixCapabilitiesAsBits(
+            OsConstants.CAP_IPC_LOCK,
             OsConstants.CAP_KILL,
             OsConstants.CAP_NET_ADMIN,
             OsConstants.CAP_NET_BIND_SERVICE,
diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java
index 18f715e..a9a6364 100644
--- a/core/java/com/android/internal/util/ArrayUtils.java
+++ b/core/java/com/android/internal/util/ArrayUtils.java
@@ -162,6 +162,13 @@
     }
 
     /**
+     * Checks if given array is null or has zero elements.
+     */
+    public static boolean isEmpty(@Nullable boolean[] array) {
+        return array == null || array.length == 0;
+    }
+
+    /**
      * Checks that value is present as at least one of the elements of the array.
      * @param array the array to check in
      * @param value the value to check for
diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl
index 94c94c1..cb7c3bf 100644
--- a/core/java/com/android/internal/view/IInputMethodManager.aidl
+++ b/core/java/com/android/internal/view/IInputMethodManager.aidl
@@ -79,5 +79,7 @@
     boolean setInputMethodEnabled(String id, boolean enabled);
     void setAdditionalInputMethodSubtypes(String id, in InputMethodSubtype[] subtypes);
     int getInputMethodWindowVisibleHeight();
+    void clearLastInputMethodWindowForTransition(in IBinder token);
+
     oneway void notifyUserAction(int sequenceNumber);
 }
diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java
index 8cc8509..594581a 100644
--- a/core/java/com/android/internal/widget/FloatingToolbar.java
+++ b/core/java/com/android/internal/widget/FloatingToolbar.java
@@ -899,6 +899,8 @@
                 mOverflowPanel.setAlpha(1);
                 mOverflowPanel.setVisibility(View.VISIBLE);
                 mOverflowButton.setImageDrawable(mArrow);
+                mOverflowButton.setContentDescription(mContext.getString(
+                        R.string.floating_toolbar_close_overflow_description));
 
                 // Update x-coordinates depending on RTL state.
                 if (isRTL()) {
@@ -940,6 +942,8 @@
                 mOverflowPanel.setAlpha(0);
                 mOverflowPanel.setVisibility(View.INVISIBLE);
                 mOverflowButton.setImageDrawable(mOverflow);
+                mOverflowButton.setContentDescription(mContext.getString(
+                        R.string.floating_toolbar_open_overflow_description));
 
                 if (hasOverflow()) {
                     // Update x-coordinates depending on RTL state.
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index 07912cd..886265a 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -119,6 +119,9 @@
     // These are the components that are enabled by default as VR mode listener services.
     final ArraySet<ComponentName> mDefaultVrComponents = new ArraySet<>();
 
+    // These are the permitted backup transport service components
+    final ArraySet<ComponentName> mBackupTransportWhitelist = new ArraySet<>();
+
     public static SystemConfig getInstance() {
         synchronized (SystemConfig.class) {
             if (sInstance == null) {
@@ -176,6 +179,10 @@
         return mDefaultVrComponents;
     }
 
+    public ArraySet<ComponentName> getBackupTransportWhitelist() {
+        return mBackupTransportWhitelist;
+    }
+
     SystemConfig() {
         // Read configuration from system
         readPermissions(Environment.buildPath(
@@ -452,6 +459,23 @@
                         mDefaultVrComponents.add(new ComponentName(pkgname, clsname));
                     }
                     XmlUtils.skipCurrentTag(parser);
+                } else if ("backup-transport-whitelisted-service".equals(name) && allowFeatures) {
+                    String serviceName = parser.getAttributeValue(null, "service");
+                    if (serviceName == null) {
+                        Slog.w(TAG, "<backup-transport-whitelisted-service> without service in "
+                                + permFile + " at " + parser.getPositionDescription());
+                    } else {
+                        ComponentName cn = ComponentName.unflattenFromString(serviceName);
+                        if (cn == null) {
+                            Slog.w(TAG,
+                                    "<backup-transport-whitelisted-service> with invalid service name "
+                                    + serviceName + " in "+ permFile
+                                    + " at " + parser.getPositionDescription());
+                        } else {
+                            mBackupTransportWhitelist.add(cn);
+                        }
+                    }
+                    XmlUtils.skipCurrentTag(parser);
                 } else {
                     XmlUtils.skipCurrentTag(parser);
                     continue;
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 986a5fd..dd66b24 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -34,6 +34,7 @@
     com_google_android_gles_jni_EGLImpl.cpp \
     com_google_android_gles_jni_GLImpl.cpp.arm \
     android_app_Activity.cpp \
+    android_app_ApplicationLoaders.cpp \
     android_app_NativeActivity.cpp \
     android_app_admin_SecurityLog.cpp \
     android_opengl_EGL14.cpp \
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index c2273d6..315887d 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -181,6 +181,7 @@
 extern int register_android_app_backup_FullBackup(JNIEnv *env);
 extern int register_android_app_Activity(JNIEnv *env);
 extern int register_android_app_ActivityThread(JNIEnv *env);
+extern int register_android_app_ApplicationLoaders(JNIEnv *env);
 extern int register_android_app_NativeActivity(JNIEnv *env);
 extern int register_android_media_RemoteDisplay(JNIEnv *env);
 extern int register_android_util_jar_StrictJarFile(JNIEnv* env);
@@ -1389,6 +1390,7 @@
     REG_JNI(register_android_app_backup_FullBackup),
     REG_JNI(register_android_app_Activity),
     REG_JNI(register_android_app_ActivityThread),
+    REG_JNI(register_android_app_ApplicationLoaders),
     REG_JNI(register_android_app_NativeActivity),
     REG_JNI(register_android_util_jar_StrictJarFile),
     REG_JNI(register_android_view_InputChannel),
diff --git a/core/jni/android_app_ApplicationLoaders.cpp b/core/jni/android_app_ApplicationLoaders.cpp
new file mode 100644
index 0000000..24ee959
--- /dev/null
+++ b/core/jni/android_app_ApplicationLoaders.cpp
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016 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 <nativehelper/ScopedUtfChars.h>
+#include <nativeloader/native_loader.h>
+#include <vulkan/vulkan_loader_data.h>
+
+#include "core_jni_helpers.h"
+
+static void setupVulkanLayerPath_native(JNIEnv* env, jobject clazz,
+        jobject classLoader, jstring librarySearchPath) {
+    ScopedUtfChars layerPathChars(env, librarySearchPath);
+    vulkan::LoaderData& loader_data = vulkan::LoaderData::GetInstance();
+    loader_data.layer_path = layerPathChars.c_str();
+    loader_data.app_namespace = android::FindNamespaceByClassLoader(env, classLoader);
+}
+
+static const JNINativeMethod g_methods[] = {
+    { "setupVulkanLayerPath", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V",
+      reinterpret_cast<void*>(setupVulkanLayerPath_native) },
+};
+
+static const char* const kApplicationLoadersName = "android/app/ApplicationLoaders";
+
+namespace android
+{
+
+int register_android_app_ApplicationLoaders(JNIEnv* env) {
+    return RegisterMethodsOrDie(env, kApplicationLoadersName, g_methods, NELEM(g_methods));
+}
+
+} // namespace android
diff --git a/core/jni/android_util_MemoryIntArray.cpp b/core/jni/android_util_MemoryIntArray.cpp
index dbe8ed3..f45be12 100644
--- a/core/jni/android_util_MemoryIntArray.cpp
+++ b/core/jni/android_util_MemoryIntArray.cpp
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-
 #include "core_jni_helpers.h"
 #include <cutils/ashmem.h>
+#include <linux/ashmem.h>
 #include <sys/mman.h>
 
 namespace android {
@@ -44,11 +44,6 @@
         return -1;
     }
 
-    if (ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) {
-        jniThrowException(env, "java/io/IOException", "ashmem was purged");
-        return -1;
-    }
-
     int setProtResult = ashmem_set_prot_region(fd, PROT_READ | PROT_WRITE);
     if (setProtResult < 0) {
         jniThrowException(env, "java/io/IOException", "cannot set ashmem prot mode");
@@ -133,24 +128,13 @@
         return -1;
     }
 
-    bool unpin = false;
-
-    if (!owner) {
-        if (ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) {
-            jniThrowException(env, "java/io/IOException", "ashmem region was purged");
-            return -1;
-        }
-        unpin = true;
+    if (ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) {
+        jniThrowException(env, "java/io/IOException", "ashmem region was purged");
+        return -1;
     }
 
     std::atomic_int* value = reinterpret_cast<std::atomic_int*>(address) + index;
-    const int result = value->load(std::memory_order_relaxed);
-
-    if (unpin) {
-        ashmem_unpin_region(fd, 0, 0);
-    }
-
-    return result;
+    return value->load(std::memory_order_relaxed);
 }
 
 static void android_util_MemoryIntArray_set(JNIEnv* env, jobject clazz,
@@ -161,22 +145,13 @@
         return;
     }
 
-    bool unpin = false;
-
-    if (!owner) {
-        if (ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) {
-            jniThrowException(env, "java/io/IOException", "ashmem region was purged");
-            return;
-        }
-        unpin = true;
+    if (ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) {
+        jniThrowException(env, "java/io/IOException", "ashmem region was purged");
+        return;
     }
 
     std::atomic_int* value = reinterpret_cast<std::atomic_int*>(address) + index;
     value->store(newValue, std::memory_order_relaxed);
-
-    if (unpin) {
-        ashmem_unpin_region(fd, 0, 0);
-    }
 }
 
 static jint android_util_MemoryIntArray_size(JNIEnv* env, jobject clazz, jint fd) {
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
index 650a0fc..5b4bfe9 100644
--- a/core/jni/android_view_ThreadedRenderer.cpp
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -28,7 +28,6 @@
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 #include <EGL/egl_cache.h>
-#include <vulkan/vulkan_loader_data.h>
 
 #include <utils/Looper.h>
 #include <utils/RefBase.h>
@@ -50,7 +49,6 @@
 #include <renderthread/RenderProxy.h>
 #include <renderthread/RenderTask.h>
 #include <renderthread/RenderThread.h>
-#include <Vector.h>
 
 namespace android {
 
@@ -718,18 +716,6 @@
 }
 
 // ----------------------------------------------------------------------------
-// Layers
-// ----------------------------------------------------------------------------
-
-static void android_view_ThreadedRenderer_setupVulkanLayerPath(JNIEnv* env, jobject clazz,
-        jstring layerPath) {
-
-    const char* layerArray = env->GetStringUTFChars(layerPath, NULL);
-    vulkan::LoaderData::GetInstance().layer_path = layerArray;
-    env->ReleaseStringUTFChars(layerPath, layerArray);
-}
-
-// ----------------------------------------------------------------------------
 // JNI Glue
 // ----------------------------------------------------------------------------
 
@@ -771,8 +757,6 @@
     { "nDumpProfileData", "([BLjava/io/FileDescriptor;)V", (void*) android_view_ThreadedRenderer_dumpProfileData },
     { "setupShadersDiskCache", "(Ljava/lang/String;)V",
                 (void*) android_view_ThreadedRenderer_setupShadersDiskCache },
-    { "setupVulkanLayerPath", "(Ljava/lang/String;)V",
-                (void*) android_view_ThreadedRenderer_setupVulkanLayerPath },
     { "nAddRenderNode", "(JJZ)V", (void*) android_view_ThreadedRenderer_addRenderNode},
     { "nRemoveRenderNode", "(JJ)V", (void*) android_view_ThreadedRenderer_removeRenderNode},
     { "nDrawRenderNode", "(JJ)V", (void*) android_view_ThreadedRendererd_drawRenderNode},
diff --git a/core/res/res/layout/time_picker_header_material.xml b/core/res/res/layout/time_picker_header_material.xml
index 7019ced..8fd87b8 100644
--- a/core/res/res/layout/time_picker_header_material.xml
+++ b/core/res/res/layout/time_picker_header_material.xml
@@ -82,7 +82,10 @@
             android:id="@+id/am_label"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:padding="8dp"
+            android:paddingLeft="4dp"
+            android:paddingRight="4dp"
+            android:paddingTop="8dp"
+            android:paddingBottom="8dp"
             android:layout_marginBottom="-8dp"
             android:textAppearance="@style/TextAppearance.Material.TimePicker.AmPmLabel"
             android:lines="1"
@@ -96,7 +99,10 @@
             android:id="@+id/pm_label"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:padding="8dp"
+            android:paddingLeft="4dp"
+            android:paddingRight="4dp"
+            android:paddingTop="8dp"
+            android:paddingBottom="8dp"
             android:textAppearance="@style/TextAppearance.Material.TimePicker.AmPmLabel"
             android:lines="1"
             android:ellipsize="none"
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 2a83d88..e64d905 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2476,4 +2476,9 @@
 
     <!-- True if the device supports persisting security logs across reboots. -->
     <bool name="config_supportPreRebootSecurityLogs">false</bool>
+
+    <!-- Default files to pin via Pinner Service -->
+    <string-array translatable="false" name="config_defaultPinnerServiceFiles">
+    </string-array>
+
 </resources>
diff --git a/core/res/res/values/styles_holo.xml b/core/res/res/values/styles_holo.xml
index fdf9e31..8ca12ae 100644
--- a/core/res/res/values/styles_holo.xml
+++ b/core/res/res/values/styles_holo.xml
@@ -1172,7 +1172,8 @@
 
     <style name="Widget.Holo.Light.FastScroll" parent="Widget.Holo.FastScroll" />
 
-    <style name="Widget.Holo.SuggestionItem" parent="TextAppearance.Holo.Medium">
+    <style name="Widget.Holo.SuggestionItem">
+        <item name="textAppearance">@android:style/TextAppearance.Holo.Medium</item>
         <item name="background">@color/white</item>
         <item name="drawablePadding">8dip</item>
         <item name="gravity">start|center_vertical</item>
@@ -1188,9 +1189,9 @@
         <item name="textColor">@color/black</item>
     </style>
 
-    <style name="TextAppearance.Holo.SuggestionHighlight" parent="TextAppearance.SuggestionHighlight" />
+    <style name="TextAppearance.Holo.SuggestionHighlight" parent="@android:style/TextAppearance.SuggestionHighlight" />
 
-    <style name="Widget.Holo.SuggestionButton" parent="Widget.Holo.SuggestionItem">
+    <style name="Widget.Holo.SuggestionButton" parent="@android:style/Widget.Holo.SuggestionItem">
         <item name="background">#E9E9E9</item>
         <item name="textColor">@color/black</item>
     </style>
diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml
index 6752e3c..3ed8daa 100644
--- a/core/res/res/values/styles_material.xml
+++ b/core/res/res/values/styles_material.xml
@@ -1001,7 +1001,8 @@
         <item name="contentDescription">@string/media_route_button_content_description</item>
     </style>
 
-    <style name="Widget.Material.SuggestionItem" parent="@android:style/TextAppearance.Material.Body1">
+    <style name="Widget.Material.SuggestionItem">
+        <item name="textAppearance">@android:style/TextAppearance.Material.Body1</item>
         <item name="textColor">?attr/textColorSecondary</item>
         <item name="drawablePadding">8dip</item>
         <item name="gravity">start|center_vertical</item>
@@ -1016,11 +1017,12 @@
         <item name="textSize">14sp</item>
     </style>
 
-    <style name="TextAppearance.Material.TextSuggestionHighlight" parent="Widget.Material.SuggestionItem">
+    <style name="TextAppearance.Material.TextSuggestionHighlight">
         <item name="textColor">?attr/textColorPrimary</item>
     </style>
 
-    <style name="Widget.Material.SuggestionButton" parent="@android:style/TextAppearance.Material.Button">
+    <style name="Widget.Material.SuggestionButton">
+        <item name="textAppearance">@android:style/TextAppearance.Material.Button</item>
         <item name="textColor">?attr/colorAccent</item>
         <item name="drawablePadding">8dip</item>
         <item name="gravity">start|center_vertical</item>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 7ed293f..9b7fbd8 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2322,6 +2322,8 @@
   <java-symbol type="layout" name="floating_popup_overflow_list_item" />
   <java-symbol type="layout" name="floating_popup_overflow_image_list_item" />
   <java-symbol type="layout" name="floating_popup_overflow_button" />
+  <java-symbol type="string" name="floating_toolbar_open_overflow_description" />
+  <java-symbol type="string" name="floating_toolbar_close_overflow_description" />
   <java-symbol type="dimen" name="floating_toolbar_height" />
   <java-symbol type="dimen" name="floating_toolbar_menu_button_side_padding" />
   <java-symbol type="dimen" name="floating_toolbar_overflow_side_padding" />
@@ -2587,4 +2589,8 @@
   <java-symbol type="string" name="config_tvRemoteServicePackage" />
 
   <java-symbol type="bool" name="config_supportPreRebootSecurityLogs" />
+
+  <!-- Pinner Service -->
+  <java-symbol type="array" name="config_defaultPinnerServiceFiles" />
+
 </resources>
diff --git a/core/tests/utiltests/Android.mk b/core/tests/utiltests/Android.mk
index 3c6c32e..6d1ebb4 100644
--- a/core/tests/utiltests/Android.mk
+++ b/core/tests/utiltests/Android.mk
@@ -10,6 +10,7 @@
 
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES += src/android/util/IRemoteMemoryIntArray.aidl
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     android-support-test \
diff --git a/core/tests/utiltests/AndroidManifest.xml b/core/tests/utiltests/AndroidManifest.xml
index fecaf8e..da09894 100644
--- a/core/tests/utiltests/AndroidManifest.xml
+++ b/core/tests/utiltests/AndroidManifest.xml
@@ -43,6 +43,11 @@
 
     <application>
         <uses-library android:name="android.test.runner" />
+
+        <service android:name="android.util.RemoteMemoryIntArrayService"
+                android:process=":remote">
+        </service>
+
     </application>
 
     <instrumentation
diff --git a/core/tests/utiltests/src/android/util/IRemoteMemoryIntArray.aidl b/core/tests/utiltests/src/android/util/IRemoteMemoryIntArray.aidl
new file mode 100644
index 0000000..0a65fff2
--- /dev/null
+++ b/core/tests/utiltests/src/android/util/IRemoteMemoryIntArray.aidl
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.util;
+
+import android.util.MemoryIntArray;
+
+interface IRemoteMemoryIntArray {
+    MemoryIntArray peekInstance();
+    void create(int size, boolean clientWritable);
+    boolean isWritable();
+    int get(int index);
+    void set(int index, int value);
+    int size();
+    void close();
+    boolean isClosed();
+}
diff --git a/core/tests/utiltests/src/android/util/MemoryIntArrayTest.java b/core/tests/utiltests/src/android/util/MemoryIntArrayTest.java
index 6b31916..129e6b7 100644
--- a/core/tests/utiltests/src/android/util/MemoryIntArrayTest.java
+++ b/core/tests/utiltests/src/android/util/MemoryIntArrayTest.java
@@ -16,12 +16,22 @@
 
 package android.util;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import android.os.Parcel;
-import junit.framework.TestCase;
+import android.support.test.runner.AndroidJUnit4;
 import libcore.io.IoUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
 
-public class MemoryIntArrayTest extends TestCase {
+@RunWith(AndroidJUnit4.class)
+public class MemoryIntArrayTest {
 
+    @Test
     public void testSize() throws Exception {
         MemoryIntArray array = null;
         try {
@@ -32,6 +42,7 @@
         }
     }
 
+    @Test
     public void testGetSet() throws Exception {
         MemoryIntArray array = null;
         try {
@@ -49,6 +60,7 @@
         }
     }
 
+    @Test
     public void testWritable() throws Exception {
         MemoryIntArray array = null;
         try {
@@ -59,6 +71,7 @@
         }
     }
 
+    @Test
     public void testClose() throws Exception {
         MemoryIntArray array = null;
         try {
@@ -72,6 +85,7 @@
         }
     }
 
+    @Test
     public void testMarshalledGetSet() throws Exception {
         MemoryIntArray firstArray = null;
         MemoryIntArray secondArray = null;
@@ -99,6 +113,7 @@
         }
     }
 
+    @Test
     public void testInteractOnceClosed() throws Exception {
         MemoryIntArray array = null;
         try {
@@ -141,6 +156,7 @@
         }
     }
 
+    @Test
     public void testInteractPutOfBounds() throws Exception {
         MemoryIntArray array = null;
         try {
@@ -178,6 +194,7 @@
         }
     }
 
+    @Test
     public void testOverMaxSize() throws Exception {
         MemoryIntArray array = null;
         try {
@@ -189,4 +206,28 @@
             IoUtils.closeQuietly(array);
         }
     }
+
+    @Test
+    public void testNotMutableByUnprivilegedClients() throws Exception {
+        RemoteIntArray remoteIntArray = new RemoteIntArray(1, false);
+        try {
+            assertNotNull("Couldn't get remote instance", remoteIntArray);
+            MemoryIntArray localIntArray = remoteIntArray.peekInstance();
+            assertNotNull("Couldn't get local instance", localIntArray);
+
+            remoteIntArray.set(0, 1);
+            assertSame("Remote should be able to modify", 1, remoteIntArray.get(0));
+
+            try {
+                localIntArray.set(0, 0);
+                fail("Local shouldn't be able to modify");
+            } catch (UnsupportedOperationException e) {
+                /* expected */
+            }
+            assertSame("Local shouldn't be able to modify", 1, localIntArray.get(0));
+            assertSame("Local shouldn't be able to modify", 1, remoteIntArray.get(0));
+        } finally {
+            remoteIntArray.destroy();
+        }
+    }
 }
diff --git a/core/tests/utiltests/src/android/util/RemoteIntArray.java b/core/tests/utiltests/src/android/util/RemoteIntArray.java
new file mode 100644
index 0000000..10c325f
--- /dev/null
+++ b/core/tests/utiltests/src/android/util/RemoteIntArray.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.util;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Build;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.support.test.InstrumentationRegistry;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+final class RemoteIntArray implements ServiceConnection, Closeable {
+    private static final long BIND_REMOTE_SERVICE_TIMEOUT =
+            ("eng".equals(Build.TYPE)) ? 120000 : 10000;
+
+    private final Object mLock = new Object();
+
+    private final Intent mIntent = new Intent();
+
+    private android.util.IRemoteMemoryIntArray mRemoteInstance;
+
+    public RemoteIntArray(int size, boolean clientWritable) throws IOException, TimeoutException {
+        mIntent.setComponent(new ComponentName(InstrumentationRegistry.getContext(),
+                RemoteMemoryIntArrayService.class));
+        synchronized (mLock) {
+            if (mRemoteInstance == null) {
+                bindLocked();
+            }
+            try {
+                mRemoteInstance.create(size, clientWritable);
+            } catch (RemoteException e) {
+                throw new IOException(e);
+            }
+        }
+    }
+
+    public MemoryIntArray peekInstance() {
+        try {
+            return mRemoteInstance.peekInstance();
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public boolean isWritable() {
+        try {
+            return mRemoteInstance.isWritable();
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public int get(int index) throws IOException {
+        try {
+            return mRemoteInstance.get(index);
+        } catch (RemoteException e) {
+            throw new IOException(e);
+        }
+    }
+
+    public void set(int index, int value) throws IOException {
+        try {
+            mRemoteInstance.set(index, value);
+        } catch (RemoteException e) {
+            throw new IOException(e);
+        }
+    }
+
+    public int size() throws IOException {
+        try {
+            return mRemoteInstance.size();
+        } catch (RemoteException e) {
+            throw new IOException(e);
+        }
+    }
+
+    public void close() {
+        try {
+            mRemoteInstance.close();
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public boolean isClosed() {
+        try {
+            return mRemoteInstance.isClosed();
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private void bindLocked() throws TimeoutException {
+        if (mRemoteInstance != null) {
+            return;
+        }
+
+        InstrumentationRegistry.getContext().bindService(mIntent, this, Context.BIND_AUTO_CREATE);
+
+        final long startMillis = SystemClock.uptimeMillis();
+        while (true) {
+            if (mRemoteInstance != null) {
+                break;
+            }
+            final long elapsedMillis = SystemClock.uptimeMillis() - startMillis;
+            final long remainingMillis = BIND_REMOTE_SERVICE_TIMEOUT - elapsedMillis;
+            if (remainingMillis <= 0) {
+                throw new TimeoutException("Cannot get spooler!");
+            }
+            try {
+                mLock.wait(remainingMillis);
+            } catch (InterruptedException ie) {
+                    /* ignore */
+            }
+        }
+
+        mLock.notifyAll();
+    }
+
+    public void destroy() {
+        synchronized (mLock) {
+            if (mRemoteInstance == null) {
+                return;
+            }
+            mRemoteInstance = null;
+            InstrumentationRegistry.getContext().unbindService(this);
+        }
+    }
+
+    @Override
+    public void onServiceConnected(ComponentName name, IBinder service) {
+        synchronized (mLock) {
+            mRemoteInstance = android.util.IRemoteMemoryIntArray.Stub.asInterface(service);
+            mLock.notifyAll();
+        }
+    }
+
+    @Override
+    public void onServiceDisconnected(ComponentName name) {
+        synchronized (mLock) {
+            mRemoteInstance = null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/core/tests/utiltests/src/android/util/RemoteMemoryIntArrayService.java b/core/tests/utiltests/src/android/util/RemoteMemoryIntArrayService.java
new file mode 100644
index 0000000..35ae9a7
--- /dev/null
+++ b/core/tests/utiltests/src/android/util/RemoteMemoryIntArrayService.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.util;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+import java.io.IOException;
+
+/**
+ * Service to interact with a {@link MemoryIntArray} in another process.
+ */
+public class RemoteMemoryIntArrayService extends Service {
+    private final Object mLock = new Object();
+
+    private MemoryIntArray mArray;
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return new android.util.IRemoteMemoryIntArray.Stub() {
+
+            @Override
+            public void create(int size, boolean clientWritable) {
+                synchronized (mLock) {
+                    try {
+                        mArray = new MemoryIntArray(size, clientWritable);
+                    } catch (IOException e) {
+                        throw new IllegalStateException(e);
+                    }
+                }
+            }
+
+            @Override
+            public MemoryIntArray peekInstance() {
+                synchronized (mLock) {
+                    return mArray;
+                }
+            }
+
+            @Override
+            public boolean isWritable() {
+                synchronized (mLock) {
+                    return mArray.isWritable();
+                }
+            }
+
+            @Override
+            public int get(int index) {
+                synchronized (mLock) {
+                    try {
+                        return mArray.get(index);
+                    } catch (IOException e) {
+                        throw new IllegalStateException(e);
+                    }
+                }
+            }
+
+            @Override
+            public void set(int index, int value) {
+                synchronized (mLock) {
+                    try {
+                        mArray.set(index, value);
+                    } catch (IOException e) {
+                        throw new IllegalStateException(e);
+                    }
+                }
+            }
+
+            @Override
+            public int size() {
+                synchronized (mLock) {
+                    try {
+                        return mArray.size();
+                    } catch (IOException e) {
+                        throw new IllegalStateException(e);
+                    }
+                }
+            }
+
+            @Override
+            public void close() {
+                synchronized (mLock) {
+                    try {
+                        mArray.close();
+                    } catch (IOException e) {
+                        throw new IllegalStateException(e);
+                    }
+                }
+            }
+
+            @Override
+            public boolean isClosed() {
+                synchronized (mLock) {
+                    return mArray.isClosed();
+                }
+            }
+        };
+    }
+}
diff --git a/docs/html-intl/intl/es/preview/features/background-optimization.jd b/docs/html-intl/intl/es/preview/features/background-optimization.jd
index 3f5cf22..151b5fc 100644
--- a/docs/html-intl/intl/es/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/es/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=Optimizaciones en segundo plano
 page.metaDescription=Nuevas restricciones para difusiones implícitas.
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/es/preview/features/direct-boot.jd b/docs/html-intl/intl/es/preview/features/direct-boot.jd
index 1992e48..14a2edf 100644
--- a/docs/html-intl/intl/es/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/es/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=Arranque directo
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/es/preview/features/icu4j-framework.jd b/docs/html-intl/intl/es/preview/features/icu4j-framework.jd
index 4c5fc7b..b91a05e 100644
--- a/docs/html-intl/intl/es/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/es/preview/features/icu4j-framework.jd
@@ -1,4 +1,5 @@
 page.title=API de ICU4J del framework de Android
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/es/preview/features/multilingual-support.jd b/docs/html-intl/intl/es/preview/features/multilingual-support.jd
index 3963f98..70ee22a 100644
--- a/docs/html-intl/intl/es/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/es/preview/features/multilingual-support.jd
@@ -1,4 +1,6 @@
 page.title=Idioma y configuración regional
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/es/preview/features/security-config.jd b/docs/html-intl/intl/es/preview/features/security-config.jd
index 862fcd9..fc0a4bc 100644
--- a/docs/html-intl/intl/es/preview/features/security-config.jd
+++ b/docs/html-intl/intl/es/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=Configuración de seguridad de la red
 page.keywords=preview,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd
index 459d48f..a01a70c 100644
--- a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=Grabación de TV
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/es/preview/overview.jd b/docs/html-intl/intl/es/preview/overview.jd
index 6cd026a..f7cf9da 100644
--- a/docs/html-intl/intl/es/preview/overview.jd
+++ b/docs/html-intl/intl/es/preview/overview.jd
@@ -151,8 +151,8 @@
 </p>
 
 <ul>
-  <li><strong><a href="{@docRoot}preview/support.html">Preview 1</a></strong> (versión inicial, alpha);</li>
-  <li><strong>Preview 2</strong> (actualización gradual, beta);</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (versión inicial, alpha);</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (actualización gradual, alpha);</li>
   <li><strong>Preview 3</strong> (actualización gradual, beta);</li>
   <li><strong>Preview 4</strong> (API finales y SDK oficial, publicación en Google Play);</li>
   <li><strong>Preview 5</strong> (imágenes de sistema casi definitivas para pruebas finales);</li>
diff --git a/docs/html-intl/intl/in/preview/features/background-optimization.jd b/docs/html-intl/intl/in/preview/features/background-optimization.jd
index 2836959..ae8d973 100644
--- a/docs/html-intl/intl/in/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/in/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=Optimisasi Latar Belakang
 page.metaDescription=Pembatasan baru untuk siaran implisit.
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/in/preview/features/direct-boot.jd b/docs/html-intl/intl/in/preview/features/direct-boot.jd
index 2952bb5..622475d 100644
--- a/docs/html-intl/intl/in/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/in/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=Direct Boot
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/in/preview/features/icu4j-framework.jd b/docs/html-intl/intl/in/preview/features/icu4j-framework.jd
index 5b7547f..d50758e 100644
--- a/docs/html-intl/intl/in/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/in/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
 page.title=ICU4J Android Framework API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/in/preview/features/multilingual-support.jd b/docs/html-intl/intl/in/preview/features/multilingual-support.jd
index 0a73bcf..573b3c5 100644
--- a/docs/html-intl/intl/in/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/in/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=Bahasa dan Lokal
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/in/preview/features/security-config.jd b/docs/html-intl/intl/in/preview/features/security-config.jd
index 2eb45d4..3d7758d 100644
--- a/docs/html-intl/intl/in/preview/features/security-config.jd
+++ b/docs/html-intl/intl/in/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=Network Security Configuration
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/in/preview/features/tv-recording-api.jd b/docs/html-intl/intl/in/preview/features/tv-recording-api.jd
index 2f9ad7e..7b9ca01 100644
--- a/docs/html-intl/intl/in/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/in/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=Perekaman TV
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/in/preview/overview.jd b/docs/html-intl/intl/in/preview/overview.jd
index 4b48a22..56e963b 100644
--- a/docs/html-intl/intl/in/preview/overview.jd
+++ b/docs/html-intl/intl/in/preview/overview.jd
@@ -151,8 +151,8 @@
 </p>
 
 <ul>
-  <li><strong><a href="{@docRoot}preview/support.html">Preview 1</a></strong> (rilis pertama, alfa)</li>
-  <li><strong>Preview 2</strong> (pembaruan bertahap, beta)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (rilis pertama, alfa)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (pembaruan bertahap, alpha)</li>
   <li><strong>Preview 3</strong> (pembaruan bertahap, beta)</li>
   <li><strong>Preview 4</strong> (API final dan SDK resmi, publikasi di Play)</li>
   <li><strong>Preview 5</strong> (citra sistem hampir final untuk pengujian akhir)</li>
diff --git a/docs/html-intl/intl/ja/preview/features/background-optimization.jd b/docs/html-intl/intl/ja/preview/features/background-optimization.jd
index 278e545..a002147 100644
--- a/docs/html-intl/intl/ja/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/ja/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=バックグラウンド処理の最適化
 page.metaDescription=暗黙的なブロードキャストに対する新しい制限。
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ja/preview/features/direct-boot.jd b/docs/html-intl/intl/ja/preview/features/direct-boot.jd
index 3b3bcb1..fe0d720 100644
--- a/docs/html-intl/intl/ja/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/ja/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=ダイレクト ブート
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd
index 791a67f..c6b3d62 100644
--- a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
 page.title=ICU4J Android フレームワーク API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd b/docs/html-intl/intl/ja/preview/features/multilingual-support.jd
index b84ac60..543ecdd 100644
--- a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/ja/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=言語とロケール
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ja/preview/features/security-config.jd b/docs/html-intl/intl/ja/preview/features/security-config.jd
index 6facba6..adc99af 100644
--- a/docs/html-intl/intl/ja/preview/features/security-config.jd
+++ b/docs/html-intl/intl/ja/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=ネットワーク セキュリティ構成
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd
index a212935..775ed66 100644
--- a/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=TV の録画
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ja/preview/overview.jd b/docs/html-intl/intl/ja/preview/overview.jd
index 29340f8..1cc56fd 100644
--- a/docs/html-intl/intl/ja/preview/overview.jd
+++ b/docs/html-intl/intl/ja/preview/overview.jd
@@ -151,8 +151,8 @@
 </p>
 
 <ul>
-  <li><strong><a href="{@docRoot}preview/support.html">Preview 1</a></strong>(初回リリース、アルファ版)</li>
-  <li><strong>Preview 2</strong>(追加アップデート、ベータ版)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong>(初回リリース、アルファ版)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong>(追加アップデート、アルファ版)</li>
   <li><strong>Preview 3</strong>(追加アップデート、ベータ版)</li>
   <li><strong>Preview 4</strong>(最終版の API と正式な SDK、Google Play への公開)</li>
   <li><strong>Preview 5</strong>(最終テスト用の最終版とほぼ同じシステム イメージ)</li>
diff --git a/docs/html-intl/intl/ko/preview/features/background-optimization.jd b/docs/html-intl/intl/ko/preview/features/background-optimization.jd
index 817d216..e671017 100644
--- a/docs/html-intl/intl/ko/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/ko/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=백그라운드 최적화
 page.metaDescription=암시적 브로드캐스트에 대한 새로운 제한.
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ko/preview/features/direct-boot.jd b/docs/html-intl/intl/ko/preview/features/direct-boot.jd
index 6ffb387..4ff1354 100644
--- a/docs/html-intl/intl/ko/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/ko/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=직접 부팅
-page.keywords=preview,sdk,direct boot
+page.keywords=androidn,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd
index 77f1feb..724ee65 100644
--- a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
 page.title=ICU4J Android 프레임워크 API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd b/docs/html-intl/intl/ko/preview/features/multilingual-support.jd
index eb8e8a7..f2c9cb9 100644
--- a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/ko/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=언어 및 로케일
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ko/preview/features/security-config.jd b/docs/html-intl/intl/ko/preview/features/security-config.jd
index 505df81..8e68e49 100644
--- a/docs/html-intl/intl/ko/preview/features/security-config.jd
+++ b/docs/html-intl/intl/ko/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=네트워크 보안 구성
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd
index 73bba1f..d29260f 100644
--- a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=TV 녹화
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ko/preview/overview.jd b/docs/html-intl/intl/ko/preview/overview.jd
index a7ee3d3..41200a7 100644
--- a/docs/html-intl/intl/ko/preview/overview.jd
+++ b/docs/html-intl/intl/ko/preview/overview.jd
@@ -151,8 +151,8 @@
 </p>
 
 <ul>
-  <li><strong><a href="{@docRoot}preview/support.html">Preview 1</a></strong>(최초 릴리스, 알파)</li>
-  <li><strong>Preview 2</strong>(증분 업데이트, 베타)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong>(최초 릴리스, 알파)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong>(증분 업데이트, 알파)</li>
   <li><strong>Preview 3</strong>(증분 업데이트, 베타)</li>
   <li><strong>Preview 4</strong>(최종 API 및 공식 SDK, Play 게시)</li>
   <li><strong>Preview 5</strong>(최종 테스트를 위한 거의 최종 시스템 이미지)</li>
diff --git a/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd b/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd
index a328d89..244c188 100644
--- a/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=Otimizações em segundo plano
 page.metaDescription=Novas restrições a transmissões implícitas.
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd
index a462b23..830e389 100644
--- a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=Inicialização direta
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd b/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd
index 290ea0d..f93f82b 100644
--- a/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
 page.title=APIs de estrutura do Android para ICU4J
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd
index 77ad4b7..3a8ec3a 100644
--- a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=Idioma e localidade
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/pt-br/preview/features/security-config.jd b/docs/html-intl/intl/pt-br/preview/features/security-config.jd
index 673de0f..e5185d8 100644
--- a/docs/html-intl/intl/pt-br/preview/features/security-config.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=Configurações de segurança de rede
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd
index 95b5787..9b72f3a 100644
--- a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=Gravação para TV
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/pt-br/preview/overview.jd b/docs/html-intl/intl/pt-br/preview/overview.jd
index be4e43f..e02c8d1 100644
--- a/docs/html-intl/intl/pt-br/preview/overview.jd
+++ b/docs/html-intl/intl/pt-br/preview/overview.jd
@@ -151,8 +151,8 @@
 </p>
 
 <ul>
-  <li><strong><a href="{@docRoot}preview/support.html">Preview 1</a></strong> (versão inicial, alpha)</li>
-  <li><strong>Preview 2</strong> (atualização incremental, beta)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (versão inicial, alpha)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (atualização incremental, alpha)</li>
   <li><strong>Preview 3</strong> (atualização incremental, beta)</li>
   <li><strong>Preview 4</strong> (APIs finais e SDK oficial, publicação no Play)</li>
   <li><strong>Preview 5</strong> (imagens de sistema quase finalizadas para o teste final)</li>
diff --git a/docs/html-intl/intl/ru/preview/features/background-optimization.jd b/docs/html-intl/intl/ru/preview/features/background-optimization.jd
index a222343..b84e785 100644
--- a/docs/html-intl/intl/ru/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/ru/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=Оптимизация фоновых процессов
 page.metaDescription=Новые ограничения для неявных широковещательных сообщений.
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ru/preview/features/direct-boot.jd b/docs/html-intl/intl/ru/preview/features/direct-boot.jd
index 2bf03f6..b49624b 100644
--- a/docs/html-intl/intl/ru/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/ru/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=Режим Direct Boot
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd
index 8d92dd4..7d22408 100644
--- a/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
 page.title=API-интерфейсы ICU4J в платформе Android
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd
index f9c47d3..83dd2b4 100644
--- a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=Язык и языковой стандарт
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ru/preview/features/security-config.jd b/docs/html-intl/intl/ru/preview/features/security-config.jd
index ff3494f..de117d6 100644
--- a/docs/html-intl/intl/ru/preview/features/security-config.jd
+++ b/docs/html-intl/intl/ru/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=Конфигурация сетевой безопасности
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd
index ff1c84e..5e6ce45 100644
--- a/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=Запись ТВ
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/ru/preview/overview.jd b/docs/html-intl/intl/ru/preview/overview.jd
index e78af04..303e9ce 100644
--- a/docs/html-intl/intl/ru/preview/overview.jd
+++ b/docs/html-intl/intl/ru/preview/overview.jd
@@ -151,8 +151,8 @@
 </p>
 
 <ul>
-  <li><strong><a href="{@docRoot}preview/support.html">Предварительная версия 1</a></strong> (первоначальный выпуск, альфа-версия)</li>
-  <li><strong>Предварительная версия 2</strong> (инкрементальное обновление, бета-версия)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp1">Предварительная версия 1</a></strong> (первоначальный выпуск, альфа-версия)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp2">Предварительная версия 2</a></strong> (инкрементальное обновление, альфа-версия)</li>
   <li><strong>Предварительная версия 3</strong> (инкрементальное обновление, бета-версия)</li>
   <li><strong>Предварительная версия 4</strong> (окончательные версии API и официальный SDK, публикация в Google Play)</li>
   <li><strong>Предварительная версия 5</strong> (практически готовые системные образы для заключительного тестирования)</li>
diff --git a/docs/html-intl/intl/vi/preview/features/background-optimization.jd b/docs/html-intl/intl/vi/preview/features/background-optimization.jd
index 3fdb8d7..9554725 100644
--- a/docs/html-intl/intl/vi/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/vi/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=Tối ưu hóa Chạy ngầm
 page.metaDescription=Các hạn chế mới đối với truyền phát không biểu thị.
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/vi/preview/features/direct-boot.jd b/docs/html-intl/intl/vi/preview/features/direct-boot.jd
index b844a0f..d95d831 100644
--- a/docs/html-intl/intl/vi/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/vi/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=Khởi động Trực tiếp
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd
index 96316e9..63f6825 100644
--- a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
 page.title=API Khuôn khổ Android ICU4J
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd b/docs/html-intl/intl/vi/preview/features/multilingual-support.jd
index 21252f8..94a7127 100644
--- a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/vi/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=Ngôn ngữ và Bản địa
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/vi/preview/features/security-config.jd b/docs/html-intl/intl/vi/preview/features/security-config.jd
index 8d8bf34..797e198 100644
--- a/docs/html-intl/intl/vi/preview/features/security-config.jd
+++ b/docs/html-intl/intl/vi/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=Cấu hình Bảo mật mạng
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd b/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd
index be91c29..6dfb53e 100644
--- a/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=Ghi lại TV
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/vi/preview/overview.jd b/docs/html-intl/intl/vi/preview/overview.jd
index 0df55e3..a71bf61 100644
--- a/docs/html-intl/intl/vi/preview/overview.jd
+++ b/docs/html-intl/intl/vi/preview/overview.jd
@@ -151,8 +151,8 @@
 </p>
 
 <ul>
-  <li><strong><a href="{@docRoot}preview/support.html">Preview 1</a></strong> (phát hành lần đầu, alpha)</li>
-  <li><strong>Preview 2</strong> (bản cập nhật tăng dần, beta)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (phát hành lần đầu, alpha)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (bản cập nhật tăng dần, alpha)</li>
   <li><strong>Preview 3</strong> (bản cập nhật tăng dần, beta)</li>
   <li><strong>Preview 4</strong> (các API cuối cùng và SDK chính thức, phát hành Play)</li>
   <li><strong>Preview 5</strong> (các ảnh hệ thống gần hoàn thiện để kiểm thử cuối cùng)</li>
diff --git a/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd b/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd
index 7a12ecf..baa9bbb 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=后台优化
 page.metaDescription=隐式广播的新限制。
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd b/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd
index 176896a..07bab2e 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=直接启动
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd b/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd
index 1dd5a74..779ed8d 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
 page.title=ICU4J Android 框架 API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd b/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd
index 4c32313..0446207 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=语言和区域设置
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd
index dc09c78..2c87a3a 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=网络安全配置
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd b/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd
index 1b15879..83d6653 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=TV 录制
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd b/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd
index 3a85c45..d088381 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=背景最佳化
 page.metaDescription=對隱含式廣播的新限制。
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd
index 22865c0..a42ec11 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=直接開機
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd b/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd
index 77bbc4d..b6816b8 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
 page.title=ICU4J Android 架構 API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd b/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd
index aada78f..5570b4d 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=語言和地區設定
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html-intl/intl/zh-tw/preview/features/security-config.jd b/docs/html-intl/intl/zh-tw/preview/features/security-config.jd
index a74712a..4fe8d0d 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/security-config.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=網路安全性設定
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd b/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd
index 7d50a3c..d857477 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=電視錄製
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml
index a5a4613..4a2f232 100644
--- a/docs/html/_redirects.yaml
+++ b/docs/html/_redirects.yaml
@@ -46,7 +46,7 @@
 - from: /tools/sdk/index.html
   to: /studio/index.html
 - from: /tools/index.html
-  to: /tools-moved.html
+  to: /studio/index.html
 - from: /tools/sdk/installing.html
   to: /studio/index.html
 - from: /tools/eclipse/installing-adt.html
@@ -341,8 +341,6 @@
   to: https://www.google.com/design/spec/style/typography.html
 - from: /design/style/writing.html
   to: https://www.google.com/design/spec/style/writing.html
-- from: /wear/preview/start.html
-  to: /training/building-wearables.html
 - from: /wear/design/user-interface.html
   to: /design/wear/index.html
 - from: /wear/design/index.html
@@ -705,8 +703,18 @@
   to: /training/location/index.html
 - from: /google/gcm/adv.html
   to: /google/gcm/gcm.html
-- from: /work
-  to: /training/enterprise/index.html
+- from: /training/enterprise/index.html
+  to: /work/index.html
+- from: /training/enterprise/app-compatibility.html
+  to: /work/managed-profiles.html
+- from: /training/enterprise/app-restrictions.html
+  to: /work/app-restrictions.html
+- from: /training/enterprise/cosu.html
+  to: /work/cosu.html
+- from: /training/enterprise/device-management-policy.html
+  to: /work/device-management-policy.html
+- from: /training/enterprise/work-policy-ctrl.html
+  to: https://developers.google.com/android/work/build-dpc
 - from: /distribute/tools/promote/badge-files.html
   to: https://play.google.com/intl/en_us/badges/
 - from: /google/gcm/...
@@ -1069,6 +1077,8 @@
   to: /studio/test/index.html
 - from: /tools/testing/testing_otheride.html
   to: /studio/test/command-line.html
+- from: /tools/help/android.html
+  to: /studio/tools/help/android.html
 
 # Files moved out of studio
 - from: /tools/sdk/ndk/...
@@ -1079,8 +1089,6 @@
 # Removed files
 - from: /tools/help/project-mgmt.html
   to: /studio/projects/index.html
-- from: /tools/help/android.html
-  to: /studio/projects/index.html
 - from: /tools/help/hprof-conv.html
   to: /studio/profile/investigate-ram.html
 - from: /tools/studio/code-tools.html
@@ -1090,9 +1098,9 @@
 - from: /tools/help/avd-manager.html
   to: /studio/run/managing-avds.html
 - from: /tools/devices/managing-avds-cmdline.html
-  to: /studio/run/managing-avds.html
+  to: /studio/tools/help/android.html
 - from: /tools/projects/projects-cmdline.html
-  to: /studio/projects/index.html
+  to: /studio/tools/help/android.html
 - from: /tools/help/dmtracedump.html
   to: /studio/profile/traceview.html
 - from: /tools/help/lint.html
@@ -1134,7 +1142,6 @@
 - from: /tools/revisions/index.html
   to: /studio/releases/index.html
 
-
 # Just incase something was missed, go to intro page
 - from: /tools/...
   to: /studio/intro/index.html
diff --git a/docs/html/about/start.jd b/docs/html/about/start.jd
index 4658141..a09c746 100644
--- a/docs/html/about/start.jd
+++ b/docs/html/about/start.jd
@@ -64,6 +64,6 @@
 
 <h2>Go!</h2>
 <p>Get started by installing <a
-href="{@docRoot}sdk/index.html">Android Studio</a>&mdash;the official IDE for Android development,
+href="{@docRoot}studio/index.html">Android Studio</a>&mdash;the official IDE for Android development,
 which includes the Android SDK tools. Then when you're ready to begin coding, follow the training
 for <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a>.</p>
\ No newline at end of file
diff --git a/docs/html/about/versions/android-1.5.jd b/docs/html/about/versions/android-1.5.jd
index 522f855..775561b 100644
--- a/docs/html/about/versions/android-1.5.jd
+++ b/docs/html/about/versions/android-1.5.jd
@@ -30,11 +30,6 @@
 Differences Report &raquo;</a> </li>
 </ol>
 
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
-</ol>
-
 </div>
 </div>
 
@@ -54,9 +49,7 @@
 
 <p>To get started developing or testing against the Android
 {@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your Android 1.6 or later SDK. For more information,
-see <a href="{@docRoot}sdk/exploring.html">Exploring the
-SDK</a>.</p>
+download the platform into your Android 1.6 or later SDK.</p>
 
 
 <h2 id="features">Platform Highlights</h2>
diff --git a/docs/html/about/versions/android-1.6.jd b/docs/html/about/versions/android-1.6.jd
index dc30b49..ffca6b6 100755
--- a/docs/html/about/versions/android-1.6.jd
+++ b/docs/html/about/versions/android-1.6.jd
@@ -30,11 +30,6 @@
 Differences Report &raquo;</a> </li>
 </ol>
 
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
-</ol>
-
 </div>
 </div>
 
@@ -55,9 +50,7 @@
 
 <p>To get started developing or testing against the Android
 {@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the latest Android 1.6 platform into your Android 1.6 or later SDK. For
-more information, see <a href="{@docRoot}sdk/exploring.html">Exploring the
-SDK</a>.</p>
+download the latest Android 1.6 platform into your Android 1.6 or later SDK.</p>
 
 
 <h2 id="features">Platform Highlights</h2>
diff --git a/docs/html/about/versions/android-2.0.1.jd b/docs/html/about/versions/android-2.0.1.jd
index 2974152..48f7ae8 100644
--- a/docs/html/about/versions/android-2.0.1.jd
+++ b/docs/html/about/versions/android-2.0.1.jd
@@ -30,11 +30,6 @@
   </li>
   </ol>
 
-  <h2>See Also</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
-  </ol>
-
 </div>
 </div>
 
@@ -56,9 +51,7 @@
 
 <p>To get started developing or testing against the Android
 {@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your Android 1.6 or later SDK. For more information,
-see <a href="{@docRoot}sdk/exploring.html">Exploring the
-SDK</a>.</p>
+download the platform into your Android 1.6 or later SDK.</p>
 
 
 <h2 id="features">Platform Highlights</h2>
diff --git a/docs/html/about/versions/android-2.0.jd b/docs/html/about/versions/android-2.0.jd
index 5c0d3dc..329af3c 100644
--- a/docs/html/about/versions/android-2.0.jd
+++ b/docs/html/about/versions/android-2.0.jd
@@ -25,11 +25,6 @@
         </ol></li>
   </ol>
 
-  <h2>See Also</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
-  </ol>
-
 </div>
 </div>
 
@@ -49,9 +44,7 @@
 
 <p>To get started developing or testing against the Android
 {@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your SDK. For more information,
-see <a href="{@docRoot}sdk/exploring.html">Exploring the
-SDK</a>.</p>
+download the platform into your SDK.</p>
 
 
 <h2 id="features">Platform Highlights</h2>
diff --git a/docs/html/about/versions/android-2.1.jd b/docs/html/about/versions/android-2.1.jd
index 02dec7e..ce6f1b2 100644
--- a/docs/html/about/versions/android-2.1.jd
+++ b/docs/html/about/versions/android-2.1.jd
@@ -30,11 +30,6 @@
 Differences Report &raquo;</a> </li>
 </ol>
 
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
-</ol>
-
 </div>
 </div>
 
@@ -55,9 +50,7 @@
 
 <p>To get started developing or testing against the Android
 {@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your SDK. For more information,
-see <a href="{@docRoot}sdk/exploring.html">Exploring the
-SDK</a>.</p>
+download the platform into your SDK.</p>
 
 
 <h2 id="features">Platform Highlights</h2>
diff --git a/docs/html/about/versions/android-2.2.jd b/docs/html/about/versions/android-2.2.jd
index bd0f071e..84d5c74 100644
--- a/docs/html/about/versions/android-2.2.jd
+++ b/docs/html/about/versions/android-2.2.jd
@@ -26,11 +26,6 @@
 Differences Report &raquo;</a> </li>
 </ol>
 
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
-</ol>
-
 </div>
 </div>
 
diff --git a/docs/html/about/versions/android-5.0.jd b/docs/html/about/versions/android-5.0.jd
index 1bdd2d6..b77df17 100644
--- a/docs/html/about/versions/android-5.0.jd
+++ b/docs/html/about/versions/android-5.0.jd
@@ -136,7 +136,7 @@
 
 <h3 id="Start">Start developing</h3>
 
-<p>To start building apps for Android 5.0, you must first <a href="{@docRoot}sdk/index.html">get
+<p>To start building apps for Android 5.0, you must first <a href="{@docRoot}studio/index.html">get
 the Android SDK</a>. Then use the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>
 to download the Android 5.0 SDK Platform and System Images.</p>
 
diff --git a/docs/html/about/versions/marshmallow/android-6.0.jd b/docs/html/about/versions/marshmallow/android-6.0.jd
index 779ecf4..240b080 100644
--- a/docs/html/about/versions/marshmallow/android-6.0.jd
+++ b/docs/html/about/versions/marshmallow/android-6.0.jd
@@ -56,7 +56,7 @@
 
 <h3 id="Start">Start developing</h3>
 
-<p>To start building apps for Android 6.0, you must first <a href="{@docRoot}sdk/index.html">get
+<p>To start building apps for Android 6.0, you must first <a href="{@docRoot}studio/index.html">get
 the Android SDK</a>. Then use the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>
 to download the Android 6.0 SDK Platform and System Images.</p>
 
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index de38f3d..bd933f4 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -9,61 +9,41 @@
 excludeFromSuggestions=true
 @jd:body
 
-<section class="dac-expand dac-hero dac-section-light" style="background:#FFE57F">
+
+ <section class="dac-expand dac-hero dac-light">
   <div class="wrap">
     <div class="cols dac-hero-content">
       <div class="col-1of2 col-push-1of2 dac-hero-figure">
-        <!--
-        <iframe width="448" height="252"
-            src="//www.youtube.com/embed/Z98hXV9GmzY?autohide=1&amp;showinfo=0"
-            frameborder="0" allowfullscreen=""
-            style="float: right;"></iframe>
-        -->
-        <a href="{@docRoot}sdk/index.html">
-        <img class="dac-hero-image" src="{@docRoot}images/tools/studio/studio-feature-instant-run_2x.png" />
-        </a>
+        <img class="dac-hero-image" src="/images/develop/hero_image_studio5_2x.png" srcset="/images/develop/hero_image_studio5.png 1x, /images/develop/hero_image_studio5_2x.png 2x">
       </div>
-      <div class="col-1of2 col-pull-1of2">
+      <div class="col-1of2 col-pull-1of2" style="margin-bottom:40px">
         <h1 class="dac-hero-title">
-            <a style="color:inherit" href="{@docRoot}sdk/index.html">
-            Android Studio 2.0,<br>now available!</a></h1>
-        <p class="dac-hero-description">
-        The latest version of Android Studio is the biggest update yet.
-        It includes new features like <strong>Instant Run</strong>, which
-        dramatically speeds up your edit, build, and run cycles, keeping
-        you "in the flow."</p>
-        </p>
-        <div class="cols">
-          <div class="col-1of2">
-            <a class="dac-hero-cta" href="{@docRoot}sdk/index.html">
-              <span class="dac-sprite dac-auto-chevron"></span>
-              Get Android Studio
-            </a><br>
-            <a class="dac-hero-cta" href="{@docRoot}training/index.html">
-              <span class="dac-sprite dac-auto-chevron"></span>
-              Build your first app
-            </a>
-          </div>
-          <div class="col-1of2">
-            <a class="dac-hero-cta" href="{@docRoot}guide/index.html">
-              <span class="dac-sprite dac-auto-chevron"></span>
-              Learn about Android
-            </a><br>
-            <a class="dac-hero-cta" href="{@docRoot}samples/index.html">
-              <span class="dac-sprite dac-auto-chevron"></span>
-              See sample projects
-            </a>
-          </div>
+            <a style="color:inherit" href="{@docRoot}studio/index.html">
+            Android Studio 2.1,<br>now available!</a></h1>
+
+<p class="dac-hero-description">Android Studio provides the fastest tools for
+building apps on every type of Android device.</p>
+
+<p class="dac-hero-description">The latest version, Android Studio 2.1, adds
+support for N Preview development on top of the faster Android Emulator and
+Instant Run feature from 2.0.</p>
+
+<p style="margin-top:24px">
+    <a class="dac-hero-cta" href="{@docRoot}studio/index.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Get Android Studio
+    </a>
+  &nbsp;&nbsp;&nbsp;&nbsp;<wbr>
+    <a class="dac-hero-cta" href="{@docRoot}studio/releases/index.html">
+    <span class="dac-sprite dac-auto-chevron"></span>
+    See the release notes</a>
+</p>
+
       </div>
     </div>
-    <!--<div class="dac-section dac-small">
-      <div class="resource-widget resource-flow-layout col-16"
-           data-query="collection:develop/landing/mainlinks"
-           data-cardSizes="6x2"
-           data-maxResults="6"></div>
-    </div>-->
   </div>
 </section>
+
 <div class="wrap dac-offset-parent">
   <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
     <i class="dac-sprite dac-arrow-down-gray"></i>
@@ -89,10 +69,9 @@
   <div class="resource-widget resource-flow-layout col-16"
        data-query="collection:develop/landing/tools"
        data-cardSizes="6x6"
-       data-maxResults="15"
+       data-maxResults="24"
        data-initial-results="3"
-       data-items-per-page="6"
-       data-sortOrder="random"></div>
+       data-items-per-page="6"></div>
 </div></section>
 
 <section class="dac-section dac-gray"><div class="wrap">
diff --git a/docs/html/distribute/engage/_book.yaml b/docs/html/distribute/engage/_book.yaml
index ef86a2a..87e819a 100644
--- a/docs/html/distribute/engage/_book.yaml
+++ b/docs/html/distribute/engage/_book.yaml
@@ -17,6 +17,9 @@
 - title: Encourage Competition
   path: /distribute/engage/game-services.html
 
+- title: Engage Users in Their Language
+  path: /distribute/engage/translate.html
+
 - title: Understand User Behavior
   path: /distribute/engage/analytics.html
 
diff --git a/docs/html/distribute/engage/engage_toc.cs b/docs/html/distribute/engage/engage_toc.cs
index e86623f..4f3e0af 100644
--- a/docs/html/distribute/engage/engage_toc.cs
+++ b/docs/html/distribute/engage/engage_toc.cs
@@ -38,6 +38,12 @@
   </li>
   <li class="nav-section">
     <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs
+        var:toroot?>distribute/engage/translate.html">
+        <span class="en">Engage Users in Their Language</span></a>
+    </div>
+  </li>
+  <li class="nav-section">
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs
         var:toroot?>distribute/engage/analytics.html">
         <span class="en">Understand User Behavior</span></a>
     </div>
diff --git a/docs/html/distribute/engage/translate.jd b/docs/html/distribute/engage/translate.jd
new file mode 100644
index 0000000..3d391a3
--- /dev/null
+++ b/docs/html/distribute/engage/translate.jd
@@ -0,0 +1,91 @@
+page.title=Engage Users in Their Language
+page.metaDescription=Use the App Translation Service to maximize the amount of people who can install and engage with your app.
+page.tags="app translation service, translation, localization"
+page.image=/images/gp-listing-3.jpg
+
+@jd:body
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-listing-3.jpg" style="width:512px;">
+</div>
+<p>
+  Translating your app's store description, user interface text, and in-app
+  purchase products into multiple languages maximizes the amount of people
+  who can install, engage with, and recommend it.
+</p>
+
+<div class="headerLine">
+  <h2 id="before-translation">Before You Translate</h2>
+</div>
+
+<p>
+  Translation is one of the final steps in localization. For more detailed
+  information about the localization process, refer to the following documentation:
+</p>
+
+<ul>
+  <li>
+    <a href="https://developer.android.com/distribute/tools/localization-checklist.html">
+    Localization Checklist</a>
+  </li>
+
+  <li>
+    <a href="http://developer.android.com/guide/topics/resources/localization.html">Localizing
+    with Resources</a>
+  </li>
+
+  <li>
+    <a href="http://developer.android.com/training/basics/supporting-devices/languages.html">
+    Supporting Different Languages</a>
+  </li>
+</ul>
+
+<div class="headerLine">
+  <h2 id="translate">How to Translate</h2>
+</div>
+
+<p>
+  While translating your store listing and universal app campaign ads (if you have any) can make
+  your app more discoverable, providing a translated user interface and in-app purchase products
+  can maximize user engagement and retention. Depending on your budget, there are several
+  options available:
+</p>
+
+<ul>
+  <li>
+    <strong>Use the Google Play App Translation Service</strong>: For your convenience, Google Play
+    provides an <a href="https://support.google.com/l10n/answer/6359997">App Translation Service</a>
+    that is integrated directly into the <a href="https://support.google.com/l10n/answer/6341304">
+    Developer Console</a> and <a href="https://support.google.com/l10n/answer/6341928">Android
+    Studio</a>. Using this professional, human service, you can order translations for your app,
+    store listing text, in-app purchase products, and universal app campaign ads all in one go.
+    You’ll get instant estimates from multiple vendors, all with the convenience of ordering and
+    paying online.
+  </li>
+
+  <li>
+    <strong>Do it yourself</strong>: If you or your colleagues know the target languages, you can
+    translate everything yourself using any text editor, or you can use the
+    <a href="http://tools.android.com/recent/androidstudio087released">Android Studio Translation
+    Editor</a>.
+  </li>
+
+  <li>
+    <strong>Use a third-party translation service</strong>: You can use a translation service
+    that is offered by one of the many translation companies available online.
+  </li>
+</ul>
+
+<p style="clear:both">
+</p>
+
+<div class="headerLine">
+  <h2 id="related-resources">Related Resources</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/engage/translate"
+  data-sortorder="-timestamp"
+  data-cardsizes="9x3"
+  data-maxresults="6">
+</div>
diff --git a/docs/html/distribute/essentials/quality/billions.jd b/docs/html/distribute/essentials/quality/billions.jd
index 58f15a3..7042143 100644
--- a/docs/html/distribute/essentials/quality/billions.jd
+++ b/docs/html/distribute/essentials/quality/billions.jd
@@ -585,6 +585,16 @@
    Implementing a Preferences Activity</a>.</li>
  </ul>
 
+
+
+<h3 class="rel-resources clearfloat">Related resources</h3>
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/billionsquality/cost"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
 <!-- consumption -->
 <div class="headerLine">
   <h2 id="consumption">Battery Consumption</h2>
diff --git a/docs/html/distribute/googleplay/work/about.jd b/docs/html/distribute/googleplay/work/about.jd
index a31bca2..79e8a89 100644
--- a/docs/html/distribute/googleplay/work/about.jd
+++ b/docs/html/distribute/googleplay/work/about.jd
@@ -52,10 +52,13 @@
 <h3 id="design">Develop a great app for business</h3>
 
 <ul>
-  <li>Follow best practices for security and manage user data properly. Businesses
-  are more conscious of data security and employee productivity, especially when it
-  comes to features that share information with other services.</li>
-  <li>Support the <a href="{@docRoot}training/enterprise/app-restrictions.html">App Configuration framework</a> to let an administrator remotely configure app settings such as:
+  <li>Follow best practices for security and manage user data
+  properly. Businesses are more conscious of data security and
+  employee productivity, especially when it comes to features that
+  share information with other services.</li>
+  <li>Support the <a href="{@docRoot}work/app-restrictions.html"
+    >App Configuration framework</a> to let an administrator remotely
+    configure app settings such as:
     <ul>
       <li>Server address and protocol settings</li>
       <li>The ability to switch features on and off</li>
@@ -65,11 +68,15 @@
   </li>
   <li>Request the minimum permissions that your app needs.</li>
   <li>Make sure communication to your backend and data in your backend is secure.</li>
-  <li>Implement authorization policies that will minimize the number of your employees that can access user data.</li>
-  <li><a href={@docRoot}training/enterprise/app-compatibility.html>Offer compatibility with work
-  profile</a> and test that with the <a href="{@docRoot}samples/BasicManagedProfile/index.html"
-  >BasicManagedProfile sample app</a>.</li>
-  <li>Support <a href="{@docRoot}training/enterprise/app-restrictions.html">app restrictions</a> so that IT admins can remotely configure your app through leading EMM solutions.</li>
+  <li>Implement authorization policies that will minimize the number of your
+    employees that can access user data.</li>
+  <li><a href="{@docRoot}work/managed-profiles.html">Offer compatibility with work
+    profile</a> and test that with the
+    <a href="{@docRoot}samples/BasicManagedProfile/index.html"
+    >BasicManagedProfile sample app</a>.</li>
+  <li>Support <a href="{@docRoot}work/app-restrictions.html">app restrictions</a>
+    so that IT admins can remotely configure your app through leading
+    EMM solutions.</li>
 </ul>
 
 <h3 id="support">Provide support and maintenance</h3>
diff --git a/docs/html/distribute/tools/localization-checklist.jd b/docs/html/distribute/tools/localization-checklist.jd
index 1497c36..da483ad 100644
--- a/docs/html/distribute/tools/localization-checklist.jd
+++ b/docs/html/distribute/tools/localization-checklist.jd
@@ -530,19 +530,17 @@
 </h4>
 
 <p>
-  Google Play App Translation Service can help you quickly find and purchase
-  translations of your app. In the Developer Console, you can browse a list of
-  third-party vendors who are pre-qualified by Google to offer high-quality
-  translation at competitive prices. You can upload the strings you want
-  translated, select the languages you want to translate into, and select your
-  translation vendor based on time and price.
+  The <a href="https://support.google.com/l10n/answer/6359997">App Translation
+  Service</a> can help you quickly purchase translations of your app. In the
+  Developer Console and Android Studio, you get instant quotes from a list of
+  third-party translation vendors. Beyond the app UI strings, your order can
+  include translations for Play Store text, IAP names, and ad text.
 </p>
 
 <p>
-  Once you've purchased translations, you'll receive an email from your vendor.
-  Your translations are a direct business agreement between you and your
-  vendor; you'll need to work directly with the vendor to manage the
-  translation process and deliverables and resolve any support issues.
+  Your translation order is a direct agreement between you and your chosen
+  vendor. The vendor will work directly with you to provide clarification and
+  resolve any issues during the translation process.
 </p>
 
 <div>
@@ -736,10 +734,12 @@
     </h2>
 
     <p>
-      You can use the App Translation service on Google Play to translate your
-      store listing. Prepare an XML file with your store listing information
-      and upload just as you would upload the strings.xml file (see <a href=
-      "#gp-trans">Purchase professional translations</a>)
+      You can use the <a href=
+      "https://support.google.com/l10n/answer/6359997">App Translation
+      Service</a> on Google Play to translate your store listing. You can use
+      your existing published store listing text as the source or edit it
+      online before placing your order (see <a href="#gp-trans">Purchase
+      professional translations</a>).
     </p>
   </div>
 </div>
diff --git a/docs/html/distribute/users/expand-to-new-markets.jd b/docs/html/distribute/users/expand-to-new-markets.jd
index df1a0fb..26c83c9 100644
--- a/docs/html/distribute/users/expand-to-new-markets.jd
+++ b/docs/html/distribute/users/expand-to-new-markets.jd
@@ -116,12 +116,20 @@
   Localization</a> section of the Localization Checklist.
 </p>
 
+<h3>
+  Purchase professional translations through Google Play
+</h3>
+
 <p>
-  <strong>Google Play App Translation Service</strong> can help you quickly
-  find and purchase translations of your apps. In the <a href=
-  "https://play.google.com/apps/publish/">Developer Console</a>, you can browse
-  a list of third-party vendors who are pre-qualified by Google to offer
-  high-quality professional translations at competitive prices.
+  The <a href="https://support.google.com/l10n/answer/6359997">App Translation
+  Service</a> can help you quickly purchase translations of your app. In the
+  <a href="https://support.google.com/l10n/answer/6341304">Developer
+  Console</a> and <a href=
+  "https://support.google.com/l10n/answer/6341928">Android Studio</a>, you can
+  browse a list of third-party vendors who are prequalified by Google to offer
+  high-quality translations at competitive prices. Beyond the app UI strings,
+  you can request translations for Play Store text, in-app purchase products,
+  and universal app campaign ads, all in one go.
 </p>
 
 <img src="{@docRoot}images/gp-listing-3.jpg" style="padding:8px 0">
diff --git a/docs/html/google/play/expansion-files.jd b/docs/html/google/play/expansion-files.jd
index 6d1de7e..3c01684 100755
--- a/docs/html/google/play/expansion-files.jd
+++ b/docs/html/google/play/expansion-files.jd
@@ -450,7 +450,7 @@
 download two packages from the SDK Manager and add the appropriate libraries to your
 application.</p>
 
-<p>First, open the <a href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>
+<p>First, open the <a href="{@docRoot}studio/intro/update.html">Android SDK Manager</a>
 (<strong>Tools > Android > SDK Manager</strong>), and under
 <em>Appearance & Behavior > System Settings > Android SDK</em>, select
 the <em>SDK Tools</em> tab to select and download:</p>
diff --git a/docs/html/google/play/licensing/setting-up.jd b/docs/html/google/play/licensing/setting-up.jd
index f752182..352b79b 100755
--- a/docs/html/google/play/licensing/setting-up.jd
+++ b/docs/html/google/play/licensing/setting-up.jd
@@ -250,9 +250,8 @@
 <code>&lt;<em>sdk</em>&gt;/extras/google/market_licensing/sample/</code>&nbsp;&nbsp;(the example
 application)</p>
 
-<p>If you aren't familiar with how to download packess into your SDK, see the
-<a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>
-document. </p>
+<p>If you aren't familiar with how to download packages into your SDK, learn how to
+<a href="{@docRoot}studio/intro/update.html">update the SDK tools</a>. </p>
 
 
 <h3 id="lvl-setup">Setting Up the Licensing Verification Library</h3>
@@ -324,8 +323,7 @@
 </ol>
 
 <p>For more information about how to work with library modules in Android Studio, see
-<a href="{@docRoot}sdk/installing/create-project.html#SettingUpLibraryModule">Managing Projects from
-Android Studio</a>.</p>
+<a href="{@docRoot}studio/projects/android-library.html">Create an Android Library</a>.</p>
 
 
 <h4>Copying the LVL sources to your application</h4>
diff --git a/docs/html/guide/practices/optimizing-for-3.0.jd b/docs/html/guide/practices/optimizing-for-3.0.jd
index 4f3d0f2..8d07eb9 100644
--- a/docs/html/guide/practices/optimizing-for-3.0.jd
+++ b/docs/html/guide/practices/optimizing-for-3.0.jd
@@ -105,11 +105,8 @@
 <p>To start testing and developing your application on Android 3.0, set up your existing Android
 SDK with the new platform:</p>
 
-<p>(If you don't have an existing Android SDK, <a href="{@docRoot}sdk/index.html">download the
-SDK starter package now</a>.)</p>
-
 <ol>
-  <li><a href="{@docRoot}sdk/exploring.html#launching">Launch the Android SDK
+  <li><a href="{@docRoot}studio/intro/update.html#launching">Launch the Android SDK
 Manager</a> and install the following:
     <ul>
       <li>SDK Platform Android 3.0</li>
@@ -421,7 +418,7 @@
 <p>Many of the new features and APIs that are described above and in the <a
 href="{@docRoot}about/versions/android-3.0.html#api">Android 3.0 Platform</a> document also have accompanying
 samples that allow you to preview the effects and can help you understand how to use them. To get
-the samples, download them from the SDK repository <a href="{@docRoot}sdk/exploring.html"
+the samples, download them from the SDK repository <a href="{@docRoot}studio/intro/update.html"
 >using the Android SDK Manager</a>. After downloading the samples ("Samples for SDK API
 11"), you can find them in <code>&lt;sdk_root&gt;/samples/android-11/</code>. The following list
 provides links to the browsable source code for some of the samples:</p>
diff --git a/docs/html/guide/topics/admin/device-admin.jd b/docs/html/guide/topics/admin/device-admin.jd
index 45bd76a..e2fef04 100644
--- a/docs/html/guide/topics/admin/device-admin.jd
+++ b/docs/html/guide/topics/admin/device-admin.jd
@@ -48,11 +48,12 @@
 provided by the Device Administration API to provide stronger security for
 employee devices that are powered by Android.</p>
 
-<p class="note"><strong>Note</strong> For information on building a Work Policy
-Controller for Android for Work deployments, see <a
-href="{@docRoot}training/enterprise/work-policy-ctrl.html">Building a Work
-Policy Controller</a>.</p>
-
+<p class="note">
+  <strong>Note</strong> For information on building a Work Policy
+  Controller for Android for Work deployments, see
+  <a href="https://developers.google.com/android/work/build-dpc"
+  >Build a Device Policy Controller</a>.
+</p>
 
 <h2 id="overview">Device Administration API Overview</h2>
 
diff --git a/docs/html/guide/topics/manifest/permission-element.jd b/docs/html/guide/topics/manifest/permission-element.jd
index 4bb5f6a..d8dbf40 100644
--- a/docs/html/guide/topics/manifest/permission-element.jd
+++ b/docs/html/guide/topics/manifest/permission-element.jd
@@ -10,70 +10,80 @@
             android:<a href="#label">label</a>="<i>string resource</i>"
             android:<a href="#nm">name</a>="<i>string</i>"
             android:<a href="#pgroup">permissionGroup</a>="<i>string</i>"
-            android:<a href="#plevel">protectionLevel</a>=["normal" | "dangerous" | 
+            android:<a href="#plevel">protectionLevel</a>=["normal" | "dangerous" |
                                      "signature" | "signatureOrSystem"] /&gt;</pre></dd>
 
 <dt>contained in:</dt>
-<dd><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a></code></dd>
+<dd><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"
+  >&lt;manifest&gt;</a></code></dd>
 
 <dt>description:</dt>
-<dd itemprop="description">Declares a security permission that can be used to limit access
-to specific components or features of this or other applications.  
-See the <a href="{@docRoot}guide/topics/manifest/manifest-intro.html#perms">Permissions</a>
-section in the introduction,
-and the <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> 
-document for more information on how permissions work.</dd>
+<dd itemprop="description">Declares a security permission that can be used to
+limit access to specific components or features of this or other applications.
+See the <a href="{@docRoot}guide/topics/manifest/manifest-intro.html#perms"
+>Permissions</a> section in the introduction, and the <a
+href="{@docRoot}guide/topics/security/security.html">Security and
+Permissions</a> document for more information on how permissions work.</dd>
 
 <dt>attributes:</dt>
 <dd><dl class="attr">
 <dt><a name="desc"></a>{@code android:description}</dt>
-<dd>A user-readable description of the permission, longer and more 
-informative than the label.  It may be displayed to explain the 
-permission to the user &mdash; for example, when the user is asked 
+<dd>A user-readable description of the permission, longer and more
+informative than the label.  It may be displayed to explain the
+permission to the user &mdash; for example, when the user is asked
 whether to grant the permission to another application.
 
 <p>
-This attribute must be set as a reference to a string resource; 
+This attribute must be set as a reference to a string resource;
 unlike the {@code label} attribute, it cannot be a raw string.
 </p></dd>
 
 <dt><a name="icon"></a>{@code android:icon}</dt>
-<dd>A reference to a drawable resource for an icon that represents the 
+<dd>A reference to a drawable resource for an icon that represents the
 permission.</dd>
 
 <dt><a name="label"></a>{@code android:label}</dt>
-<dd>A name for the permission, one that can be displayed to users. 
+<dd>A name for the permission, one that can be displayed to users.
 
 <p>
-As a convenience, the label can be directly set 
-as a raw string while you're developing the application.  However, 
-when the application is ready to be published, it should be set as a 
-reference to a string resource, so that it can be localized like other 
+As a convenience, the label can be directly set
+as a raw string while you're developing the application.  However,
+when the application is ready to be published, it should be set as a
+reference to a string resource, so that it can be localized like other
 strings in the user interface.
 </p></dd>
 
 <dt><a name="nm"></a>{@code android:name}</dt>
-<dd>The name of the permission.  This is the name that will be used in 
-code to refer to the permission &mdash; for example, in a 
-<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code> element and the
+<dd>The name of the permission.  This is the name that will be used in
+code to refer to the permission &mdash; for example, in a
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"
+  >&lt;uses-permission&gt;</a></code> element and the
 {@code permission} attributes of application components.
 
-<p>
-The name must be unique, so it should use Java-style scoping &mdash; 
-for example, "{@code com.example.project.PERMITTED_ACTION}".
-</p></dd>
+
+<p class="note">
+  <strong>Note:</strong> The system does not allow multiple packages to declare
+  a permission with the same name, unless all the packages are signed with the
+  same certificate. If a package declares a permission, the system does not permit
+  the user to install other packages with the same permission name, unless
+  those packages are signed with the same certificate as the first package. To
+  avoid naming collisions, we recommend using reverse-domain-style naming for custom
+  permissions, for example <code>com.example.myapp.ENGAGE_HYPERSPACE</code>.
+</p>
+</dd>
 
 <dt><a name="pgroup"></a>{@code android:permissionGroup}</dt>
-<dd>Assigns this permission to a group.  The value of this attribute is 
-the name of the group, which must be declared with the 
-<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html">&lt;permission-group&gt;</a></code> element in this 
+<dd>Assigns this permission to a group.  The value of this attribute is
+the name of the group, which must be declared with the
+<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"
+  >&lt;permission-group&gt;</a></code> element in this
 or another application.  If this attribute is not set, the permission
 does not belong to a group.</dd>
 
 <dt><a name="plevel"></a>{@code android:protectionLevel}</dt>
 <dd>Characterizes the potential risk implied in the permission and
 indicates the procedure the system should follow when determining
-whether or not to grant the permission to an application requesting it. 
+whether or not to grant the permission to an application requesting it.
 The value can be set to one of the following strings:
 
 <table>
@@ -82,9 +92,9 @@
    <th>Meaning</th>
 </tr><tr>
    <td>"{@code normal}"</td>
-   <td>The default value.  A lower-risk permission that gives requesting 
-       applications access to isolated application-level features, with 
-       minimal risk to other applications, the system, or the user.  
+   <td>The default value.  A lower-risk permission that gives requesting
+       applications access to isolated application-level features, with
+       minimal risk to other applications, the system, or the user.
        The system automatically grants this type
        of permission to a requesting application at installation, without
        asking for the user's explicit approval (though the user always
@@ -109,11 +119,11 @@
        asking for the user's explicit approval.
 </tr><tr>
    <td>"{@code signatureOrSystem}"</td>
-   <td>A permission that the system grants only to applications that are 
+   <td>A permission that the system grants only to applications that are
        in the Android system image <em>or</em> that are signed with the same
-       certificate as the application that declared the permission. Please avoid using this 
-       option, as the {@code signature} protection level should be sufficient 
-       for most needs and works regardless of exactly where applications are 
+       certificate as the application that declared the permission. Please avoid using this
+       option, as the {@code signature} protection level should be sufficient
+       for most needs and works regardless of exactly where applications are
        installed.  The "{@code signatureOrSystem}"
        permission is used for certain special situations where multiple
        vendors have applications built into a system image and need
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index c2def69..b9d0082 100755
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -508,7 +508,7 @@
 <p class="note"><strong>Note:</strong> You must use the version of
 <code>aapt</code> that is provided for the latest Platform-Tools component available. If
 you do not have the latest Platform-Tools component, download it using the <a
-href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>.
+href="{@docRoot}studio/intro/update.html">Android SDK Manager</a>.
 </p></li>
 <li>Run <code>aapt</code> using this syntax: </li>
 </ol>
diff --git a/docs/html/guide/topics/resources/localization.jd b/docs/html/guide/topics/resources/localization.jd
index afe4611..e23de86 100755
--- a/docs/html/guide/topics/resources/localization.jd
+++ b/docs/html/guide/topics/resources/localization.jd
@@ -33,6 +33,7 @@
 Layouts</a></li>
 <li><a href="{@docRoot}reference/android/app/Activity.html#ActivityLifecycle">
 Activity Lifecycle</a></li>
+<li><a href="https://support.google.com/l10n/answer/6359997">App Translation Service</a></li>
 </ol>
 </div>
 </div>
@@ -395,6 +396,20 @@
 that Android makes available:</p>
 
 <pre>String locale = context.getResources().getConfiguration().locale.getDisplayName();</pre>
+<h4>
+  Use the App Translation Service
+</h4>
+
+<p>
+  The <a href="https://support.google.com/l10n/answer/6359997">App Translation
+  Service</a> is integrated into the <a href=
+  "https://support.google.com/l10n/answer/6341304">Developer Console</a>, and
+  it is also accessible from <a href=
+  "https://support.google.com/l10n/answer/6341928">Android Studio</a>. It is a
+  quick and simple way to get an instant quote and place an order with a
+  translation company. You can order translations into one or more languages
+  for app UI strings, Play Store Listing text, IAP names, and ad campaign text.
+</p>
 
 <h2 id="testing">Testing Localized Applications</h2>
 
@@ -414,9 +429,7 @@
 <h4>Creating and using a custom locale</h4>
 
 <p>A &quot;custom&quot; locale is a language/region combination that the Android
-system image does not explicitly support. (For a list of supported locales in
-Android platforms see the Version Notes in the <a
-href="{@docRoot}sdk/index.html">SDK</a> tab). You can test
+system image does not explicitly support. You can test
 how your application will run in a custom locale by creating a custom locale in
 the emulator. There are two ways to do this:</p>
 
diff --git a/docs/html/guide/topics/security/permissions.jd b/docs/html/guide/topics/security/permissions.jd
index f7f70b3..e7bf760 100644
--- a/docs/html/guide/topics/security/permissions.jd
+++ b/docs/html/guide/topics/security/permissions.jd
@@ -18,6 +18,7 @@
 </li>
 <li><a href="#defining">Defining and Enforcing Permissions</a>
 	<ol>
+  <li><a href="#custom-recommendations">Custom permission recommendations</a></li>
 	<li><a href="#manifest">...in AndroidManifest.xml</a></li>
 	<li><a href="#broadcasts">...when Sending Broadcasts</a></li>
 	<li><a href="#enforcement">Other Permission Enforcement</a></li>
@@ -540,17 +541,19 @@
 <a name="declaring"></a>
 <h2 id="defining">Defining and Enforcing Permissions</h2>
 
-<p>To enforce your own permissions, you must first declare them in your
-<code>AndroidManifest.xml</code> using one or more
-<code>{@link android.R.styleable#AndroidManifestPermission &lt;permission&gt;}</code>
-tags.</p>
+<p>
+  To enforce your own permissions, you must first declare them in your
+  <code>AndroidManifest.xml</code> using one or more <a href=
+  "{@docRoot}guide/topics/manifest/permission-element.html"><code>&lt;permission&gt;</code></a>
+  elements.
+</p>
 
 <p>For example, an application that wants to control who can start one
 of its activities could declare a permission for this operation as follows:</p>
 
 <pre>&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
-    package=&quot;com.me.app.myapp&quot; &gt;
-    &lt;permission android:name=&quot;com.me.app.myapp.permission.DEADLY_ACTIVITY&quot;
+    package=&quot;com.example.myapp&quot; &gt;
+    &lt;permission android:name=&quot;com.example.myapp.permission.DEADLY_ACTIVITY&quot;
         android:label=&quot;&#64;string/permlab_deadlyActivity&quot;
         android:description=&quot;&#64;string/permdesc_deadlyActivity&quot;
         android:permissionGroup=&quot;android.permission-group.COST_MONEY&quot;
@@ -558,50 +561,65 @@
     ...
 &lt;/manifest&gt;</pre>
 
+<p class="note">
+  <strong>Note:</strong> The system does not allow multiple packages to declare
+  a permission with the same name, unless all the packages are signed with the
+  same certificate. If a package declares a permission, the system does not permit
+  the user to install other packages with the same permission name, unless
+  those packages are signed with the same certificate as the first package. To
+  avoid naming collisions, we recommend using reverse-domain-style naming for custom
+  permissions, for example <code>com.example.myapp.ENGAGE_HYPERSPACE</code>.
+</p>
+
 <p>The {@link android.R.styleable#AndroidManifestPermission_protectionLevel
-&lt;protectionLevel&gt;} attribute is required, telling the system how the
+protectionLevel} attribute is required, telling the system how the
 user is to be informed of applications requiring the permission, or who is
 allowed to hold that permission, as described in the linked documentation.</p>
 
-<p>The {@link android.R.styleable#AndroidManifestPermission_permissionGroup
-&lt;permissionGroup&gt;} attribute is optional, and only used to help the system display
-permissions to the user.  You will usually want to set this to either a standard
-system group (listed in {@link android.Manifest.permission_group
-android.Manifest.permission_group}) or in more rare cases to one defined by
-yourself.  It is preferred to use an existing group, as this simplifies the
-permission UI shown to the user.</p>
+<p>
+  The <a href=
+  "{@docRoot}guide/topics/manifest/permission-group-element.html"
+  ><code>android:permissionGroup</code></a>
+  attribute is optional, and only used to help the system display permissions
+  to the user. In most cases you will want to set this to a standard system
+  group (listed in {@link android.Manifest.permission_group
+  android.Manifest.permission_group}), although you can define a group yourself.
+  It is preferable to use an existing group, as this simplifies the
+  permission UI shown to the user.
+</p>
 
-<p>Note that both a label and description should be supplied for the
-permission. These are string resources that can be displayed to the user when
+<p>You need to supply both a label and description for the
+permission. These are string resources that the user can see when
 they are viewing a list of permissions
 (<code>{@link android.R.styleable#AndroidManifestPermission_label android:label}</code>)
 or details on a single permission (
 <code>{@link android.R.styleable#AndroidManifestPermission_description android:description}</code>).
-The label should be short, a few words
+The label should be short; a few words
 describing the key piece of functionality the permission is protecting. The
-description should be a couple sentences describing what the permission allows
-a holder to do. Our convention for the description is two sentences, the first
-describing the permission, the second warning the user of what bad things
-can happen if an application is granted the permission.</p>
+description should be a couple of sentences describing what the permission allows
+a holder to do. Our convention is a two-sentence description:
+the first sentence describes the permission, and the second sentence warns the
+user of the type of things that can go wrong if an application is granted the
+permission.</p>
 
 <p>Here is an example of a label and description for the CALL_PHONE
 permission:</p>
 
 <pre>
-    &lt;string name=&quot;permlab_callPhone&quot;&gt;directly call phone numbers&lt;/string&gt;
-    &lt;string name=&quot;permdesc_callPhone&quot;&gt;Allows the application to call
-        phone numbers without your intervention. Malicious applications may
-        cause unexpected calls on your phone bill. Note that this does not
-        allow the application to call emergency numbers.&lt;/string&gt;
+&lt;string name=&quot;permlab_callPhone&quot;&gt;directly call phone numbers&lt;/string&gt;
+&lt;string name=&quot;permdesc_callPhone&quot;&gt;Allows the application to call
+    phone numbers without your intervention. Malicious applications may
+    cause unexpected calls on your phone bill. Note that this does not
+    allow the application to call emergency numbers.&lt;/string&gt;
 </pre>
 
-<p>You can look at the permissions currently defined in the system with the
+<p>You can view at the permissions currently defined in the system using the
 Settings app and the shell command <code>adb shell pm list permissions</code>.
-To use the Settings app, go to Settings &gt; Applications.  Pick an app and
+To use the Settings app, go to <b>Settings</b> &gt; <b>Applications</b>.  Pick an app and
 scroll down to see the permissions that the app uses. For developers, the adb '-s'
 option displays the permissions in a form similar to how the user will see them:</p>
 
-<pre>
+<pre class="no-pretty-print">
 $ adb shell pm list permissions -s
 All Permissions:
 
@@ -615,14 +633,53 @@
 
 ...</pre>
 
+<h3 id="custom-recommendations">
+  Custom permission recommendations
+</h3>
+
+<p>
+  Apps can define their own custom permissions and request custom permissions
+  from other apps by defining <a href=
+  "{@docRoot}guide/topics/manifest/uses-permission-element.html"><code
+  >&lt;uses-permission&gt;</code></a> elements.
+  However, you should carefully assess whether it is necessary for your app to
+  do so.
+</p>
+
+<ul>
+  <li>If you are designing a suite of apps that expose functionality to one
+  another, try to design the apps so that each permission is defined only once.
+  You must do this if the apps are not all signed with the same certificate.
+  Even if the apps are all signed with the same certificate, it's a
+  best practice to define each permission once only.
+  </li>
+
+  <li>If the functionality is only available to apps signed with the same
+  signature as the providing app, you may be able to avoid defining custom
+  permissions by using signature checks. When one of your apps makes a request
+  of another of your apps, the second app can verify that both apps are signed
+  with the same certificate before complying with the request.
+  </li>
+
+  <li>If you are developing a suite of apps runs only on your own
+  devices, you should develop and install a package that
+  manages permissions for all the apps in the suite. This package does not need
+  to provide any services itself. It just declares all the permissions, and the
+  other apps in the suite request those permissions with the <a href=
+  "{@docRoot}guide/topics/manifest/uses-permission-element.html"><code
+  >&lt;uses-permission&gt;</code></a>
+  element.
+  </li>
+</ul>
+
 <a name="manifest"></a>
 <h3>Enforcing Permissions in AndroidManifest.xml</h3>
 
-<p>High-level permissions restricting access to entire components of the
-system or application can be applied through your
-<code>AndroidManifest.xml</code>. All that this requires is including an {@link
+<p>TYou can apply high-level permissions restricting access to entire components
+of the system or application through your
+<code>AndroidManifest.xml</code>. To do this, include an {@link
 android.R.attr#permission android:permission} attribute on the desired
-component, naming the permission that will be used to control access to
+component, naming the permission that controls access to
 it.</p>
 
 <p><strong>{@link android.app.Activity}</strong> permissions
diff --git a/docs/html/images/cards/card-nyc_2x.jpg b/docs/html/images/cards/card-nyc_2x.jpg
new file mode 100644
index 0000000..b0b324881
--- /dev/null
+++ b/docs/html/images/cards/card-nyc_2x.jpg
Binary files differ
diff --git a/docs/html/images/work/cards/android-studio_600px.png b/docs/html/images/work/cards/android-studio_600px.png
new file mode 100644
index 0000000..d2ce8d7
--- /dev/null
+++ b/docs/html/images/work/cards/android-studio_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/briefcase_600px.png b/docs/html/images/work/cards/briefcase_600px.png
new file mode 100644
index 0000000..9c30cf0
--- /dev/null
+++ b/docs/html/images/work/cards/briefcase_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/work-cloud_600px.png b/docs/html/images/work/cards/work-cloud_600px.png
new file mode 100644
index 0000000..9e63a0c
--- /dev/null
+++ b/docs/html/images/work/cards/work-cloud_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/work-devhub_600px.png b/docs/html/images/work/cards/work-devhub_600px.png
new file mode 100644
index 0000000..b63b917
--- /dev/null
+++ b/docs/html/images/work/cards/work-devhub_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/work-folder_600px.png b/docs/html/images/work/cards/work-folder_600px.png
new file mode 100644
index 0000000..1804d6f
--- /dev/null
+++ b/docs/html/images/work/cards/work-folder_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/work-profile_600px.png b/docs/html/images/work/cards/work-profile_600px.png
new file mode 100644
index 0000000..60284ff
--- /dev/null
+++ b/docs/html/images/work/cards/work-profile_600px.png
Binary files differ
diff --git a/docs/html/images/work/cosu-pinning_vs_locktaskmode.png b/docs/html/images/work/cosu-pinning_vs_locktaskmode.png
new file mode 100644
index 0000000..8fa470b
--- /dev/null
+++ b/docs/html/images/work/cosu-pinning_vs_locktaskmode.png
Binary files differ
diff --git a/docs/html/images/work/cosu-pinning_vs_locktaskmode_2x.png b/docs/html/images/work/cosu-pinning_vs_locktaskmode_2x.png
new file mode 100644
index 0000000..d7690f4
--- /dev/null
+++ b/docs/html/images/work/cosu-pinning_vs_locktaskmode_2x.png
Binary files differ
diff --git a/docs/html/images/work/guide-app-restrictions.png b/docs/html/images/work/guide-app-restrictions.png
new file mode 100644
index 0000000..83c2b42
--- /dev/null
+++ b/docs/html/images/work/guide-app-restrictions.png
Binary files differ
diff --git a/docs/html/images/work/guide-app-restrictions_2x.png b/docs/html/images/work/guide-app-restrictions_2x.png
new file mode 100644
index 0000000..4e64a1c
--- /dev/null
+++ b/docs/html/images/work/guide-app-restrictions_2x.png
Binary files differ
diff --git a/docs/html/images/work/guide-managed-overview.png b/docs/html/images/work/guide-managed-overview.png
new file mode 100644
index 0000000..caead68
--- /dev/null
+++ b/docs/html/images/work/guide-managed-overview.png
Binary files differ
diff --git a/docs/html/images/work/guide-managed-overview_2x.png b/docs/html/images/work/guide-managed-overview_2x.png
new file mode 100644
index 0000000..53518ad
--- /dev/null
+++ b/docs/html/images/work/guide-managed-overview_2x.png
Binary files differ
diff --git a/docs/html/images/work/hero_650px.png b/docs/html/images/work/hero_650px.png
new file mode 100644
index 0000000..5c790fa
--- /dev/null
+++ b/docs/html/images/work/hero_650px.png
Binary files differ
diff --git a/docs/html/images/work/hero_650px_2x.png b/docs/html/images/work/hero_650px_2x.png
new file mode 100644
index 0000000..d3e5049
--- /dev/null
+++ b/docs/html/images/work/hero_650px_2x.png
Binary files differ
diff --git a/docs/html/images/enterprise/work-launcher.png b/docs/html/images/work/work-launcher.png
similarity index 100%
rename from docs/html/images/enterprise/work-launcher.png
rename to docs/html/images/work/work-launcher.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index 2f67c58..c69acab 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -38,7 +38,7 @@
         </a><br>-->
       </a>
     </div>
-    <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;padding-right:1.5em;">
+    <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
       <a href="{@docRoot}preview/index.html">
         <img style="" class="dac-hero-image" src="/images/home/n-preview-hero.png"
              srcset="/images/home/n-preview-hero.png 1x,
@@ -55,7 +55,7 @@
     </a>
     <ul class="dac-actions">
       <li class="dac-action">
-        <a class="dac-action-link" href="{@docRoot}sdk/index.html">
+        <a class="dac-action-link" href="{@docRoot}studio/index.html">
           <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
           Get Android Studio
         </a>
@@ -82,7 +82,7 @@
       <i class="dac-sprite dac-arrow-down-gray"></i>
     </a>
     <div class="actions">
-      <div><a href="{@docRoot}sdk/index.html">
+      <div><a href="{@docRoot}studio/index.html">
         <span class="dac-sprite dac-auto-chevron-large"></span>
         Get Android Studio
       </a></div>
diff --git a/docs/html/jd_collections.js b/docs/html/jd_collections.js
index cf6fb97..74bad7b 100644
--- a/docs/html/jd_collections.js
+++ b/docs/html/jd_collections.js
@@ -18,7 +18,7 @@
     "resources": [
       "training/building-wearables.html",
       "training/material/index.html",
-      "sdk/index.html"
+      "studio/index.html"
     ]
   },
   "index/secondary/carousel": {
@@ -365,7 +365,7 @@
     "resources": [
       "https://www.android.com/work/",
       "https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
-      "training/enterprise/index.html"
+      "work/index.html"
     ]
   },
   "distribute/essentials": {
@@ -375,7 +375,7 @@
       "distribute/essentials/quality/tv.html",
       "distribute/essentials/quality/wear.html",
       "distribute/essentials/quality/auto.html",
-      "https://developers.google.com/edu/guidelines"
+      "distribute/essentials/quality/billions.html"
     ]
   },
   "distribute/essentials/zhcn": {
@@ -411,6 +411,7 @@
     "resources": [
       "distribute/engage/intents.html",
       "distribute/engage/widgets.html",
+      "distribute/engage/translate.html",
       "distribute/engage/notifications.html",
       "distribute/engage/deep-linking.html",
       "distribute/engage/ads.html",
@@ -506,7 +507,7 @@
       "distribute/essentials/quality/wear.html",
       "distribute/essentials/quality/tv.html",
       "distribute/essentials/quality/auto.html",
-      "https://developers.google.com/edu/guidelines"
+      "distribute/essentials/quality/billions.html"
     ]
   },
   "distribute/essentials/tools": {
@@ -1007,6 +1008,44 @@
       "google/play/filters.html"
     ]
   },
+ "distribute/essentials/billionsquality/connectivity": {
+    "title": "",
+    "resources": [
+      "training/basics/network-ops/managing.html",
+      "training/monitoring-device-state/connectivity-monitoring.html",
+      "guide/topics/providers/content-providers.html"
+    ]
+  },
+  "distribute/essentials/billionsquality/capability": {
+    "title": "",
+    "resources": [
+      "guide/practices/screens_support.html",
+      "training/multiscreen/screendensities.html",
+      "training/articles/memory.html"
+    ]
+  },
+  "distribute/essentials/billionsquality/cost": {
+    "title": "",
+    "resources": [
+      "https://medium.com/@wkalicinski/smallerapk-part-6-image-optimization-zopfli-webp-4c462955647d#.23hlddo3x",
+      "training/basics/network-ops/managing.html"
+    ]
+  },
+  "distribute/essentials/billionsquality/consumption": {
+    "title": "",
+    "resources": [
+      "training/efficient-downloads/efficient-network-access.html",
+      "training/monitoring-device-state/index.html"
+    ]
+  },
+  "distribute/essentials/billionsquality/content": {
+    "title": "",
+    "resources": [
+      "training/material/animations.html#Touch",
+      "training/articles/perf-anr.html",
+      "training/improving-layouts/index.html"
+    ]
+  },
   "distribute/essentials/tabletguidelines": {
     "title": "",
     "resources": [
@@ -1039,6 +1078,12 @@
       "guide/topics/appwidgets/index.html"
     ]
   },
+  "distribute/engage/translate": {
+    "title": "",
+    "resources": [
+      "https://support.google.com/l10n/answer/6359997"
+    ]
+  },
   "distribute/engage/reengage": {
     "title": "",
     "resources": [
@@ -1291,7 +1336,8 @@
   "distribute/toolsreference/launchchecklist/localization": {
     "title": "",
     "resources": [
-      "distribute/tools/localization-checklist.html"
+      "distribute/tools/localization-checklist.html",
+      "https://support.google.com/l10n/answer/6359997"
     ]
   },
   "distribute/toolsreference/launchchecklist/graphics": {
@@ -1703,26 +1749,6 @@
       "training/monitoring-device-state/index.html"
     ]
   },
-  "training/work/apps": {
-    "title": "",
-    "resources": [
-      "training/enterprise/app-compatibility.html",
-      "training/enterprise/app-restrictions.html",
-      "training/enterprise/cosu.html",
-      "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
-      "samples/AppRestrictionSchema/index.html",
-      "https://www.youtube.com/watch?v=dH41OutAMNM",
-      "samples/AppRestrictionEnforcer/index.html"
-    ]
-  },
-  "training/work/admin": {
-    "title": "",
-    "resources": [
-      "training/enterprise/work-policy-ctrl.html",
-      "samples/BasicManagedProfile/index.html",
-      "https://www.youtube.com/watch?v=j3QC6hcpy90"
-    ]
-  },
 "tools/help/log": {
     "title": "",
     "resources": [
@@ -1830,7 +1856,7 @@
     "resources": [
     "tools/studio/index.html",
     "tools/studio/studio-features.html",
-    "sdk/installing/studio-tips.html",
+    "studio/intro/index.html",
     ]
   },
   "tools/landing/latest": {
@@ -1841,4 +1867,45 @@
     "https://medium.com/google-developers/writing-more-code-by-writing-less-code-with-android-studio-live-templates-244f648d17c7#.hczcm02du",
     ]
   },
-}
+  "work/landing/primary": {
+    "title": "",
+    "resources": [
+      "work/overview.html",
+      "work/guide.html",
+      "https://connect.googleforwork.com/community/applicants/android/isv",
+      "work/app-restrictions.html",
+      "work/cosu.html",
+      "work/managed-profiles.html"
+    ]
+  },
+  "work/landing/resources": {
+    "title": "",
+    "resources": [
+      "https://developers.google.com/android/work/",
+      "https://www.google.com/work/android/",
+      "https://developers.google.com/android/work/build-dpc",
+      "https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+      "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+      "https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX"
+    ]
+  },
+  "work/apps": {
+    "title": "",
+    "resources": [
+      "work/managed-profiles.html",
+      "work/app-restrictions.html",
+      "work/cosu.html",
+      "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+      "samples/AppRestrictionSchema/index.html",
+      "samples/AppRestrictionEnforcer/index.html"
+    ]
+  },
+  "work/admin": {
+    "title": "",
+    "resources": [
+      "https://developers.google.com/android/work/build-dpc",
+      "samples/BasicManagedProfile/index.html",
+      "https://www.youtube.com/watch?v=j3QC6hcpy90"
+    ]
+  }
+};
diff --git a/docs/html/jd_extras.js b/docs/html/jd_extras.js
index d176883..ed8b54f 100644
--- a/docs/html/jd_extras.js
+++ b/docs/html/jd_extras.js
@@ -32,6 +32,17 @@
     "type":"medium"
   },
   {
+    "title":"SmallerAPK, Part 6: Image optimization, Zopfli & WebP",
+    "category":"",
+    "summary":"Series of posts on minimizing your APK size.",
+    "url":"https://medium.com/@wkalicinski/smallerapk-part-6-image-optimization-zopfli-webp-4c462955647d#.23hlddo3x",
+    "group":"",
+    "keywords": [],
+    "tags": [],
+    "image":"https://cdn-images-1.medium.com/max/2000/1*chMiA9mGa_FBUOoesHHk3Q.png",
+    "type":"medium"
+  },
+  {
     "title":"Measure your app’s user acquisition channels",
     "titleFriendly":"",
     "summary":"Get details on how to use the Developer Console User Acquisitions reports to discover where your users come from.",
@@ -999,6 +1010,19 @@
     "lang": "en",
     "group": "",
     "tags": [],
+    "url": "training/material/animations.html#Touch",
+    "timestamp": 1194884220000,
+    "image": null,
+    "title": "Customize Touch Feedback",
+    "summary": "Provide visual confirmation when users interact with your UI.",
+    "keywords": [],
+    "type": "develop",
+    "category": "guide"
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
     "url": "guide/topics/manifest/uses-feature-element.html#testing",
     "timestamp": 1194884220000,
     "image": null,
@@ -2735,6 +2759,27 @@
     "group": "",
     "tags": [
       "marketing",
+      "engagement",
+      "translate"
+    ],
+    "url": "https://support.google.com/l10n/answer/6359997",
+    "timestamp": null,
+    "image": "images/play_dev.jpg",
+    "title": "Use the App Translation Service",
+    "summary": "The App Translation Service is a human translation service. It makes it easy to order translations for app UI strings, Play Store text, in-app purchase products, and universal app campaign ads.",
+    "keywords": [
+      "marketing",
+      "engagement",
+      "translate"
+    ],
+    "type": "distribute",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [
+      "marketing",
       "engagement"
     ],
     "url": "https://support.google.com/adwords/answer/6167162",
@@ -3225,19 +3270,55 @@
     "type":"distribute"
   },
   {
-    "title":"Android for Work",
+    "title":"Join the Android for Work DevHub",
     "titleFriendly":"",
-    "summary":"Learn more about how Android for Work makes your favorite phones and tablets the perfect business tools.",
-    "url":"https://www.android.com/work/",
+    "summary":"The Android for Work DevHub is a place to help developers keep up with Android in the workplace.",
+    "url":"https://connect.googleforwork.com/community/applicants/android/isv",
+    "group":"",
+    "keywords": ["work", "enterprise", "isv", "devhub"],
+    "tags": [],
+    "image":"images/work/cards/work-devhub_600px.png",
+    "lang":"en",
+    "type":"Community"
+  },
+  {
+    "title":"Enterprise Mobility Managers",
+    "titleFriendly":"",
+    "summary":"Integrate Android for Work into your enterprise mobility management (EMM) solution.",
+    "url":"https://developers.google.com/android/work/",
     "group":"",
     "keywords": ["work", "enterprise", "emm"],
     "tags": [],
-    "image":"images/cards/card-android-work_2x.png",
+    "image":"images/work/cards/work-cloud_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Learn More About Android for Work",
+    "titleFriendly":"",
+    "summary":"Android for Work makes your favorite phones and tablets the perfect business tools.",
+    "url":"https://www.google.com/work/android/",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/work-profile_600px.png",
     "lang":"en",
     "type":"about"
   },
   {
-    "title":"Android for Work DevBytes",
+    "title":"Build a Device Policy Controller",
+    "titleFriendly":"",
+    "summary":"Create and administer a managed profile on an employee's device.",
+    "url":"https://developers.google.com/android/work/build-dpc",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/work-folder_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Android for Work for Developers",
     "titleFriendly":"",
     "summary":"Watch the videos in this playlist to understand more about Android for Work and get tips on developing enterprise apps.",
     "url":"https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
@@ -3261,10 +3342,10 @@
     "type":"youtube"
   },
   {
-    "title":"Building an enterprise ready app",
+    "title":"Building an Enterprise Ready App",
     "titleFriendly":"",
     "summary":"A holistic view of Android for Work for developers.",
-    "url":"https://www.youtube.com/watch?v=dH41OutAMNM",
+    "url":"https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
     "group":"",
     "keywords": ["work", "enterprise", "emm"],
     "tags": [],
@@ -3393,18 +3474,6 @@
     "type":"Video"
   },
   {
-    "title":"Android for Work: Single Use Devices",
-    "titleFriendly":"",
-    "summary":"Android M is bringing the power of Android to all kinds of workplaces.",
-    "url":"https://www.youtube.com/watch?v=j3QC6hcpy90",
-    "group":"",
-    "keywords": ["Marshmallow"],
-    "tags": [],
-    "image":"https://i1.ytimg.com/vi/j3QC6hcpy90/maxresdefault.jpg",
-    "lang":"en",
-    "type":"Video"
-  },
-  {
     "title":"Runtime Permissions in Android 6.0 Marshmallow",
     "titleFriendly":"",
     "summary":"Learn how to integrate runtime permissions into your Android app.",
diff --git a/docs/html/jd_extras_en.js b/docs/html/jd_extras_en.js
index 61eecc0..fca2b17 100644
--- a/docs/html/jd_extras_en.js
+++ b/docs/html/jd_extras_en.js
@@ -657,7 +657,90 @@
     "image":"https://i1.ytimg.com/vi/K2dodTXARqc/maxresdefault.jpg",
     "type":"video"
   },
-
+  {
+    "title":"Instant Run: An Android Tool Time Deep Dive",
+    "category":"",
+    "summary":"Instant Run is an Android Studio feature that significantly reduces the time for building and deploying incremental code changes during your coding / testing / debugging lifecycle.",
+    "url":"https://www.youtube.com/watch?v=StqAZ1OQbqA&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+    "group":"",
+    "keywords": ["studio", "tools"],
+    "tags": [
+    ],
+    "image":"https://i1.ytimg.com/vi/StqAZ1OQbqA/maxresdefault.jpg",
+    "type":"youtube"
+  },
+  {
+    "title":"What’s New in Android Studio 2.1",
+    "category":"",
+    "summary":"Android Studio 2.1 is required to try out new features and APIs of the Android N developer preview including the new Jack compiler and Java 8 language support. It also includes performance improvements to Instant Run, and a number of bug fixes and stability improvements.",
+    "url":"https://www.youtube.com/watch?v=ZOz_yr8Yxq8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+    "group":"",
+    "keywords": ["studio", "tools"],
+    "tags": [
+    ],
+    "image":"https://i1.ytimg.com/vi/ZOz_yr8Yxq8/maxresdefault.jpg",
+    "type":"youtube"
+  },
+  {
+    "title":"10 Things You Didn’t Know You Could Do",
+    "category":"",
+    "summary":"This Android Tool Time pro-tip roundup with Reto Meier shows off expert Android Studio tips designed to help you write less code, and make every keystroke count",
+    "url":"https://www.youtube.com/watch?v=eOV2owswDkE&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+    "group":"",
+    "keywords": ["studio", "tools"],
+    "tags": [
+    ],
+    "image":"https://i1.ytimg.com/vi/eOV2owswDkE/maxresdefault.jpg",
+    "type":"youtube"
+  },
+  {
+    "title":"Live Templates in Android Studio",
+    "category":"",
+    "summary":"Android Tool Time Protip: Use and create your own Live Templates in Android Studio to write more code with less keystrokes using Live Templates to insert common, templatized code snippets.",
+    "url":"https://www.youtube.com/watch?v=4rI4tTd7-J8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+    "group":"",
+    "keywords": ["studio", "tools"],
+    "tags": [
+    ],
+    "image":"https://i1.ytimg.com/vi/4rI4tTd7-J8/maxresdefault.jpg",
+    "type":"youtube"
+  },
+  {
+    "title":"Enable Android Studio's &quot;Dex In Process&quot; for Faster App Builds",
+    "category":"",
+    "summary":"Android Studio 2.1 enables Dex In Process, a feature that can dramatically improve all your build times. To take advantage of Dex In Process, you’ll need to modify your gradle.properties file and increase the amount of memory allocated to the Gradle Daemon VM by 1 Gb, to a minimum of 2 Gb, using the org.gradle.jvmargs property.",
+    "url":"https://www.youtube.com/watch?v=-SY5nkNVUn0&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+    "group":"",
+    "keywords": ["studio", "tools"],
+    "tags": [
+    ],
+    "image":"https://i1.ytimg.com/vi/-SY5nkNVUn0/maxresdefault.jpg",
+    "type":"youtube"
+  },
+  {
+    "title":"Configuring Parallel Canary / Stable Android Studio Installations",
+    "category":"",
+    "summary":"Android Tool Time Protip: Maintain parallel Android Studio installations on canary and stable channels to take advantage of all the new hotness, without risking your stable dev environment.",
+    "url":"https://www.youtube.com/watch?v=SBbWGxXCMqQ&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+    "group":"",
+    "keywords": ["studio", "tools"],
+    "tags": [
+    ],
+    "image":"https://i1.ytimg.com/vi/SBbWGxXCMqQ/maxresdefault.jpg",
+    "type":"youtube"
+  },
+  {
+    "title":"What’s New in Android Studio 2.0",
+    "category":"",
+    "summary":"Android Studio 2.0 is focused on making your workflow faster. Faster builds, faster deployment, faster emulators. Everything. Faster.",
+    "url":"https://www.youtube.com/watch?v=xxx3Fn7EowU&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+    "group":"",
+    "keywords": ["studio", "tools"],
+    "tags": [
+    ],
+    "image":"https://i1.ytimg.com/vi/xxx3Fn7EowU/maxresdefault.jpg",
+    "type":"youtube"
+  },
   {
     "title":"Google Play Services 7.5",
     "category":"",
@@ -2638,6 +2721,27 @@
     "group": "",
     "tags": [
       "marketing",
+      "engagement",
+      "translate"
+    ],
+    "url": "https://support.google.com/l10n/answer/6359997",
+    "timestamp": null,
+    "image": "images/play_dev.jpg",
+    "title": "Use the App Translation Service",
+    "summary": "The App Translation Service is a human translation service. It makes it easy to order translations for app UI strings, Play Store text, in-app purchase products, and universal app campaign ads.",
+    "keywords": [
+      "marketing",
+      "engagement",
+      "translate"
+    ],
+    "type": "distribute",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [
+      "marketing",
       "engagement"
     ],
     "url": "https://support.google.com/adwords/answer/6167162",
@@ -3114,19 +3218,127 @@
   },
   {
     "title":"Android for Work",
-    "category":"Enterprise",
-    "summary":"Learn more about how Android for Work makes your favorite phones and tablets the perfect business tools.",
-    "url":"https://www.android.com/work/",
+    "titleFriendly":"",
+    "summary": "Develop apps for Android for Work to take advantage of security and management features built into Android.",
+    "url":"https://developer.android.com/work",
     "group":"",
     "keywords": ["work", "enterprise", "emm"],
     "tags": [],
-    "image":"images/cards/card-android-work_2x.png",
+    "image":"images/work/cards/briefcase_600px.png",
+    "lang":"en",
+    "type":"work"
+  },
+  {
+    "title":"Android for Work Developer Overview",
+    "titleFriendly":"",
+    "summary": "Learn how to build Android apps for the enterprise and take advantage of Google's Android for Work program.",
+    "url":"https://developer.android.com/work/overview.html",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/briefcase_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Android for Work Developer Guide",
+    "titleFriendly":"",
+    "summary": "Android for Work provides organizations with a secure, flexible, and unified Android mobility platform combining devices, applications, and management.",
+    "url":"https://developer.android.com/work/guide.html",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/android-studio_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Set up App Restrictions",
+    "titleFriendly":"",
+    "summary": "Learn how to implement app restrictions and configuration settings that can be changed by other apps on the same device.",
+    "url":"https://developer.android.com/work/app-restrictions.html",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/briefcase_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Set up Managed Profiles",
+    "titleFriendly":"",
+    "summary": "Learn how to make sure your apps operate smoothly in a corporate environment by following some best practices.",
+    "url":"https://developer.android.com/work/managed-profiles.html",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/briefcase_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Set up Single-Purpose Devices",
+    "titleFriendly":"",
+    "summary": "Learn how to develop single-use solutions for Android devices.",
+    "url":"https://developer.android.com/work/cosu.html",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/briefcase_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Join the Android for Work DevHub",
+    "titleFriendly":"",
+    "summary":"The Android for Work DevHub is a place to help developers keep up with Android in the workplace.",
+    "url":"https://connect.googleforwork.com/community/applicants/android/isv",
+    "group":"",
+    "keywords": ["work", "enterprise", "isv", "devhub"],
+    "tags": [],
+    "image":"images/work/cards/work-devhub_600px.png",
+    "lang":"en",
+    "type":"Community"
+  },
+  {
+    "title":"Enterprise Mobility Managers",
+    "titleFriendly":"",
+    "summary":"Integrate Android for Work into your enterprise mobility management (EMM) solution.",
+    "url":"https://developers.google.com/android/work/",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/work-cloud_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Learn More About Android for Work",
+    "titleFriendly":"",
+    "summary":"Learn more about how Android for Work makes your favorite phones and tablets the perfect business tools.",
+    "url":"https://www.google.com/work/android/",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/work-profile_600px.png",
     "lang":"en",
     "type":"about"
   },
   {
-    "title":"Android for Work DevBytes",
-    "category":"Enterprise",
+    "title":"Build a Device Policy Controller",
+    "titleFriendly":"",
+    "summary":"Learn how to develop a Device Policy Controller to create and administer a managed profile on an employee's device.",
+    "url":"https://developers.google.com/android/work/build-dpc",
+    "group":"",
+    "keywords": ["work", "enterprise", "emm"],
+    "tags": [],
+    "image":"images/work/cards/work-folder_600px.png",
+    "lang":"en",
+    "type":"guide"
+  },
+  {
+    "title":"Android for Work for Developers",
+    "titleFriendly":"",
     "summary":"Watch the videos in this playlist to understand more about Android for Work and get tips on developing enterprise apps.",
     "url":"https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
     "group":"",
@@ -3134,11 +3346,11 @@
     "tags": [],
     "image":"https://i1.ytimg.com/vi/jQWB_-o1kz4/maxresdefault.jpg",
     "lang":"en",
-    "type":"video"
+    "type":"youtube"
   },
   {
     "title":"App Configurations, Testing and Launchers",
-    "category":"Enterprise",
+    "titleFriendly":"",
     "summary":"With Android for Work you can make your apps remotely configurable. We also cover how to test your app in a managed environment.",
     "url":"https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
     "group":"",
@@ -3146,23 +3358,23 @@
     "tags": [],
     "image":"https://i1.ytimg.com/vi/39NkpWkaH8M/maxresdefault.jpg",
     "lang":"en",
-    "type":"video"
+    "type":"youtube"
   },
   {
-    "title":"Building an enterprise ready app",
-    "category":"Enterprise",
+    "title":"Building an Enterprise Ready App",
+    "titleFriendly":"",
     "summary":"A holistic view of Android for Work for developers.",
-    "url":"https://www.youtube.com/watch?v=dH41OutAMNM",
+    "url":"https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
     "group":"",
     "keywords": ["work", "enterprise", "emm"],
     "tags": [],
     "image":"https://i1.ytimg.com/vi/dH41OutAMNM/maxresdefault.jpg",
     "lang":"en",
-    "type":"video"
+    "type":"youtube"
   },
   {
     "title":"Android for Work: Single Use Devices",
-    "category":"Enterprise",
+    "titleFriendly":"",
     "summary":"Single-purpose computers are everywhere, and Android can meet that need.",
     "url":"https://www.youtube.com/watch?v=j3QC6hcpy90",
     "group":"",
@@ -3170,7 +3382,7 @@
     "tags": [],
     "image":"https://i1.ytimg.com/vi/j3QC6hcpy90/maxresdefault.jpg",
     "lang":"en",
-    "type":"video"
+    "type":"youtube"
   },
   {
     "title":"Discover YouTube cards",
@@ -3711,10 +3923,16 @@
   "develop/landing/tools": {
     "title": "",
     "resources": [
-      "https://www.youtube.com/watch?v=StqAZ1OQbqA&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
       "https://www.youtube.com/watch?v=ZOz_yr8Yxq8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
       "https://www.youtube.com/watch?v=eOV2owswDkE&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
-      "https://www.youtube.com/watch?v=4rI4tTd7-J8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa"
+      "https://www.youtube.com/watch?v=StqAZ1OQbqA&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+      "https://www.youtube.com/watch?v=-SY5nkNVUn0&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+      "https://www.youtube.com/watch?v=4rI4tTd7-J8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+      "https://www.youtube.com/watch?v=SBbWGxXCMqQ&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+      "https://www.youtube.com/watch?v=xxx3Fn7EowU&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+      "https://www.youtube.com/watch?v=cD7NPxuuXYY&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
+      "https://www.youtube.com/watch?v=2I6fuD20qlY&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
+      "https://www.youtube.com/watch?v=5Be2mJzP-Uw&list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX"
     ]
   },
   "google/landing/services": {
@@ -3840,7 +4058,7 @@
     "resources": [
       "https://www.android.com/work/",
       "https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
-      "training/enterprise/index.html"
+      "work/index.html"
     ]
   },
   "distribute/essentials": {
@@ -3876,6 +4094,7 @@
     "resources": [
       "distribute/engage/intents.html",
       "distribute/engage/widgets.html",
+      "distribute/engage/translate.html",
       "distribute/engage/notifications.html",
       "distribute/engage/deep-linking.html",
       "distribute/engage/ads.html",
@@ -4490,6 +4709,12 @@
       "guide/topics/appwidgets/index.html"
     ]
   },
+  "distribute/engage/translate": {
+    "title": "",
+    "resources": [
+      "https://support.google.com/l10n/answer/6359997"
+    ]
+  },
   "distribute/engage/reengage": {
     "title": "",
     "resources": [
@@ -4861,17 +5086,17 @@
   "wear/preview/landing": {
     "title": "",
     "resources": [
-      "preview/api-overview.html",
-      "preview/download.html",
-      "preview/setup-sdk.html"
+      "wear/preview/api-overview.html",
+      "wear/preview/downloads.html",
+      "wear/preview/start.html"
     ]
   },
   "wear/preview/landing/resources": {
     "title": "",
     "resources": [
-      "design/wear/index.html",
-      "training/building-wearables.html",
-      "training/wearables/ui/index.html"
+      "wear/preview/features/complications.html",
+      "wear/preview/features/notifications.html",
+      "wear/preview/features/ui-nav-actions.html"
     ]
   },
   "design/auto/auto_ui_guidelines": {
@@ -5003,26 +5228,6 @@
       "training/monitoring-device-state/index.html"
     ]
   },
-  "training/work/apps": {
-    "title": "",
-    "resources": [
-      "training/enterprise/app-compatibility.html",
-      "training/enterprise/app-restrictions.html",
-      "training/enterprise/cosu.html",
-      "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
-      "samples/AppRestrictionSchema/index.html",
-      "https://www.youtube.com/watch?v=dH41OutAMNM",
-      "samples/AppRestrictionEnforcer/index.html"
-    ]
-  },
-  "training/work/admin": {
-    "title": "",
-    "resources": [
-      "training/enterprise/work-policy-ctrl.html",
-      "samples/BasicManagedProfile/index.html",
-      "https://www.youtube.com/watch?v=j3QC6hcpy90"
-    ]
-  },
 "tools/help/log": {
     "title": "",
     "resources": [
@@ -5173,9 +5378,51 @@
       "preview/features/icu4j-framework.html",
       "preview/features/multilingual-support.html",
       "preview/features/scoped-folder-access.html",
+      "preview/features/security-config.html",
       "preview/features/picture-in-picture.html",
       "preview/features/tv-recording-api.html"
     ]
+  },
+  "work/landing/primary": {
+    "title": "",
+    "resources": [
+      "work/overview.html",
+      "work/guide.html",
+      "https://connect.googleforwork.com/community/applicants/android/isv",
+      "work/app-restrictions.html",
+      "work/cosu.html",
+      "work/managed-profiles.html"
+    ]
+  },
+  "work/landing/resources": {
+    "title": "",
+    "resources": [
+      "https://developers.google.com/android/work/",
+      "https://www.google.com/work/android/",
+      "https://developers.google.com/android/work/build-dpc",
+      "https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+      "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+      "https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX"
+    ]
+  },
+  "work/apps": {
+    "title": "",
+    "resources": [
+      "work/managed-profiles.html",
+      "work/app-restrictions.html",
+      "work/cosu.html",
+      "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+      "samples/AppRestrictionSchema/index.html",
+      "samples/AppRestrictionEnforcer/index.html"
+    ]
+  },
+  "work/admin": {
+    "title": "",
+    "resources": [
+      "https://developers.google.com/android/work/build-dpc",
+      "samples/BasicManagedProfile/index.html",
+      "https://www.youtube.com/watch?v=j3QC6hcpy90"
+    ]
   }
 };
 
diff --git a/docs/html/jd_tag_helpers.js b/docs/html/jd_tag_helpers.js
index 3ad3633..0ec0d67 100644
--- a/docs/html/jd_tag_helpers.js
+++ b/docs/html/jd_tag_helpers.js
@@ -15,6 +15,7 @@
   SAMPLES_RESOURCES,
   TOOLS_RESOURCES,
   TRAINING_RESOURCES,
+  WORK_RESOURCES,
   YOUTUBE_RESOURCES,
   BLOGGER_RESOURCES,
   PREVIEW_RESOURCES
@@ -74,6 +75,7 @@
   'tools': TOOLS_RESOURCES,
   'training': TRAINING_RESOURCES,
   'preview': PREVIEW_RESOURCES,
+  'work': WORK_RESOURCES,
   'youtube': YOUTUBE_RESOURCES,
   'blog': BLOGGER_RESOURCES
 };
@@ -112,4 +114,4 @@
     ALL_RESOURCES_BY_URL[url] = res;
   }
 }
-var IS_RESOURCE_IN_LANG = buildResourceLookupMap(ALL_RESOURCES_BY_LANG);
\ No newline at end of file
+var IS_RESOURCE_IN_LANG = buildResourceLookupMap(ALL_RESOURCES_BY_LANG);
diff --git a/docs/html/legal.jd b/docs/html/legal.jd
index 0a68508..8385774 100755
--- a/docs/html/legal.jd
+++ b/docs/html/legal.jd
@@ -17,7 +17,7 @@
 mobile.</p>
 
 <p>To start developing apps for Android, <a
-href="{@docRoot}sdk/index.html">download the free Android SDK</a>.</p>
+href="{@docRoot}studio/index.html">download the free Android SDK</a>.</p>
 
 <h2 id="Brands">Android Brands</h2>
 
diff --git a/docs/html/ndk/guides/graphics/getting-started.jd b/docs/html/ndk/guides/graphics/getting-started.jd
index c0dd463..145e534 100644
--- a/docs/html/ndk/guides/graphics/getting-started.jd
+++ b/docs/html/ndk/guides/graphics/getting-started.jd
@@ -48,7 +48,7 @@
 
 <ol style="1">
    <li>If you don’t already have Android Studio,
-   <a href="{@docRoot}sdk/index.html">download it.</a></li>
+   <a href="{@docRoot}studio/index.html">download it.</a></li>
 
 <li><a href="https://github.com/android-ndk/ndk/wiki">Download</a> NDK r12-beta.</li>
 
diff --git a/docs/html/ndk/guides/setup.jd b/docs/html/ndk/guides/setup.jd
index 8d4334e..1459bfe 100644
--- a/docs/html/ndk/guides/setup.jd
+++ b/docs/html/ndk/guides/setup.jd
@@ -33,7 +33,7 @@
 <h2 id="install">Installation</h2>
 <p>To install and configure the NDK, follow these steps:</p>
 <ol type="1">
-<li>Get and install the <a href="{@docRoot}sdk/index.html">Android SDK</a>.</li>
+<li>Get and install the <a href="{@docRoot}studio/index.html">Android SDK</a>.</li>
 <li><a href="{@docRoot}ndk/downloads/index.html">Download</a> and
 <a href="{@docRoot}ndk/downloads/index.html#extract">extract</a> the NDK,
 making sure to download the correct version for your development platform. You may place the
diff --git a/docs/html/offline.jd b/docs/html/offline.jd
index 6d4483f..4a1216e 100644
--- a/docs/html/offline.jd
+++ b/docs/html/offline.jd
@@ -38,7 +38,7 @@
 
 <h3>If you've downloaded the Android SDK for the first time</h3>
 
-<p>Follow the guide to <a href="{@docRoot}sdk/installing/index.html">Installing the Android SDK</a>, which
+<p>Follow the guide to <a href="{@docRoot}studio/install.html">Installing the Android SDK</a>, which
 will help you setup your development environment.</p>
 
 <h3>If you've installed new SDK components using the Android SDK Manager</h3>
diff --git a/docs/html/preview/api-overview.jd b/docs/html/preview/api-overview.jd
index 110418a..1b6da06 100644
--- a/docs/html/preview/api-overview.jd
+++ b/docs/html/preview/api-overview.jd
@@ -24,6 +24,7 @@
         <li><a href="#number-blocking">Number-blocking</a></li>
         <li><a href="#call_screening">Call screening</a></li>
         <li><a href="#multi-locale_languages">Locales and languages</a></li>
+        <li><a href="#emoji">New Emojis</a></li>
         <li><a href="#icu4">ICU4J APIs in Android</a></li>
         <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
         <li><a href="#android_tv_recording">Android TV recording</a></li>
@@ -35,9 +36,12 @@
         <li><a href="#default_trusted_ca">Default Trusted CA</a></li>
         <li><a href="#apk_signature_v2">APK signature scheme v2</a></li>
         <li><a href="#scoped_directory_access">Scoped directory access</a></li>
+        <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
+        <li><a href="#sustained_performance_api">Sustained Performance API</a></li>
+        <li><a href="#vr">VR Support</a></li>
         <li><a href="#print_svc">Print service enhancements</a></li>
         <li><a href="#virtual_files">Virtual Files</a></li>
-        <li><a href="#emoji">New Emojis</a></li>
+        <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
       </ol>
 </div>
 </div>
@@ -82,6 +86,7 @@
 <p class="img-caption">
   <strong>Figure 1.</strong> Apps running in split-screen mode.
 </p>
+
   </div>
 
 <p>Especially on tablets and other larger-screen devices, multi-window support
@@ -354,7 +359,7 @@
 
 <p>
   Vulkan is only available to apps on devices with Vulkan-capable hardware,
-  such as Nexus 5X and Nexus 6P. We're working closely with our
+  such as Nexus 5X, Nexus 6P, and Nexus Player. We're working closely with our
   partners to bring Vulkan to more devices as soon as possible.
 </p>
 
@@ -398,7 +403,7 @@
 </p>
 
 <p>
-  For information about creating an app tile, see the
+  For information about creating an app tile, see the documentation for
   <code>android.service.quicksettings.Tile</code> in the downloadable <a href=
   "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
 </p>
@@ -471,14 +476,58 @@
 languages such as English, Spanish, French, and Arabic. It also adds partial
 support for more than 100 new languages.</p>
 
-<p>Apps can get the list of locales set by the user by calling <code>LocaleList.GetDefault()</code>.  To support the expanded number of locales, Android N is changing the way
-that it resolves resources. Make sure that you test and verify that your apps
+<p>Apps can get the list of locales set by the user by calling
+<code>LocaleList.GetDefault()</code>.  To support the expanded number of locales, Android N is
+changing the way that it resolves resources. Make sure that you test and verify that your apps
 working as expected with the new resource resolution logic.</p>
 
 <p>To learn about the new resource-resolution behavior and the best practices you
 should follow, see <a href="{@docRoot}preview/features/multilingual-support.html"
 >Multilingual Support</a>.</p>
 
+
+<h2 id="emoji">New Emojis</h2>
+
+<p>
+  Android N introduces additional emojis and emoji-related features including
+  skin tone emojis and support for variation
+  selectors. If your app supports emojis,
+  follow the guidelines below to take advantage of these emoji-related features.
+</p>
+
+<ul>
+  <li>
+    <strong>Check that a device contains an emoji before inserting it.</strong>
+    To check which emojis are present in the
+    system font, use the {@link android.graphics.Paint#hasGlyph(String)} method.
+  </li>
+  <li>
+    <strong>Check that an emoji supports variation selectors.</strong>
+    Variation selectors allow you to
+    present certain emojis in color or in black-and-white.
+    On mobile devices, apps should represent emojis in color rather than black-and-white. However,
+    if your app displays emojis inline with text, then it should use the black-and-white variation.
+    To determine whether an emoji has a variation, use the variation selector.
+    For a complete list of characters with variations, review the
+    <em>emoji variation sequences</em> section of the
+    <a class="external-link"
+    href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
+      Unicode documentation on variations</a>.
+  </li>
+  <li>
+    <strong>Check that an emoji supports skin tone.</strong> Android N allows users to modify the
+    rendered skin tone of emojis to their preference. Keyboard apps should provide visual
+    indications for emojis that have multiple skin tones and should allow users to
+    select the skin tone that they prefer. To determine which system emojis have
+    skin tone modifiers, use the {@link android.graphics.Paint#hasGlyph(String)}
+    method. You can determine which emojis use skin tones by reading the
+    <a class="external-link"
+    href="http://unicode.org/emoji/charts/full-emoji-list.html">
+     Unicode documentation</a>.
+  </li>
+</ul>
+
+
 <h2 id="icu4">ICU4J APIs in Android</h2>
 
 <p>
@@ -504,7 +553,8 @@
 
 <ul>
   <li> All extensions from the <a class="external-link"
-href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android Extension Pack</a></a> (AEP) except for <code>EXT_texture_sRGB_decode</code>.
+href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+Android Extension Pack</a></a> (AEP) except for <code>EXT_texture_sRGB_decode</code>.
   <li> Floating-point framebuffers for HDR and deferred shading.
   <li> BaseVertex draw calls to enable better batching and streaming.
   <li> Robust buffer access control to reduce WebGL overhead.
@@ -629,7 +679,7 @@
 <p>Direct boot improves device startup times and lets registered
 apps have limited functionality even after an unexpected reboot.
 For example, if an encrypted device reboots while the user is sleeping,
-registered alarms, messages and incoming calls can now continue notify
+registered alarms, messages and incoming calls can now continue to notify
 the user as normal. This also means accessibility services can also be
   available immediately after a restart.</p>
 
@@ -733,19 +783,21 @@
 
 <p>
   Android N introduces APK Signature Scheme v2, a new app-signing scheme that
-  offers faster app install times and better protection against unauthorized
-  alterations to APK files. Android Studio 2.2 and Gradle provide built-in
-  support for APK Signature Scheme v2.
+  offers faster app install times and more protection against unauthorized
+  alterations to APK files. By default, Android Studio 2.2 and the Android
+  Plugin for Gradle 2.2 sign your app using both APK Signature Scheme v2 and
+  the traditional signing scheme, which uses JAR signing.
 </p>
 
 <p>
-  Although we recommend applying APK Signature Scheme v2 to your app, the new
-  scheme is not mandatory. If your app doesn't build properly when using the
-  APK Signature Scheme v2, you can use the traditional signing scheme—which
-  uses JAR signing—instead. To use the traditional scheme, open the
-  module-level <code>build.gradle</code> file and add the
-  <code>v2SigningEnabled</code> parameter to your release signing
-  configuration, setting this parameter's value to <code>false</code>:
+  Although we recommend applying APK Signature Scheme v2 to your app, this new
+  scheme is not mandatory. If your app doesn't build properly when using APK
+  Signature Scheme v2, you can disable the new scheme. The disabling process
+  causes Android Studio 2.2 and the Android Plugin for Gradle 2.2 to sign your
+  app using only the traditional signing scheme. To sign with only the
+  traditional scheme, open the module-level <code>build.gradle</code> file, then
+  add the line <code>v2SigningEnabled false</code> to your release signing
+  configuration:
 </p>
 
 <pre>
@@ -764,12 +816,18 @@
   }
 </pre>
 
+<p class="caution"><strong>Caution: </strong> If you sign your app using APK
+  Signature Scheme v2 and make further changes to the app, the app's signature
+  is invalidated. For this reason, use tools such as <code>zipalign</code>
+  before signing your app using APK Signature Scheme v2, not after.
+</p>
+
 <p>
-  For more information, see the following guides, which describe how to <a href=
-  "{@docRoot}studio/tools/publishing/app-signing.html#release-mode"> sign an app
-  in Android Studio</a> and how to <a href=
+  For more information, read the Android Studio documents that describe how to
+  <a href="{@docRoot}studio/tools/publishing/app-signing.html#release-mode">
+  sign an app</a> in Android Studio and how to <a href=
   "{@docRoot}studio/tools/building/configuring-gradle.html#signing"> configure
-  the Gradle build file for signing apps</a>.
+  the build file for signing apps</a> using the Android Plugin for Gradle.
 </p>
 
 <h2 id="scoped_directory_access">Scoped directory access</h2>
@@ -793,6 +851,59 @@
 <a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
 Directory Access</a> developer documentation.</p>
 
+<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
+
+<p>
+In Android N, the user can press "Alt + /" to trigger a <em>Keyboard Shortcuts</em>
+screen that displays all shortcuts available both from the system and from
+the app in focus. These are retrieved automatically from the app’s menu if
+available, but developers can provide their own fine-tuned shortcuts lists
+for the screen. You can do this by overriding the new
+<code>Activity.onProvideKeyboardShortcuts()</code> method, described in the downloadable
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
+</p>
+
+<p>
+To trigger the Keyboard Shortcuts Helper from anywhere in your app,
+call {@code Activity.requestKeyboardShortcutsHelper()} for the relevant activity.
+</p>
+
+<h2 id="sustained_performance_api">Sustained Performance API</h2>
+
+<p>
+Performance can fluctuate dramatically for long-running apps, because the
+system throttles system-on-chip engines as device components reach their
+temperature limits. This fluctuation presents a moving target for app
+developers creating high-performance, long-running apps.
+</p>
+
+<p>
+To address these limitations, Android N includes support for
+<em>sustained performance mode</em>, enabling OEMs to provide hints about
+device-performance capabilities for long-running apps. App developers
+can use these hints to tune apps for a predictable,
+consistent level of device performance over long periods of time.
+</p>
+
+<p>
+App developers can try out this new API in the N Developer Preview on
+Nexus 6P devices only. To use this feature,
+set the sustained performance window flag for the window
+you want to run in sustained performance mode. Set this flag using the
+{@code Window.setSustainedPerformanceMode()} method. The system automatically
+disables this mode when the window is no longer in focus.
+</p>
+
+<h2 id="vr">VR Support</h2>
+
+<p>
+Leveraging the <a href="#sustained_performance_api">Sustained Performance API</a>
+and newly introduced {@code VrListenerService} class, Android N provides support for
+VR apps developed using the <a href="https://developers.google.com/cardboard/overview">Cardboard
+SDK</a>. For more information about the {@code VrListenerService} class, see the relevant section
+of the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
+
+
 <h2 id="print_svc">Print Service Enhancements</h2>
 
 <p>
@@ -834,6 +945,47 @@
   "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
 </p>
 
+<h2 id="framemetrics_api">FrameMetricsListener API</h2>
+
+<p>
+The FrameMetricsListener API allows an app to monitor its UI rendering
+performance. The API provides this capability by exposing a streaming Pub/Sub API to transfer frame
+timing info for the app's current window. The data returned is
+equivalent to that displayed by {@code
+<a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a> dumpsys gfxinfo framestats},
+but is not limited to the past 120 frames.
+</p>
+
+<p>
+You can use FrameMetricsListener to measure interaction-level UI
+performance in production, without a USB connection. This API
+allows collection of data at a much higher granularity than does
+{@code adb shell dumpsys gfxinfo}. This higher granularity is possible because
+the system can collect data for particular interactions in the app; the system
+need not capture a global summary of the entire app’s
+performance, or clear any global state. You can use this
+capability to gather performance data and catch regressions in UI performance
+for real use cases within an app.
+</p>
+
+<p>
+To monitor a window, implement the <code>FrameMetricsListener.onMetricsAvailable()</code>
+callback method and register it on that window. For more information, refer to
+the {@code FrameMetricsListener} class documentation in
+the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
+</p>
+
+<p>
+The API provides a {@code FrameMetrics} object, which contains timing data that
+the rendering subsystem reports for various milestones in a frame lifecycle.
+The supported metrics are: {@code UNKNOWN_DELAY_DURATION},
+{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
+{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
+{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
+{@code TOTAL_DURATION}, and {@code FIRST_DRAW_FRAME}.
+</p>
+
+
 <h2 id="virtual_files">Virtual Files</h2>
 
 <p>
@@ -916,41 +1068,3 @@
   <a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
   Access Frameworks guide</a>.
 </p>
-
-<h2 id="emoji">New Emojis</h2>
-
-<p>
-  Android N introduces new emojis, including skin tone emojis, support
-  for variation
-  selectors, and other improvements. For a good user experience, observe the
-  following guidelines for using the new emojis and emoji features in your apps.
-</p>
-
-<ul>
-  <li>
-    <strong>New emojis</strong>: To check which emojis are present in the
-    system font, use the {@link android.graphics.Paint#hasGlyph(String)} method
-    and the dynamic layout in the emoji picker to place the glyphs.
-  </li>
-  <li>
-    <strong>Variation selectors</strong>: Variation selectors allow certain
-    emojis to be represented in color or in text presentation, which is used in
-    documents. For mobile devices, emojis should use their color representation.
-    To determine whether an emoji has a variation, use the variation selector.
-    You can view the complete list of characters with variations in the
-    <em>emoji variation sequences</em> section of the
-    <a href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
-      Unicode documentation on variations</a>.
-  </li>
-  <li>
-    <strong>Skin tone modifiers</strong>: In Android N, users can modify the
-    rendered skin tone of emojis. This allows users to customize the presentation
-    of emojis to their preference. Keyboard apps should provide visual
-    indications for emojis that have multiple skin tones and should allow users to
-    select the skin tone that they prefer. To determine which system emojis have
-    skin tone modifiers, use the {@link android.graphics.Paint#hasGlyph(String)}
-    method. You can determine which emojis use skin tones by reading the
-    <a href="http://unicode.org/emoji/charts/full-emoji-list.html">
-     Unicode documentation</a>.
-  </li>
-</ul>
\ No newline at end of file
diff --git a/docs/html/preview/behavior-changes.jd b/docs/html/preview/behavior-changes.jd
index 7c8bfe8..110ad5f 100644
--- a/docs/html/preview/behavior-changes.jd
+++ b/docs/html/preview/behavior-changes.jd
@@ -19,10 +19,8 @@
     </ol>
   </li>
   <li><a href="#perm">Permissions Changes</a>
-    <ol>
-      <li><a href="#permfilesys">File System Permission Changes</a></li>
-    </ol>
   </li>
+  <li><a href="#sharing-files">Sharing Files Between Apps</a></li>
   <li><a href="#accessibility">Accessibility Improvements</a>
     <ol>
       <li><a href="#screen-zoom">Screen Zoom</a></li>
@@ -188,29 +186,16 @@
 <h2 id="perm">Permissions Changes</h2>
 
 <p>
-  Android N includes changes to permissions that may affect your app,
-  including user accounts permissions and a new permission for writing to
-  external storage. Here is a summary of the permissions that have changed in
-  the preview:
+  Android N includes changes to permissions that may affect your app.
 </p>
 
-<ul>
-  <li>{@code GET_ACCOUNTS} (Deprecated)
-    <p>
-      The GET_ACCOUNTS permission is now deprecated. The system ignores this
-      permission for apps that target Android N.
-    </p>
-  </li>
-
-</ul>
-
 <h3 id="permfilesys">File system permission changes</h3>
 
 <p>
   In order to improve the security of private files, the private directory of
-  apps targeting Android N or higher has restricted access (0700). This prevents
-  leakage of metadata of private files, such as their size or existence. This
-  has multiple side effects:
+  apps targeting Android N or higher has restricted access (<code>0700</code>).
+  This setting prevents leakage of metadata of private files, such as their size
+  or existence. This permission change has multiple side effects:
 </p>
 
 <ul>
@@ -246,17 +231,37 @@
     Legacy applications that set the download location to a public location by
     using
     {@link
-    android.app.DownloadManager.Request#setDestinationInExternalFilesDir} or
+    android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+    DownloadManager.Request.setDestinationInExternalFilesDir()} or
     {@link
-    android.app.DownloadManager.Request#setDestinationInExternalPublicDir}
+    android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+    DownloadManager.Request.setDestinationInExternalPublicDir()}
     can still access the path in
     {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, however, this
     method is strongly discouraged. The preferred way of accessing a file
     exposed by the {@link android.app.DownloadManager} is using
-    {@link android.content.ContentResolver#openFileDescriptor}.
+    {@link android.content.ContentResolver#openFileDescriptor
+    ContentResolver.openFileDescriptor()}.
   </li>
 </ul>
 
+<h2 id="sharing-files">Sharing Files Between Apps</h2>
+
+<p>
+For apps targeting Android N, the Android framework enforces
+the {@link android.os.StrictMode} API policy that prohibits exposing {@code file://} URIs
+outside your app. If an intent containing a file URI leaves your app, the app fails
+with a {@code FileUriExposedException} exception.
+</p>
+
+<p>
+To share files between applications, you should send a {@code content://} URI
+and grant a temporary access permission on the URI. The easiest way to grant this permission is by
+using the {@link android.support.v4.content.FileProvider} class. For more information
+on permissions and sharing files,
+see <a href="{@docRoot}training/secure-file-sharing/index.html">Sharing Files</a>.
+</p>
+
 <h2 id="accessibility">Accessibility Improvements</h2>
 
 <p>
@@ -487,7 +492,7 @@
   running in device owner mode, the <code>DISALLOW_ADD_USER</code> restriction
   is automatically set. This prevents users from creating unmanaged secondary
   users. In addition, the <code>CreateUser()</code> and
-  <code>createAndInitial()</code> methods are deprecated; the new
+  <code>createAndInitializeUser()</code> methods are deprecated; the new
   <code>DevicePolicyManager.createAndManageUser()</code> method replaces them.
   </li>
 
@@ -496,6 +501,10 @@
   <code>DevicePolicyManagewr.getWifiMacAddress()</code>. If Wi-Fi has never
   been enabled on the device, this method returns a value of {@code null}.
   </li>
+
+  <li>The Work Mode setting controls access to work apps. When work mode is off the
+  system launcher indicates work apps are unavailable by greying them out. Enabling
+  work mode again restores normal behavior.
 </ul>
 
 <p>
@@ -576,5 +585,33 @@
 which causes {@code ActivityThread.StopInfo} to throw a
 {@code RuntimeException} when your app targets Android N.
 </li>
+
+<li>
+If an app posts {@link java.lang.Runnable} tasks to a {@link android.view.View}, and
+the {@link android.view.View}
+is not attached to a window, the system
+queues the {@link java.lang.Runnable} task with the {@link android.view.View};
+the {@link java.lang.Runnable} task does not execute until the
+{@link android.view.View} is attached
+to a window. This behavior fixes the following bugs:
+<ul>
+   <li>If an app posted to a {@link android.view.View} from a thread other than the intended
+   window’s UI thread, the {@link java.lang.Runnable} may run on the wrong thread as a result.
+   </li>
+   <li>If the {@link java.lang.Runnable} task was posted from a thread other than
+   a looper thread, the app could expose the {@link java.lang.Runnable} task.</li>
+</ul>
+</li>
+
+<li>
+If an app on Android N with
+{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
+permission tries to delete a package, but a different app had installed that package,
+the system requires user confirmation. In this scenario, apps should expect
+{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
+as the return status when they invoke
+{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
+</li>
+
 </ul>
 
diff --git a/docs/html/preview/features/background-optimization.jd b/docs/html/preview/features/background-optimization.jd
index 810d283..ec02328 100644
--- a/docs/html/preview/features/background-optimization.jd
+++ b/docs/html/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
 page.title=Background Optimizations
 page.metaDescription=New restrictions to implicit broadcasts.
 page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/preview/features/data-saver.jd b/docs/html/preview/features/data-saver.jd
index d5cdf27..761556e 100644
--- a/docs/html/preview/features/data-saver.jd
+++ b/docs/html/preview/features/data-saver.jd
@@ -1,6 +1,7 @@
 page.title=Data Saver
 metaDescription=User-enabled data usage optimization.
 page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
 @jd:body
 
 <div id="qv-wrapper">
@@ -14,7 +15,7 @@
         <a href="#status">Checking Data Saver Preferences</a>
         <ol>
           <li>
-            <a href="#request-whitelist">Requesting Whitelist Permissions</a>
+            <a href="#request-whitelist">Requesting whitelist permissions</a>
           </li>
         </ol>
       </li>
@@ -138,15 +139,17 @@
   If your app needs to use data in the background, it can request whitelist
   permissions by sending a
   <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
-  (<code>"android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS"</code>)
-  intent with a <code>package:&lt;your-app-id&gt;</code> URI.
+  intent containing a URI of your app's package name: for example,
+  <code>package:MY_APP_ID</code>.
 </p>
 
 <p>
-  Sending the intent and URI launches the <strong>Settings</strong> app, and
-  displays your app's <strong>App Data Usage</strong> page to the user. The
-  user can then decide whether to enable background data for your app.
-  It is good practice to prompt the user before sending this intent.
+  Sending the intent and URI launches the <strong>Settings</strong> app and
+  displays data usage settings for your app. The user can then decide whether
+  to enable background data for your app. Before you send this intent, it is
+  good practice to first ask the user if they want to launch the
+  <strong>Settings</strong> app for the purpose of enabling background data
+  usage.
 </p>
 
 <h2 id="monitor-changes">
@@ -156,9 +159,8 @@
 <p>
   Apps can monitor changes to Data Saver preferences by creating a {@link
   android.content.BroadcastReceiver} to listen for {@code
-  ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} ({@code
-  "android.net.conn.RESTRICT_BACKGROUND_CHANGED"}) and dynamically registering
-  the receiver with {@link android.content.Context#registerReceiver
+  ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} and dynamically
+  registering the receiver with {@link android.content.Context#registerReceiver
   Context.registerReceiver()}. When an app receives this broadcast, it should
   <a href="#status">check if the new Data Saver preferences affect its
   permissions</a> by calling {@code
diff --git a/docs/html/preview/features/direct-boot.jd b/docs/html/preview/features/direct-boot.jd
index e6800fd..3d442d0 100644
--- a/docs/html/preview/features/direct-boot.jd
+++ b/docs/html/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
 page.title=Direct Boot
 page.keywords=preview,sdk,direct boot
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html/preview/features/icu4j-framework.jd b/docs/html/preview/features/icu4j-framework.jd
index 6698194..839c077 100644
--- a/docs/html/preview/features/icu4j-framework.jd
+++ b/docs/html/preview/features/icu4j-framework.jd
@@ -1,4 +1,5 @@
 page.title=ICU4J Android Framework APIs
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html/preview/features/multi-window.jd b/docs/html/preview/features/multi-window.jd
index 0773b32..fec0168 100644
--- a/docs/html/preview/features/multi-window.jd
+++ b/docs/html/preview/features/multi-window.jd
@@ -138,7 +138,9 @@
   When the user puts an app into multi-window mode, the system notifies the
   activity of a configuration change, as specified in <a href=
   "{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
-  Changes</a>. Essentially, this change has the same activity-lifecycle
+  Changes</a>. This also happens when the user resizes the app, or puts the app
+  back into full-screen mode.
+  Essentially, this change has the same activity-lifecycle
   implications as when the system notifies the app that the device has switched
   from portrait to landscape mode, except that the device dimensions are
   changed instead of just being swapped. As discussed in <a href=
diff --git a/docs/html/preview/features/multilingual-support.jd b/docs/html/preview/features/multilingual-support.jd
index 89ecd5d..ff21b52 100644
--- a/docs/html/preview/features/multilingual-support.jd
+++ b/docs/html/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
 page.title=Language and Locale
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/preview/features/notification-updates.jd b/docs/html/preview/features/notification-updates.jd
index b8dfbaa..0163337 100644
--- a/docs/html/preview/features/notification-updates.jd
+++ b/docs/html/preview/features/notification-updates.jd
@@ -204,6 +204,17 @@
   android.support.v4.app.RemoteInput}, you can update the reply history
   using the {@code setRemoteInputHistory()} method.
 </p>
+
+<p>
+  The notification must be either updated or cancelled after the app has
+  received remote input. When the user replies to a remote update
+  using Direct Reply,
+  do not cancel the notification. Instead, update the notification to display the user's reply.
+For notifications using {@code MessagingStyle}, you should add
+the reply as the latest message. When using other templates, you can
+append the user's reply to the remote-input history.
+</p>
+
 <h2 id="bundle">Bundled Notifications</h2>
 
 <p>Android N provides developers with a new way to represent
@@ -364,7 +375,7 @@
 
 </pre>
 
-<h2 id="style">Message Style</h2>
+<h2 id="style">Messaging Style</h2>
 <p>
   Android N introduces a new API for customizing the style of a notification.
   Using the <code>MessageStyle</code> class, you can change several of the
@@ -380,10 +391,9 @@
 <pre>
   Notification notification = new Notification.Builder()
              .setStyle(new Notification.MessagingStyle("Me")
-             .setConversationTitle("Team lunch")
-             .addMessage("Hi", timestamp1, null) // Pass in null for user.
-             .addMessage("What's up?", timestamp2, "Coworker")
-             .addMessage("Not much", timestamp3, null)
-             .addMessage("How about lunch?", timestamp4, "Coworker")
-             .setAllow());
-</pre>
\ No newline at end of file
+                 .setConversationTitle("Team lunch")
+                 .addMessage("Hi", timestamp1, null) // Pass in null for user.
+                 .addMessage("What's up?", timestamp2, "Coworker")
+                 .addMessage("Not much", timestamp3, null)
+                 .addMessage("How about lunch?", timestamp4, "Coworker"));
+</pre>
diff --git a/docs/html/preview/features/security-config.jd b/docs/html/preview/features/security-config.jd
index 42c4ff5..633c0e5 100644
--- a/docs/html/preview/features/security-config.jd
+++ b/docs/html/preview/features/security-config.jd
@@ -1,5 +1,6 @@
 page.title=Network Security Configuration
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html/preview/features/tv-recording-api.jd b/docs/html/preview/features/tv-recording-api.jd
index 65ab340..6619821 100644
--- a/docs/html/preview/features/tv-recording-api.jd
+++ b/docs/html/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
 page.title=TV Recording
 page.keywords=preview,sdk,tv,recording
 page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
 
 @jd:body
 
diff --git a/docs/html/preview/index.jd b/docs/html/preview/index.jd
index bce5dec..b0631ad 100644
--- a/docs/html/preview/index.jd
+++ b/docs/html/preview/index.jd
@@ -103,7 +103,18 @@
   </div><!-- end .wrap -->
 </div>
 
-<section class="dac-section dac-light"><div class="wrap">
+<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
+  <h2 class="norule">Latest</h2>
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+    data-sortOrder="-timestamp"
+    data-cardSizes="6x6"
+    data-items-per-page="6"
+    data-maxResults="15"
+    data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray"><div class="wrap">
   <h1 class="dac-section-title">Resources</h1>
   <div class="dac-section-subtitle">
     Essential information to help you get your apps ready for Android N.
diff --git a/docs/html/preview/overview.jd b/docs/html/preview/overview.jd
index 57b6b9b..0369490 100644
--- a/docs/html/preview/overview.jd
+++ b/docs/html/preview/overview.jd
@@ -152,7 +152,7 @@
 
 <ul>
   <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (initial release, alpha)</li>
-  <li><strong><a href="{@docRoot}preview/support.html">Preview 2</a></strong> (incremental update, beta)</li>
+  <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (incremental update, alpha)</li>
   <li><strong>Preview 3</strong> (incremental update, beta)</li>
   <li><strong>Preview 4</strong> (final APIs and official SDK, Play publishing)</li>
   <li><strong>Preview 5</strong> (near-final system images for final testing)</li>
@@ -218,7 +218,7 @@
 
 <h3 id="sdk_tools">SDK tools</h3>
 
-<p>You can download these components through the SDK Manager in <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a>:</p>
+<p>You can download these components through the SDK Manager in <a href="{@docRoot}studio/intro/update.html">Android Studio</a>:</p>
 
 <ul>
   <li> N Developer Preview <strong>SDK and tools</strong>
diff --git a/docs/html/preview/support.jd b/docs/html/preview/support.jd
index 55f95d6..83ecde2 100644
--- a/docs/html/preview/support.jd
+++ b/docs/html/preview/support.jd
@@ -46,8 +46,8 @@
 
   <dt><a href="{@docRoot}preview/api-overview.html#tile_api">Quick
     Settings Tile API</a></dt>
-  <dd>Tile mode is now controlled by the activity's metadata. (Previously, tile
-    mode was controlled by the return value of
+  <dd>The system now uses the activity's metadata to decide on the tile mode.
+    (Previously, tile mode was determined by the return value of
     <code>TileService.onTileAdded()</code>.) For more information, see
     <code>TileService.META_DATA_ACTIVE_TILE</code> in the downloadable
     <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
diff --git a/docs/html/reference/android/support/wearable/watchface/CanvasWatchFaceService.Engine.html b/docs/html/reference/android/support/wearable/watchface/CanvasWatchFaceService.Engine.html
index 7dd4cf4..e38534a 100644
--- a/docs/html/reference/android/support/wearable/watchface/CanvasWatchFaceService.Engine.html
+++ b/docs/html/reference/android/support/wearable/watchface/CanvasWatchFaceService.Engine.html
@@ -126,7 +126,7 @@
     <meta name="subcategory" value="reference" />
 
 
-      <meta name="book_path" value="/reference/android/support/weakable/_book.yaml" />
+      <meta name="book_path" value="/reference/android/support/wearable/_book.yaml" />
 
 
 
diff --git a/docs/html/reference/packages-wearable-support.html b/docs/html/reference/packages-wearable-support.html
index 19a785b..aff2e34 100644
--- a/docs/html/reference/packages-wearable-support.html
+++ b/docs/html/reference/packages-wearable-support.html
@@ -351,7 +351,7 @@
                es-lang="Referencia">Reference</a>
           </li>
           <li class="dac-nav-item tools">
-            <a class="dac-nav-link" href="../sdk/index.html"
+            <a class="dac-nav-link" href="../studio/index.html"
                zh-tw-lang="相關工具"
                zh-cn-lang="工具"
                ru-lang="Инструменты"
diff --git a/docs/html/samples/index.jd b/docs/html/samples/index.jd
index 267c273..76ea573 100644
--- a/docs/html/samples/index.jd
+++ b/docs/html/samples/index.jd
@@ -52,7 +52,7 @@
 
   <ol>
     <li>Unpack the downloaded project package.</li>
-    <li>In <a href="{@docRoot}sdk/installing/studio.html">Android Studio</a>, chose
+    <li>In <a href="{@docRoot}studio/index.html">Android Studio</a>, chose
     <strong>File &gt; Import Project</strong> and select the root folder of the unpacked project.
       <p>Android Studio may ask you to choose the type of project you are importing.
         If this is the case, make sure to choose <strong>Import project from
diff --git a/docs/html/sdk/1.0_r1/installing.jd b/docs/html/sdk/1.0_r1/installing.jd
index 2ea04e4..38c2a1a 100644
--- a/docs/html/sdk/1.0_r1/installing.jd
+++ b/docs/html/sdk/1.0_r1/installing.jd
@@ -1,8 +1,8 @@
 @jd:body
 
 <script type="text/javascript">
-  document.location=toRoot+"sdk/installing.html"
+  document.location=toRoot+"studio/index.html"
 </script>
 
 <p>You should have already been redirected by your browser. Please go to
-<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
+<a href="{@docRoot}studio/index.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.0_r2/installing.jd b/docs/html/sdk/1.0_r2/installing.jd
index 2ea04e4..38c2a1a 100644
--- a/docs/html/sdk/1.0_r2/installing.jd
+++ b/docs/html/sdk/1.0_r2/installing.jd
@@ -1,8 +1,8 @@
 @jd:body
 
 <script type="text/javascript">
-  document.location=toRoot+"sdk/installing.html"
+  document.location=toRoot+"studio/index.html"
 </script>
 
 <p>You should have already been redirected by your browser. Please go to
-<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
+<a href="{@docRoot}studio/index.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.1_r1/installing.jd b/docs/html/sdk/1.1_r1/installing.jd
index 2ea04e4..38c2a1a 100644
--- a/docs/html/sdk/1.1_r1/installing.jd
+++ b/docs/html/sdk/1.1_r1/installing.jd
@@ -1,8 +1,8 @@
 @jd:body
 
 <script type="text/javascript">
-  document.location=toRoot+"sdk/installing.html"
+  document.location=toRoot+"studio/index.html"
 </script>
 
 <p>You should have already been redirected by your browser. Please go to
-<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
+<a href="{@docRoot}studio/index.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.5_r1/installing.jd b/docs/html/sdk/1.5_r1/installing.jd
index 2ea04e4..38c2a1a 100644
--- a/docs/html/sdk/1.5_r1/installing.jd
+++ b/docs/html/sdk/1.5_r1/installing.jd
@@ -1,8 +1,8 @@
 @jd:body
 
 <script type="text/javascript">
-  document.location=toRoot+"sdk/installing.html"
+  document.location=toRoot+"studio/index.html"
 </script>
 
 <p>You should have already been redirected by your browser. Please go to
-<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
+<a href="{@docRoot}studio/index.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.5_r2/installing.jd b/docs/html/sdk/1.5_r2/installing.jd
index 2ea04e4..38c2a1a 100644
--- a/docs/html/sdk/1.5_r2/installing.jd
+++ b/docs/html/sdk/1.5_r2/installing.jd
@@ -1,8 +1,8 @@
 @jd:body
 
 <script type="text/javascript">
-  document.location=toRoot+"sdk/installing.html"
+  document.location=toRoot+"studio/index.html"
 </script>
 
 <p>You should have already been redirected by your browser. Please go to
-<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
+<a href="{@docRoot}studio/index.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.5_r3/installing.jd b/docs/html/sdk/1.5_r3/installing.jd
index 2ea04e4..38c2a1a 100644
--- a/docs/html/sdk/1.5_r3/installing.jd
+++ b/docs/html/sdk/1.5_r3/installing.jd
@@ -1,8 +1,8 @@
 @jd:body
 
 <script type="text/javascript">
-  document.location=toRoot+"sdk/installing.html"
+  document.location=toRoot+"studio/index.html"
 </script>
 
 <p>You should have already been redirected by your browser. Please go to
-<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
+<a href="{@docRoot}studio/index.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/1.6_r1/installing.jd b/docs/html/sdk/1.6_r1/installing.jd
index 2ea04e4..38c2a1a 100644
--- a/docs/html/sdk/1.6_r1/installing.jd
+++ b/docs/html/sdk/1.6_r1/installing.jd
@@ -1,8 +1,8 @@
 @jd:body
 
 <script type="text/javascript">
-  document.location=toRoot+"sdk/installing.html"
+  document.location=toRoot+"studio/index.html"
 </script>
 
 <p>You should have already been redirected by your browser. Please go to
-<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
+<a href="{@docRoot}studio/index.html">Installing the Android SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd
index d69697a..8f124a5 100644
--- a/docs/html/sdk/RELEASENOTES.jd
+++ b/docs/html/sdk/RELEASENOTES.jd
@@ -45,8 +45,8 @@
 </ul>
 
 <p>To get started with the SDK, review the Quick Start summary on the <a
-href="{@docRoot}sdk/index.html">Android SDK download page</a> or read <a
-href="{@docRoot}sdk/installing/index.html">Installing the SDK</a> for detailed
+href="{@docRoot}studio/index.html">Android SDK download page</a> or read <a
+href="{@docRoot}studio/install.html">Installing the SDK</a> for detailed
 installation instructions. </p>
 
 
@@ -204,7 +204,7 @@
 
 <p>For driver installation or
 upgrade instructions, see  <a
-href="{@docRoot}sdk/win-usb.html">USB Driver for Windows</a>.</p>
+href="{@docRoot}studio/run/win-usb.html">USB Driver for Windows</a>.</p>
 </p>
 
 <h3>Emulator Skins, Android 1.6 Platform</h3>
@@ -445,7 +445,7 @@
 
 <p>For driver installation or
 upgrade instructions, see  <a
-href="{@docRoot}sdk/win-usb.html">USB Driver for Windows</a>.</p>
+href="{@docRoot}studio/run/win-usb.html">USB Driver for Windows</a>.</p>
 </p>
 
 <h3>Resolved Issues, Changes</h3>
diff --git a/docs/html/sdk/download.jd b/docs/html/sdk/download.jd
index 52432cf..5152ba3 100644
--- a/docs/html/sdk/download.jd
+++ b/docs/html/sdk/download.jd
@@ -34,7 +34,7 @@
 SDK.</p>
     <p class="note"><strong>Note:</strong> You must agree to this license agreement in order to
 download one of the archived SDKs, because these SDK packages contain Google software (whereas, the
-<a href="http://developer.android.com/sdk/index.html">current SDK</a> packages do not require a
+<a href="http://developer.android.com/studio/index.html">current SDK</a> packages do not require a
 license agreement, because they contain only the open sourced SDK tools).</p>
 
   <iframe id="terms" style="border:1px solid #888;margin:0 0 1em;height:400px;width:100%;"
@@ -72,7 +72,7 @@
 recommended. We no longer maintain documentation about how to install these archived SDKs nor
 support the tools contained within.</p>
   <p>We recommend that you instead download the latest <a
-href="http://developer.android.com/sdk/index.html">Android SDK starter package</a>, which includes
+href="http://developer.android.com/studio/index.html">Android SDK starter package</a>, which includes
 the latest SDK tools and allows you to develop against any version of the Android platform, back to
 Android 1.1.</p>
 </div>
diff --git a/docs/html/sdk/older_releases.jd b/docs/html/sdk/older_releases.jd
index 94baa92..bb64feb 100644
--- a/docs/html/sdk/older_releases.jd
+++ b/docs/html/sdk/older_releases.jd
@@ -9,14 +9,14 @@
 
 <div class="special">
 <p>If you are just starting to develop applications for Android, please
-download the current <a href="{@docRoot}sdk/index.html">Android
+download the current <a href="{@docRoot}studio/index.html">Android
 SDK</a>. With the current Android SDK, you can add any current and previous
 version of the Android platform as a component and use it for
 development and testing.</p>
 <p>If you already have an Android SDK for platform version 1.6 or newer, then
 you do not need to install a new SDK&mdash;especially not one from this page.
 You should install older platforms as components of your existing SDK.
-See <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
+See <a href="{@docRoot}studio/intro/update.html">Exploring the SDK</a>.</p>
 </div>
 
 
@@ -30,7 +30,7 @@
 the Android platfrom as an individual component.</p>
 
 <p>Please download the current <a
-href="http://developer.android.com/sdk/index.html">Android SDK</a>.</p>
+href="http://developer.android.com/studio/index.html">Android SDK</a>.</p>
 
 
 <h3>Release 1.6 r1</h3>
diff --git a/docs/html/sdk/sdk_vars.cs b/docs/html/sdk/sdk_vars.cs
index 6e58ddd..32fdb0a 100644
--- a/docs/html/sdk/sdk_vars.cs
+++ b/docs/html/sdk/sdk_vars.cs
@@ -1,47 +1,4 @@
 <?cs
-set:studio.version='2.1.0.9' ?><?cs
-set:studio.release.date='April 26, 2016' ?><?cs
-
-
-set:studio.linux_bundle_download='android-studio-ide-143.2790544-linux.zip' ?><?cs
-set:studio.linux_bundle_bytes='298122012' ?><?cs
-set:studio.linux_bundle_checksum='45dad9b76ad0506c354483aaa67ea0e2468d03a5' ?><?cs
-
-set:studio.mac_bundle_download='android-studio-ide-143.2790544-mac.dmg' ?><?cs
-set:studio.mac_bundle_bytes='298589307' ?><?cs
-set:studio.mac_bundle_checksum='d667d93ae2e4e0f3fc1b95743329a46222dbf11d' ?><?cs
-
-set:studio.win_bundle_download='android-studio-ide-143.2790544-windows.zip' ?><?cs
-set:studio.win_bundle_bytes='300627540' ?><?cs
-set:studio.win_bundle_checksum='9689ba415e5f09e2dcf5263ea302e7b1d98a8fc6' ?><?cs
-
-set:studio.win_bundle_exe_download='android-studio-bundle-143.2790544-windows.exe' ?><?cs
-set:studio.win_bundle_exe_bytes='1238568304' ?><?cs
-set:studio.win_bundle_exe_checksum='c6abe7980dbb7d1d9887f7341a2942c9e506f891' ?><?cs
-
-set:studio.win_notools_exe_download='android-studio-ide-143.2790544-windows.exe' ?><?cs
-set:studio.win_notools_exe_bytes='283804056' ?><?cs
-set:studio.win_notools_exe_checksum='a2065ba737ddcfb96f4921fee6a038278f46d2a7' ?><?cs
-
-
-
-set:sdk.linux_download='android-sdk_r24.4.1-linux.tgz' ?><?cs
-set:sdk.linux_bytes='326412652' ?><?cs
-set:sdk.linux_checksum='725bb360f0f7d04eaccff5a2d57abdd49061326d' ?><?cs
-
-set:sdk.mac_download='android-sdk_r24.4.1-macosx.zip' ?><?cs
-set:sdk.mac_bytes='102781947' ?><?cs
-set:sdk.mac_checksum='85a9cccb0b1f9e6f1f616335c5f07107553840cd' ?><?cs
-
-set:sdk.win_download='android-sdk_r24.4.1-windows.zip' ?><?cs
-set:sdk.win_bytes='199701062' ?><?cs
-set:sdk.win_checksum='66b6a6433053c152b22bf8cab19c0f3fef4eba49' ?><?cs
-set:sdk.win_installer='installer_r24.4.1-windows.exe' ?><?cs
-set:sdk.win_installer_bytes='151659917' ?><?cs
-set:sdk.win_installer_checksum='f9b59d72413649d31e633207e31f456443e7ea0b' ?><?cs
-
-
-
 set:ndk.mac64_download='android-ndk-r11c-darwin-x86_64.zip' ?><?cs
 set:ndk.mac64_bytes='772428792' ?><?cs
 set:ndk.mac64_checksum='4ce8e7ed8dfe08c5fe58aedf7f46be2a97564696' ?><?cs
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
deleted file mode 100644
index cd87d1c..0000000
--- a/docs/html/sitemap.txt
+++ /dev/null
@@ -1,6747 +0,0 @@
-http://developer.android.com/
-http://developer.android.com/index.html
-http://developer.android.com/design/index.html
-http://developer.android.com/develop/index.html
-http://developer.android.com/distribute/index.html
-http://developer.android.com/about/index.html
-http://developer.android.com/design/style/index.html
-http://developer.android.com/design/patterns/index.html
-http://developer.android.com/design/building-blocks/index.html
-http://developer.android.com/design/downloads/index.html
-http://developer.android.com/design/videos/index.html
-http://developer.android.com/training/index.html
-http://developer.android.com/guide/components/index.html
-http://developer.android.com/reference/packages.html
-http://developer.android.com/tools/index.html
-http://developer.android.com/sdk/index.html
-http://developer.android.com/google/index.html
-http://developer.android.com/distribute/googleplay/publish/index.html
-http://developer.android.com/distribute/googleplay/promote/index.html
-http://developer.android.com/distribute/essentials/quality/index.html
-http://developer.android.com/distribute/stories/index.html
-http://developer.android.com/distribute/open.html
-http://developer.android.com/about/versions/jelly-bean.html
-http://developer.android.com/support.html
-http://developer.android.com/legal.html
-http://developer.android.com/license.html
-http://developer.android.com/design/get-started/creative-vision.html
-http://developer.android.com/design/get-started/principles.html
-http://developer.android.com/design/get-started/ui-overview.html
-http://developer.android.com/design/style/devices-displays.html
-http://developer.android.com/design/style/themes.html
-http://developer.android.com/design/style/touch-feedback.html
-http://developer.android.com/design/style/metrics-grids.html
-http://developer.android.com/design/style/typography.html
-http://developer.android.com/design/style/color.html
-http://developer.android.com/design/style/iconography.html
-http://developer.android.com/design/style/writing.html
-http://developer.android.com/design/patterns/new.html
-http://developer.android.com/design/patterns/gestures.html
-http://developer.android.com/design/patterns/app-structure.html
-http://developer.android.com/design/patterns/navigation.html
-http://developer.android.com/design/patterns/actionbar.html
-http://developer.android.com/design/patterns/multi-pane-layouts.html
-http://developer.android.com/design/patterns/swipe-views.html
-http://developer.android.com/design/patterns/selection.html
-http://developer.android.com/design/patterns/confirming-acknowledging.html
-http://developer.android.com/design/patterns/notifications.html
-http://developer.android.com/design/patterns/widgets.html
-http://developer.android.com/design/patterns/settings.html
-http://developer.android.com/design/patterns/help.html
-http://developer.android.com/design/patterns/compatibility.html
-http://developer.android.com/design/patterns/accessibility.html
-http://developer.android.com/design/patterns/pure-android.html
-http://developer.android.com/design/building-blocks/tabs.html
-http://developer.android.com/design/building-blocks/lists.html
-http://developer.android.com/design/building-blocks/grid-lists.html
-http://developer.android.com/design/building-blocks/scrolling.html
-http://developer.android.com/design/building-blocks/spinners.html
-http://developer.android.com/design/building-blocks/buttons.html
-http://developer.android.com/design/building-blocks/text-fields.html
-http://developer.android.com/design/building-blocks/seek-bars.html
-http://developer.android.com/design/building-blocks/progress.html
-http://developer.android.com/design/building-blocks/switches.html
-http://developer.android.com/design/building-blocks/dialogs.html
-http://developer.android.com/design/building-blocks/pickers.html
-http://developer.android.com/google/play-services/maps.html
-http://developer.android.com/distribute/essentials/quality/tablet.html
-http://developer.android.com/distribute/stories/tablets.html
-http://developer.android.com/distribute/essentials/quality/core.html
-http://developer.android.com/guide/topics/ui/notifiers/notifications.html
-http://developer.android.com/guide/topics/ui/dialogs.html
-http://developer.android.com/downloads/design/Android_Design_Downloads_20120823.zip
-http://developer.android.com/downloads/design/Android_Design_Fireworks_Stencil_20120814.png
-http://developer.android.com/downloads/design/Android_Design_Illustrator_Vectors_20120814.ai
-http://developer.android.com/downloads/design/Android_Design_OmniGraffle_Stencil_20120814.graffle
-http://developer.android.com/downloads/design/Android_Design_Holo_Widgets_20120814.zip
-http://developer.android.com/downloads/design/Android_Design_Icons_20130926.zip
-http://developer.android.com/downloads/design/Roboto_Hinted_20120823.zip
-http://developer.android.com/downloads/design/Roboto_Specimen_Book_20111129.pdf
-http://developer.android.com/downloads/design/Android_Design_Color_Swatches_20120229.zip
-http://developer.android.com/sdk/installing/bundle.html
-http://developer.android.com/sdk/installing/index.html
-http://developer.android.com/sdk/installing/installing-adt.html
-http://developer.android.com/sdk/installing/adding-packages.html
-http://developer.android.com/sdk/exploring.html
-http://developer.android.com/tools/sdk/ndk/index.html
-http://developer.android.com/tools/workflow/index.html
-http://developer.android.com/tools/devices/index.html
-http://developer.android.com/tools/devices/managing-avds.html
-http://developer.android.com/tools/devices/managing-avds-cmdline.html
-http://developer.android.com/tools/devices/emulator.html
-http://developer.android.com/tools/device.html
-http://developer.android.com/tools/projects/index.html
-http://developer.android.com/tools/projects/projects-eclipse.html
-http://developer.android.com/tools/projects/projects-cmdline.html
-http://developer.android.com/tools/building/index.html
-http://developer.android.com/tools/building/building-eclipse.html
-http://developer.android.com/tools/building/building-cmdline.html
-http://developer.android.com/tools/testing/index.html
-http://developer.android.com/tools/testing/testing_android.html
-http://developer.android.com/tools/testing/testing_eclipse.html
-http://developer.android.com/tools/testing/testing_otheride.html
-http://developer.android.com/tools/testing/activity_testing.html
-http://developer.android.com/tools/testing/service_testing.html
-http://developer.android.com/tools/testing/contentprovider_testing.html
-http://developer.android.com/tools/testing/testing_accessibility.html
-http://developer.android.com/tools/testing/testing_ui.html
-http://developer.android.com/tools/testing/what_to_test.html
-http://developer.android.com/tools/testing/activity_test.html
-http://developer.android.com/tools/debugging/index.html
-http://developer.android.com/tools/debugging/debugging-projects.html
-http://developer.android.com/tools/debugging/debugging-projects-cmdline.html
-http://developer.android.com/tools/debugging/ddms.html
-http://developer.android.com/tools/debugging/debugging-log.html
-http://developer.android.com/tools/debugging/improving-w-lint.html
-http://developer.android.com/tools/debugging/debugging-ui.html
-http://developer.android.com/tools/debugging/debugging-tracing.html
-http://developer.android.com/tools/debugging/systrace.html
-http://developer.android.com/tools/debugging/debugging-devtools.html
-http://developer.android.com/tools/publishing/publishing_overview.html
-http://developer.android.com/tools/publishing/preparing.html
-http://developer.android.com/tools/publishing/versioning.html
-http://developer.android.com/tools/publishing/app-signing.html
-http://developer.android.com/tools/help/index.html
-http://developer.android.com/tools/help/adb.html
-http://developer.android.com/tools/help/adt.html
-http://developer.android.com/tools/help/android.html
-http://developer.android.com/tools/help/avd-manager.html
-http://developer.android.com/tools/help/bmgr.html
-http://developer.android.com/tools/help/monitor.html
-http://developer.android.com/tools/help/dmtracedump.html
-http://developer.android.com/tools/help/draw9patch.html
-http://developer.android.com/tools/help/emulator.html
-http://developer.android.com/tools/help/etc1tool.html
-http://developer.android.com/tools/help/hierarchy-viewer.html
-http://developer.android.com/tools/help/hprof-conv.html
-http://developer.android.com/tools/help/jobb.html
-http://developer.android.com/tools/help/lint.html
-http://developer.android.com/tools/help/logcat.html
-http://developer.android.com/tools/help/mksdcard.html
-http://developer.android.com/tools/help/monkey.html
-http://developer.android.com/tools/help/monkeyrunner_concepts.html
-http://developer.android.com/tools/help/MonkeyDevice.html
-http://developer.android.com/tools/help/MonkeyImage.html
-http://developer.android.com/tools/help/MonkeyRunner.html
-http://developer.android.com/tools/help/proguard.html
-http://developer.android.com/tools/help/sdk-manager.html
-http://developer.android.com/tools/help/systrace.html
-http://developer.android.com/tools/help/gltracer.html
-http://developer.android.com/tools/help/traceview.html
-http://developer.android.com/tools/help/uiautomator/index.html
-http://developer.android.com/tools/help/uiautomator/IAutomationSupport.html
-http://developer.android.com/tools/help/uiautomator/UiAutomatorTestCase.html
-http://developer.android.com/tools/help/uiautomator/UiCollection.html
-http://developer.android.com/tools/help/uiautomator/UiDevice.html
-http://developer.android.com/tools/help/uiautomator/UiObject.html
-http://developer.android.com/tools/help/uiautomator/UiObjectNotFoundException.html
-http://developer.android.com/tools/help/uiautomator/UiScrollable.html
-http://developer.android.com/tools/help/uiautomator/UiSelector.html
-http://developer.android.com/tools/help/uiautomator/UiWatcher.html
-http://developer.android.com/tools/help/zipalign.html
-http://developer.android.com/tools/revisions/index.html
-http://developer.android.com/tools/sdk/tools-notes.html
-http://developer.android.com/tools/sdk/eclipse-adt.html
-http://developer.android.com/tools/revisions/platforms.html
-http://developer.android.com/tools/extras/index.html
-http://developer.android.com/tools/support-library/index.html
-http://developer.android.com/tools/extras/oem-usb.html
-http://developer.android.com/tools/samples/index.html
-http://developer.android.com/tools/adk/index.html
-http://developer.android.com/tools/adk/adk2.html
-http://developer.android.com/tools/adk/adk.html
-http://developer.android.com/distribute/googleplay/about/visibility.html
-http://developer.android.com/distribute/googleplay/about/monetizing.html
-http://developer.android.com/distribute/googleplay/about/distribution.html
-http://developer.android.com/distribute/googleplay/start.html
-http://developer.android.com/distribute/googleplay/publish/console.html
-http://developer.android.com/distribute/tools/launch-checklist.html
-http://developer.android.com/distribute/tools/promote/linking.html
-http://developer.android.com/distribute/googleplay/promote/badges.html
-http://developer.android.com/distribute/promote/device-art.html
-http://developer.android.com/distribute/tools/promote/brand.html
-http://developer.android.com/distribute/googleplay/strategies/app-quality.html
-http://developer.android.com/google/play/billing/index.html
-http://developer.android.com/google/play/licensing/index.html
-http://developer.android.com/about/start.html
-http://developer.android.com/about/versions/android-4.2.html
-http://developer.android.com/about/versions/android-4.1.html
-http://developer.android.com/about/versions/android-4.0-highlights.html
-http://developer.android.com/about/versions/android-4.0.3.html
-http://developer.android.com/about/versions/android-4.0.html
-http://developer.android.com/about/versions/android-3.0-highlights.html
-http://developer.android.com/about/versions/android-3.2.html
-http://developer.android.com/about/versions/android-3.1.html
-http://developer.android.com/about/versions/android-3.0.html
-http://developer.android.com/about/versions/android-2.3-highlights.html
-http://developer.android.com/about/versions/android-2.3.4.html
-http://developer.android.com/about/versions/android-2.3.3.html
-http://developer.android.com/about/dashboards/index.html
-http://developer.android.com/google/gcm/index.html
-http://developer.android.com/guide/components/fundamentals.html
-http://developer.android.com/guide/components/activities.html
-http://developer.android.com/guide/components/fragments.html
-http://developer.android.com/guide/components/loaders.html
-http://developer.android.com/guide/components/tasks-and-back-stack.html
-http://developer.android.com/guide/components/services.html
-http://developer.android.com/guide/components/bound-services.html
-http://developer.android.com/guide/components/aidl.html
-http://developer.android.com/guide/topics/providers/content-providers.html
-http://developer.android.com/guide/topics/providers/content-provider-basics.html
-http://developer.android.com/guide/topics/providers/content-provider-creating.html
-http://developer.android.com/guide/topics/providers/calendar-provider.html
-http://developer.android.com/guide/topics/providers/contacts-provider.html
-http://developer.android.com/guide/components/intents-filters.html
-http://developer.android.com/guide/components/processes-and-threads.html
-http://developer.android.com/guide/topics/security/permissions.html
-http://developer.android.com/guide/topics/appwidgets/index.html
-http://developer.android.com/guide/topics/manifest/manifest-intro.html
-http://developer.android.com/guide/topics/manifest/action-element.html
-http://developer.android.com/guide/topics/manifest/activity-element.html
-http://developer.android.com/guide/topics/manifest/activity-alias-element.html
-http://developer.android.com/guide/topics/manifest/application-element.html
-http://developer.android.com/guide/topics/manifest/category-element.html
-http://developer.android.com/guide/topics/manifest/compatible-screens-element.html
-http://developer.android.com/guide/topics/manifest/data-element.html
-http://developer.android.com/guide/topics/manifest/grant-uri-permission-element.html
-http://developer.android.com/guide/topics/manifest/instrumentation-element.html
-http://developer.android.com/guide/topics/manifest/intent-filter-element.html
-http://developer.android.com/guide/topics/manifest/manifest-element.html
-http://developer.android.com/guide/topics/manifest/meta-data-element.html
-http://developer.android.com/guide/topics/manifest/path-permission-element.html
-http://developer.android.com/guide/topics/manifest/permission-element.html
-http://developer.android.com/guide/topics/manifest/permission-group-element.html
-http://developer.android.com/guide/topics/manifest/permission-tree-element.html
-http://developer.android.com/guide/topics/manifest/provider-element.html
-http://developer.android.com/guide/topics/manifest/receiver-element.html
-http://developer.android.com/guide/topics/manifest/service-element.html
-http://developer.android.com/guide/topics/manifest/supports-gl-texture-element.html
-http://developer.android.com/guide/topics/manifest/supports-screens-element.html
-http://developer.android.com/guide/topics/manifest/uses-configuration-element.html
-http://developer.android.com/guide/topics/manifest/uses-feature-element.html
-http://developer.android.com/guide/topics/manifest/uses-library-element.html
-http://developer.android.com/guide/topics/manifest/uses-permission-element.html
-http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
-http://developer.android.com/guide/topics/ui/index.html
-http://developer.android.com/guide/topics/ui/overview.html
-http://developer.android.com/guide/topics/ui/declaring-layout.html
-http://developer.android.com/guide/topics/ui/layout/linear.html
-http://developer.android.com/guide/topics/ui/layout/relative.html
-http://developer.android.com/guide/topics/ui/layout/listview.html
-http://developer.android.com/guide/topics/ui/layout/gridview.html
-http://developer.android.com/guide/topics/ui/controls.html
-http://developer.android.com/guide/topics/ui/controls/button.html
-http://developer.android.com/guide/topics/ui/controls/text.html
-http://developer.android.com/guide/topics/ui/controls/checkbox.html
-http://developer.android.com/guide/topics/ui/controls/radiobutton.html
-http://developer.android.com/guide/topics/ui/controls/togglebutton.html
-http://developer.android.com/guide/topics/ui/controls/spinner.html
-http://developer.android.com/guide/topics/ui/controls/pickers.html
-http://developer.android.com/guide/topics/ui/ui-events.html
-http://developer.android.com/guide/topics/ui/menus.html
-http://developer.android.com/guide/topics/ui/actionbar.html
-http://developer.android.com/guide/topics/ui/settings.html
-http://developer.android.com/guide/topics/ui/notifiers/toasts.html
-http://developer.android.com/guide/topics/search/index.html
-http://developer.android.com/guide/topics/search/search-dialog.html
-http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html
-http://developer.android.com/guide/topics/search/adding-custom-suggestions.html
-http://developer.android.com/guide/topics/search/searchable-config.html
-http://developer.android.com/guide/topics/ui/drag-drop.html
-http://developer.android.com/guide/topics/ui/accessibility/index.html
-http://developer.android.com/guide/topics/ui/accessibility/apps.html
-http://developer.android.com/guide/topics/ui/accessibility/checklist.html
-http://developer.android.com/guide/topics/ui/accessibility/services.html
-http://developer.android.com/guide/topics/ui/themes.html
-http://developer.android.com/guide/topics/ui/custom-components.html
-http://developer.android.com/guide/topics/resources/index.html
-http://developer.android.com/guide/topics/resources/overview.html
-http://developer.android.com/guide/topics/resources/providing-resources.html
-http://developer.android.com/guide/topics/resources/accessing-resources.html
-http://developer.android.com/guide/topics/resources/runtime-changes.html
-http://developer.android.com/guide/topics/resources/localization.html
-http://developer.android.com/guide/topics/resources/available-resources.html
-http://developer.android.com/guide/topics/resources/animation-resource.html
-http://developer.android.com/guide/topics/resources/color-list-resource.html
-http://developer.android.com/guide/topics/resources/drawable-resource.html
-http://developer.android.com/guide/topics/resources/layout-resource.html
-http://developer.android.com/guide/topics/resources/menu-resource.html
-http://developer.android.com/guide/topics/resources/string-resource.html
-http://developer.android.com/guide/topics/resources/style-resource.html
-http://developer.android.com/guide/topics/resources/more-resources.html
-http://developer.android.com/guide/topics/graphics/index.html
-http://developer.android.com/guide/topics/graphics/overview.html
-http://developer.android.com/guide/topics/graphics/prop-animation.html
-http://developer.android.com/guide/topics/graphics/view-animation.html
-http://developer.android.com/guide/topics/graphics/drawable-animation.html
-http://developer.android.com/guide/topics/graphics/2d-graphics.html
-http://developer.android.com/guide/topics/graphics/opengl.html
-http://developer.android.com/guide/topics/graphics/hardware-accel.html
-http://developer.android.com/guide/topics/renderscript/index.html
-http://developer.android.com/guide/topics/renderscript/compute.html
-http://developer.android.com/guide/topics/renderscript/advanced.html
-http://developer.android.com/guide/topics/renderscript/reference.html
-http://developer.android.com/guide/topics/media/index.html
-http://developer.android.com/guide/topics/media/mediaplayer.html
-http://developer.android.com/guide/appendix/media-formats.html
-http://developer.android.com/guide/topics/media/audio-capture.html
-http://developer.android.com/guide/topics/media/jetplayer.html
-http://developer.android.com/guide/topics/media/camera.html
-http://developer.android.com/guide/topics/sensors/index.html
-http://developer.android.com/guide/topics/location/index.html
-http://developer.android.com/guide/topics/location/strategies.html
-http://developer.android.com/guide/topics/sensors/sensors_overview.html
-http://developer.android.com/guide/topics/sensors/sensors_motion.html
-http://developer.android.com/guide/topics/sensors/sensors_position.html
-http://developer.android.com/guide/topics/sensors/sensors_environment.html
-http://developer.android.com/guide/topics/connectivity/index.html
-http://developer.android.com/guide/topics/connectivity/bluetooth.html
-http://developer.android.com/guide/topics/connectivity/nfc/index.html
-http://developer.android.com/guide/topics/connectivity/nfc/nfc.html
-http://developer.android.com/guide/topics/connectivity/nfc/advanced-nfc.html
-http://developer.android.com/guide/topics/connectivity/wifip2p.html
-http://developer.android.com/guide/topics/connectivity/usb/index.html
-http://developer.android.com/guide/topics/connectivity/usb/accessory.html
-http://developer.android.com/guide/topics/connectivity/usb/host.html
-http://developer.android.com/guide/topics/connectivity/sip.html
-http://developer.android.com/guide/topics/text/index.html
-http://developer.android.com/guide/topics/text/copy-paste.html
-http://developer.android.com/guide/topics/text/creating-input-method.html
-http://developer.android.com/guide/topics/text/spell-checker-framework.html
-http://developer.android.com/guide/topics/data/index.html
-http://developer.android.com/guide/topics/data/data-storage.html
-http://developer.android.com/guide/topics/data/backup.html
-http://developer.android.com/guide/topics/data/install-location.html
-http://developer.android.com/guide/topics/admin/index.html
-http://developer.android.com/guide/topics/admin/device-admin.html
-http://developer.android.com/guide/webapps/index.html
-http://developer.android.com/guide/webapps/overview.html
-http://developer.android.com/guide/webapps/targeting.html
-http://developer.android.com/guide/webapps/webview.html
-http://developer.android.com/guide/webapps/debugging.html
-http://developer.android.com/guide/webapps/best-practices.html
-http://developer.android.com/guide/practices/index.html
-http://developer.android.com/guide/practices/compatibility.html
-http://developer.android.com/guide/practices/screens_support.html
-http://developer.android.com/guide/practices/screens-distribution.html
-http://developer.android.com/guide/practices/screen-compat-mode.html
-http://developer.android.com/guide/practices/tablets-and-handsets.html
-http://developer.android.com/training/basics/activity-lifecycle/index.html
-http://developer.android.com/training/basics/fragments/index.html
-http://developer.android.com/training/sharing/index.html
-http://developer.android.com/training/basics/firstapp/index.html
-http://developer.android.com/training/basics/firstapp/creating-project.html
-http://developer.android.com/training/basics/firstapp/running-app.html
-http://developer.android.com/training/basics/firstapp/building-ui.html
-http://developer.android.com/training/basics/firstapp/starting-activity.html
-http://developer.android.com/training/basics/activity-lifecycle/starting.html
-http://developer.android.com/training/basics/activity-lifecycle/pausing.html
-http://developer.android.com/training/basics/activity-lifecycle/stopping.html
-http://developer.android.com/training/basics/activity-lifecycle/recreating.html
-http://developer.android.com/training/basics/supporting-devices/index.html
-http://developer.android.com/training/basics/supporting-devices/languages.html
-http://developer.android.com/training/basics/supporting-devices/screens.html
-http://developer.android.com/training/basics/supporting-devices/platforms.html
-http://developer.android.com/training/basics/fragments/creating.html
-http://developer.android.com/training/basics/fragments/fragment-ui.html
-http://developer.android.com/training/basics/fragments/communicating.html
-http://developer.android.com/training/basics/data-storage/index.html
-http://developer.android.com/training/basics/data-storage/shared-preferences.html
-http://developer.android.com/training/basics/data-storage/files.html
-http://developer.android.com/training/basics/data-storage/databases.html
-http://developer.android.com/training/basics/intents/index.html
-http://developer.android.com/training/basics/intents/sending.html
-http://developer.android.com/training/basics/intents/result.html
-http://developer.android.com/training/basics/intents/filters.html
-http://developer.android.com/training/sharing/send.html
-http://developer.android.com/training/sharing/receive.html
-http://developer.android.com/training/sharing/shareaction.html
-http://developer.android.com/training/building-multimedia.html
-http://developer.android.com/training/managing-audio/index.html
-http://developer.android.com/training/managing-audio/volume-playback.html
-http://developer.android.com/training/managing-audio/audio-focus.html
-http://developer.android.com/training/managing-audio/audio-output.html
-http://developer.android.com/training/camera/index.html
-http://developer.android.com/training/camera/photobasics.html
-http://developer.android.com/training/camera/videobasics.html
-http://developer.android.com/training/camera/cameradirect.html
-http://developer.android.com/training/building-graphics.html
-http://developer.android.com/training/displaying-bitmaps/index.html
-http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/process-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/display-bitmap.html
-http://developer.android.com/training/graphics/opengl/index.html
-http://developer.android.com/training/graphics/opengl/environment.html
-http://developer.android.com/training/graphics/opengl/shapes.html
-http://developer.android.com/training/graphics/opengl/draw.html
-http://developer.android.com/training/graphics/opengl/projection.html
-http://developer.android.com/training/graphics/opengl/motion.html
-http://developer.android.com/training/graphics/opengl/touch.html
-http://developer.android.com/training/animation/index.html
-http://developer.android.com/training/animation/crossfade.html
-http://developer.android.com/training/animation/screen-slide.html
-http://developer.android.com/training/animation/cardflip.html
-http://developer.android.com/training/animation/zoom.html
-http://developer.android.com/training/animation/layout.html
-http://developer.android.com/training/building-connectivity.html
-http://developer.android.com/training/connect-devices-wirelessly/index.html
-http://developer.android.com/training/connect-devices-wirelessly/nsd.html
-http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html
-http://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html
-http://developer.android.com/training/basics/network-ops/index.html
-http://developer.android.com/training/basics/network-ops/connecting.html
-http://developer.android.com/training/basics/network-ops/managing.html
-http://developer.android.com/training/basics/network-ops/xml.html
-http://developer.android.com/training/efficient-downloads/index.html
-http://developer.android.com/training/efficient-downloads/efficient-network-access.html
-http://developer.android.com/training/efficient-downloads/regular_updates.html
-http://developer.android.com/training/efficient-downloads/redundant_redundant.html
-http://developer.android.com/training/efficient-downloads/connectivity_patterns.html
-http://developer.android.com/training/cloudsync/index.html
-http://developer.android.com/training/cloudsync/backupapi.html
-http://developer.android.com/training/cloudsync/gcm.html
-http://developer.android.com/training/building-userinfo.html
-http://developer.android.com/training/id-auth/index.html
-http://developer.android.com/training/id-auth/identify.html
-http://developer.android.com/training/id-auth/authenticate.html
-http://developer.android.com/training/id-auth/custom_auth.html
-http://developer.android.com/training/basics/location/index.html
-http://developer.android.com/training/basics/location/locationmanager.html
-http://developer.android.com/training/basics/location/currentlocation.html
-http://developer.android.com/training/basics/location/geocoding.html
-http://developer.android.com/training/best-ux.html
-http://developer.android.com/training/design-navigation/index.html
-http://developer.android.com/training/design-navigation/screen-planning.html
-http://developer.android.com/training/design-navigation/multiple-sizes.html
-http://developer.android.com/training/design-navigation/descendant-lateral.html
-http://developer.android.com/training/design-navigation/ancestral-temporal.html
-http://developer.android.com/training/design-navigation/wireframing.html
-http://developer.android.com/training/implementing-navigation/index.html
-http://developer.android.com/training/implementing-navigation/lateral.html
-http://developer.android.com/training/implementing-navigation/ancestral.html
-http://developer.android.com/training/implementing-navigation/temporal.html
-http://developer.android.com/training/implementing-navigation/descendant.html
-http://developer.android.com/training/notify-user/index.html
-http://developer.android.com/training/notify-user/build-notification.html
-http://developer.android.com/training/notify-user/navigation.html
-http://developer.android.com/training/notify-user/managing.html
-http://developer.android.com/training/notify-user/expanded.html
-http://developer.android.com/training/notify-user/display-progress.html
-http://developer.android.com/training/search/index.html
-http://developer.android.com/training/search/setup.html
-http://developer.android.com/training/search/search.html
-http://developer.android.com/training/search/backward-compat.html
-http://developer.android.com/training/multiscreen/index.html
-http://developer.android.com/training/multiscreen/screensizes.html
-http://developer.android.com/training/multiscreen/screendensities.html
-http://developer.android.com/training/multiscreen/adaptui.html
-http://developer.android.com/training/tv/index.html
-http://developer.android.com/training/tv/optimizing-layouts-tv.html
-http://developer.android.com/training/tv/optimizing-navigation-tv.html
-http://developer.android.com/training/tv/unsupported-features-tv.html
-http://developer.android.com/training/custom-views/index.html
-http://developer.android.com/training/custom-views/create-view.html
-http://developer.android.com/training/custom-views/custom-drawing.html
-http://developer.android.com/training/custom-views/making-interactive.html
-http://developer.android.com/training/custom-views/optimizing-view.html
-http://developer.android.com/training/backward-compatible-ui/index.html
-http://developer.android.com/training/backward-compatible-ui/abstracting.html
-http://developer.android.com/training/backward-compatible-ui/new-implementation.html
-http://developer.android.com/training/backward-compatible-ui/older-implementation.html
-http://developer.android.com/training/backward-compatible-ui/using-component.html
-http://developer.android.com/training/accessibility/index.html
-http://developer.android.com/training/accessibility/accessible-app.html
-http://developer.android.com/training/accessibility/service.html
-http://developer.android.com/training/best-performance.html
-http://developer.android.com/training/articles/perf-tips.html
-http://developer.android.com/training/improving-layouts/index.html
-http://developer.android.com/training/improving-layouts/optimizing-layout.html
-http://developer.android.com/training/improving-layouts/reusing-layouts.html
-http://developer.android.com/training/improving-layouts/loading-ondemand.html
-http://developer.android.com/training/improving-layouts/smooth-scrolling.html
-http://developer.android.com/training/monitoring-device-state/index.html
-http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
-http://developer.android.com/training/monitoring-device-state/docking-monitoring.html
-http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
-http://developer.android.com/training/monitoring-device-state/manifest-receivers.html
-http://developer.android.com/training/articles/perf-anr.html
-http://developer.android.com/training/articles/perf-jni.html
-http://developer.android.com/training/articles/smp.html
-http://developer.android.com/training/best-security.html
-http://developer.android.com/training/articles/security-tips.html
-http://developer.android.com/training/enterprise/index.html
-http://developer.android.com/training/enterprise/device-management-policy.html
-http://developer.android.com/training/distribute.html
-http://developer.android.com/training/in-app-billing/index.html
-http://developer.android.com/training/in-app-billing/preparing-iab-app.html
-http://developer.android.com/training/in-app-billing/list-iab-products.html
-http://developer.android.com/training/in-app-billing/purchase-iab-products.html
-http://developer.android.com/training/in-app-billing/test-iab-app.html
-http://developer.android.com/training/multiple-apks/index.html
-http://developer.android.com/training/multiple-apks/api.html
-http://developer.android.com/training/multiple-apks/screensize.html
-http://developer.android.com/training/multiple-apks/texture.html
-http://developer.android.com/training/multiple-apks/multiple.html
-http://developer.android.com/training/monetization/index.html
-http://developer.android.com/training/monetization/ads-and-ux.html
-http://developer.android.com/reference/android/app/DialogFragment.html
-http://developer.android.com/reference/android/app/AlertDialog.html
-http://developer.android.com/reference/android/app/Dialog.html
-http://developer.android.com/reference/android/app/DatePickerDialog.html
-http://developer.android.com/reference/android/app/TimePickerDialog.html
-http://developer.android.com/reference/android/app/ProgressDialog.html
-http://developer.android.com/reference/android/widget/ProgressBar.html
-http://developer.android.com/reference/android/support/v4/app/DialogFragment.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.html
-http://developer.android.com/reference/android/app/AlertDialog.Builder.html
-http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html
-http://developer.android.com/reference/android/widget/ListAdapter.html
-http://developer.android.com/reference/android/support/v4/content/Loader.html
-http://developer.android.com/reference/java/util/ArrayList.html
-http://developer.android.com/reference/android/widget/EditText.html
-http://developer.android.com/reference/android/view/LayoutInflater.html
-http://developer.android.com/reference/android/app/Activity.html
-http://developer.android.com/reference/android/R.style.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.html
-http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html
-http://developer.android.com/reference/android/app/Fragment.html
-http://developer.android.com/reference/android/view/TouchDelegate.html
-http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
-http://developer.android.com/google/play/publishing/multiple-apks.html
-http://developer.android.com/google/play-services/index.html
-http://developer.android.com/google/play-services/setup.html
-http://developer.android.com/google/play-services/auth.html
-http://developer.android.com/google/play-services/plus.html
-http://developer.android.com/reference/gms-packages.html
-http://developer.android.com/google/play/billing/billing_overview.html
-http://developer.android.com/google/play/billing/api.html
-http://developer.android.com/google/play/billing/billing_integrate.html
-http://developer.android.com/google/play/billing/billing_reference.html
-http://developer.android.com/google/play/billing/v2/api.html
-http://developer.android.com/google/play/billing/v2/billing_integrate.html
-http://developer.android.com/google/play/billing/v2/billing_subscriptions.html
-http://developer.android.com/google/play/billing/v2/billing_reference.html
-http://developer.android.com/google/play/billing/billing_best_practices.html
-http://developer.android.com/google/play/billing/billing_testing.html
-http://developer.android.com/google/play/billing/billing_admin.html
-http://developer.android.com/google/play/billing/versions.html
-http://developer.android.com/google/play/dist.html
-http://developer.android.com/google/play/filters.html
-http://developer.android.com/google/play/expansion-files.html
-http://developer.android.com/google/play/licensing/overview.html
-http://developer.android.com/google/play/licensing/setting-up.html
-http://developer.android.com/google/play/licensing/adding-licensing.html
-http://developer.android.com/google/play/licensing/licensing-reference.html
-http://developer.android.com/google/gcm/gs.html
-http://developer.android.com/google/gcm/gcm.html
-http://developer.android.com/google/gcm/demo.html
-http://developer.android.com/google/gcm/adv.html
-http://developer.android.com/google/gcm/c2dm.html
-http://developer.android.com/reference/gcm-packages.html
-http://developer.android.com/google/backup/index.html
-http://developer.android.com/google/backup/signup.html
-http://developer.android.com/guide/practices/responsiveness.html
-http://developer.android.com/reference/android/os/StrictMode.html
-http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.Builder.html
-http://developer.android.com/resources/faq/troubleshooting.html
-http://developer.android.com/reference/android/content/Intent.html
-http://developer.android.com/reference/android/content/IntentFilter.html
-http://developer.android.com/reference/android/content/BroadcastReceiver.html
-http://developer.android.com/reference/android/content/pm/PackageManager.html
-http://developer.android.com/reference/android/content/Context.html
-http://developer.android.com/reference/android/content/ComponentName.html
-http://developer.android.com/reference/android/os/Bundle.html
-http://developer.android.com/guide/appendix/g-app-intents.html
-http://developer.android.com/resources/samples/index.html
-http://developer.android.com/resources/samples/NotePad/index.html
-http://developer.android.com/reference/android/view/Menu.html
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
-http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
-http://developer.android.com/reference/junit/framework/TestSuite.html
-http://developer.android.com/reference/android/test/package-summary.html
-http://developer.android.com/reference/junit/framework/TestCase.html
-http://developer.android.com/reference/android/test/InstrumentationTestCase.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.html
-http://developer.android.com/reference/java/lang/String.html
-http://developer.android.com/reference/android/content/res/Resources.html
-http://developer.android.com/reference/android/text/Html.html
-http://developer.android.com/reference/android/text/TextUtils.html
-http://developer.android.com/reference/android/animation/ValueAnimator.html
-http://developer.android.com/reference/android/animation/ObjectAnimator.html
-http://developer.android.com/reference/android/animation/TypeEvaluator.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html
-http://developer.android.com/reference/android/animation/TimeInterpolator.html
-http://developer.android.com/reference/android/view/animation/AccelerateDecelerateInterpolator.html
-http://developer.android.com/reference/android/animation/IntEvaluator.html
-http://developer.android.com/reference/android/view/View.html
-http://developer.android.com/reference/android/animation/package-summary.html
-http://developer.android.com/reference/android/view/animation/package-summary.html
-http://developer.android.com/reference/android/animation/Animator.html
-http://developer.android.com/reference/android/animation/AnimatorSet.html
-http://developer.android.com/reference/android/animation/FloatEvaluator.html
-http://developer.android.com/reference/android/animation/ArgbEvaluator.html
-http://developer.android.com/reference/android/view/animation/AccelerateInterpolator.html
-http://developer.android.com/reference/android/view/animation/AnticipateInterpolator.html
-http://developer.android.com/reference/android/view/animation/AnticipateOvershootInterpolator.html
-http://developer.android.com/reference/android/view/animation/BounceInterpolator.html
-http://developer.android.com/reference/android/view/animation/CycleInterpolator.html
-http://developer.android.com/reference/android/view/animation/DecelerateInterpolator.html
-http://developer.android.com/reference/android/view/animation/LinearInterpolator.html
-http://developer.android.com/reference/android/view/animation/OvershootInterpolator.html
-http://developer.android.com/reference/android/animation/ValueAnimator.AnimatorUpdateListener.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html
-http://developer.android.com/reference/android/animation/Animator.AnimatorListener.html
-http://developer.android.com/reference/android/animation/AnimatorListenerAdapter.html
-http://developer.android.com/reference/android/animation/LayoutTransition.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimationsByDefault.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animations_by_default.html
-http://developer.android.com/reference/android/animation/Keyframe.html
-http://developer.android.com/reference/android/animation/PropertyValuesHolder.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.html
-http://developer.android.com/reference/android/view/ViewPropertyAnimator.html
-http://developer.android.com/shareables/training/DeviceManagement.zip
-http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
-http://developer.android.com/reference/java/lang/SecurityException.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.html
-http://developer.android.com/reference/android/app/PendingIntent.html
-http://developer.android.com/reference/android/app/NotificationManager.html
-http://developer.android.com/reference/java/lang/Object.html
-http://developer.android.com/reference/android/app/Notification.html
-http://developer.android.com/reference/android/os/Build.html
-http://developer.android.com/reference/android/app/ActionBar.html
-http://developer.android.com/resources/samples/SpellChecker/SampleSpellCheckerService/index.html
-http://developer.android.com/resources/samples/SpellChecker/HelloSpellChecker/index.html
-http://developer.android.com/reference/android/service/textservice/SpellCheckerService.html
-http://developer.android.com/reference/android/app/Service.html
-http://developer.android.com/reference/android/service/textservice/SpellCheckerService.Session.html
-http://developer.android.com/reference/android/view/textservice/SentenceSuggestionsInfo.html
-http://developer.android.com/reference/android/Manifest.permission.html
-http://developer.android.com/reference/android/widget/TextView.html
-http://developer.android.com/shareables/training/TabCompat.zip
-http://developer.android.com/reference/java/lang/VerifyError.html
-http://developer.android.com/reference/android/app/ActionBar.Tab.html
-http://developer.android.com/reference/android/widget/LinearLayout.html
-http://developer.android.com/reference/android/widget/ListView.html
-http://developer.android.com/reference/android/widget/GridView.html
-http://developer.android.com/tools/help/layoutopt.html
-http://developer.android.com/reference/android/widget/RelativeLayout.html
-http://developer.android.com/reference/android/widget/ImageView.html
-http://developer.android.com/reference/android/widget/FrameLayout.html
-http://developer.android.com/reference/android/widget/ScrollView.html
-http://developer.android.com/reference/android/widget/GridLayout.html
-http://developer.android.com/resources/samples/SampleSyncAdapter/index.html
-http://developer.android.com/reference/android/accounts/AccountManager.html
-http://developer.android.com/reference/android/net/Uri.html
-http://developer.android.com/reference/java/util/List.html
-http://developer.android.com/reference/android/graphics/NinePatch.html
-http://developer.android.com/reference/android/hardware/usb/package-summary.html
-http://developer.android.com/reference/android/hardware/usb/UsbManager.html
-http://developer.android.com/reference/android/hardware/usb/UsbAccessory.html
-http://developer.android.com/reference/java/io/FileInputStream.html
-http://developer.android.com/reference/java/io/FileOutputStream.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
-http://developer.android.com/guide/practices/optimizing-for-3.0.html
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html
-http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
-http://developer.android.com/reference/junit/framework/Assert.html
-http://developer.android.com/reference/android/test/SingleLaunchActivityTestCase.html
-http://developer.android.com/reference/android/test/mock/package-summary.html
-http://developer.android.com/reference/android/test/mock/MockApplication.html
-http://developer.android.com/reference/android/test/ViewAsserts.html
-http://developer.android.com/shareables/training/Animations.zip
-http://developer.android.com/reference/android/R.integer.html
-http://developer.android.com/shareables/training/NotifyUser.zip
-http://developer.android.com/reference/android/os/PatternMatcher.html
-http://developer.android.com/reference/android/widget/TabWidget.html
-http://developer.android.com/reference/android/widget/TabHost.html
-http://developer.android.com/reference/android/app/FragmentTransaction.html
-http://developer.android.com/reference/android/app/FragmentManager.html
-http://developer.android.com/reference/android/app/FragmentManager.OnBackStackChangedListener.html
-http://developer.android.com/reference/android/webkit/WebView.html
-http://developer.android.com/reference/android/package-summary.html
-http://developer.android.com/reference/android/accessibilityservice/package-summary.html
-http://developer.android.com/reference/android/accounts/package-summary.html
-http://developer.android.com/reference/android/app/package-summary.html
-http://developer.android.com/reference/android/app/admin/package-summary.html
-http://developer.android.com/reference/android/app/backup/package-summary.html
-http://developer.android.com/reference/android/appwidget/package-summary.html
-http://developer.android.com/reference/android/bluetooth/package-summary.html
-http://developer.android.com/reference/android/content/package-summary.html
-http://developer.android.com/reference/android/content/pm/package-summary.html
-http://developer.android.com/reference/android/content/res/package-summary.html
-http://developer.android.com/reference/android/database/package-summary.html
-http://developer.android.com/reference/android/database/sqlite/package-summary.html
-http://developer.android.com/reference/android/drm/package-summary.html
-http://developer.android.com/reference/android/gesture/package-summary.html
-http://developer.android.com/reference/android/graphics/package-summary.html
-http://developer.android.com/reference/android/graphics/drawable/package-summary.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/package-summary.html
-http://developer.android.com/reference/android/hardware/package-summary.html
-http://developer.android.com/reference/android/hardware/display/package-summary.html
-http://developer.android.com/reference/android/hardware/input/package-summary.html
-http://developer.android.com/reference/android/inputmethodservice/package-summary.html
-http://developer.android.com/reference/android/location/package-summary.html
-http://developer.android.com/reference/android/media/package-summary.html
-http://developer.android.com/reference/android/media/audiofx/package-summary.html
-http://developer.android.com/reference/android/media/effect/package-summary.html
-http://developer.android.com/reference/android/mtp/package-summary.html
-http://developer.android.com/reference/android/net/package-summary.html
-http://developer.android.com/reference/android/net/http/package-summary.html
-http://developer.android.com/reference/android/net/nsd/package-summary.html
-http://developer.android.com/reference/android/net/rtp/package-summary.html
-http://developer.android.com/reference/android/net/sip/package-summary.html
-http://developer.android.com/reference/android/net/wifi/package-summary.html
-http://developer.android.com/reference/android/net/wifi/p2p/package-summary.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/package-summary.html
-http://developer.android.com/reference/android/nfc/package-summary.html
-http://developer.android.com/reference/android/nfc/tech/package-summary.html
-http://developer.android.com/reference/android/opengl/package-summary.html
-http://developer.android.com/reference/android/os/package-summary.html
-http://developer.android.com/reference/android/os/storage/package-summary.html
-http://developer.android.com/reference/android/preference/package-summary.html
-http://developer.android.com/reference/android/provider/package-summary.html
-http://developer.android.com/reference/android/renderscript/package-summary.html
-http://developer.android.com/reference/android/sax/package-summary.html
-http://developer.android.com/reference/android/security/package-summary.html
-http://developer.android.com/reference/android/service/dreams/package-summary.html
-http://developer.android.com/reference/android/service/textservice/package-summary.html
-http://developer.android.com/reference/android/service/wallpaper/package-summary.html
-http://developer.android.com/reference/android/speech/package-summary.html
-http://developer.android.com/reference/android/speech/tts/package-summary.html
-http://developer.android.com/reference/android/support/v13/app/package-summary.html
-http://developer.android.com/reference/android/support/v4/accessibilityservice/package-summary.html
-http://developer.android.com/reference/android/support/v4/app/package-summary.html
-http://developer.android.com/reference/android/support/v4/content/package-summary.html
-http://developer.android.com/reference/android/support/v4/content/pm/package-summary.html
-http://developer.android.com/reference/android/support/v4/database/package-summary.html
-http://developer.android.com/reference/android/support/v4/net/package-summary.html
-http://developer.android.com/reference/android/support/v4/os/package-summary.html
-http://developer.android.com/reference/android/support/v4/util/package-summary.html
-http://developer.android.com/reference/android/support/v4/view/package-summary.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/package-summary.html
-http://developer.android.com/reference/android/support/v4/widget/package-summary.html
-http://developer.android.com/reference/android/telephony/package-summary.html
-http://developer.android.com/reference/android/telephony/cdma/package-summary.html
-http://developer.android.com/reference/android/telephony/gsm/package-summary.html
-http://developer.android.com/reference/android/test/suitebuilder/package-summary.html
-http://developer.android.com/reference/android/text/package-summary.html
-http://developer.android.com/reference/android/text/format/package-summary.html
-http://developer.android.com/reference/android/text/method/package-summary.html
-http://developer.android.com/reference/android/text/style/package-summary.html
-http://developer.android.com/reference/android/text/util/package-summary.html
-http://developer.android.com/reference/android/util/package-summary.html
-http://developer.android.com/reference/android/view/package-summary.html
-http://developer.android.com/reference/android/view/accessibility/package-summary.html
-http://developer.android.com/reference/android/view/inputmethod/package-summary.html
-http://developer.android.com/reference/android/view/textservice/package-summary.html
-http://developer.android.com/reference/android/webkit/package-summary.html
-http://developer.android.com/reference/android/widget/package-summary.html
-http://developer.android.com/reference/dalvik/bytecode/package-summary.html
-http://developer.android.com/reference/dalvik/system/package-summary.html
-http://developer.android.com/reference/java/awt/font/package-summary.html
-http://developer.android.com/reference/java/beans/package-summary.html
-http://developer.android.com/reference/java/io/package-summary.html
-http://developer.android.com/reference/java/lang/package-summary.html
-http://developer.android.com/reference/java/lang/annotation/package-summary.html
-http://developer.android.com/reference/java/lang/ref/package-summary.html
-http://developer.android.com/reference/java/lang/reflect/package-summary.html
-http://developer.android.com/reference/java/math/package-summary.html
-http://developer.android.com/reference/java/net/package-summary.html
-http://developer.android.com/reference/java/nio/package-summary.html
-http://developer.android.com/reference/java/nio/channels/package-summary.html
-http://developer.android.com/reference/java/nio/channels/spi/package-summary.html
-http://developer.android.com/reference/java/nio/charset/package-summary.html
-http://developer.android.com/reference/java/nio/charset/spi/package-summary.html
-http://developer.android.com/reference/java/security/package-summary.html
-http://developer.android.com/reference/java/security/acl/package-summary.html
-http://developer.android.com/reference/java/security/cert/package-summary.html
-http://developer.android.com/reference/java/security/interfaces/package-summary.html
-http://developer.android.com/reference/java/security/spec/package-summary.html
-http://developer.android.com/reference/java/sql/package-summary.html
-http://developer.android.com/reference/java/text/package-summary.html
-http://developer.android.com/reference/java/util/package-summary.html
-http://developer.android.com/reference/java/util/concurrent/package-summary.html
-http://developer.android.com/reference/java/util/concurrent/atomic/package-summary.html
-http://developer.android.com/reference/java/util/concurrent/locks/package-summary.html
-http://developer.android.com/reference/java/util/jar/package-summary.html
-http://developer.android.com/reference/java/util/logging/package-summary.html
-http://developer.android.com/reference/java/util/prefs/package-summary.html
-http://developer.android.com/reference/java/util/regex/package-summary.html
-http://developer.android.com/reference/java/util/zip/package-summary.html
-http://developer.android.com/reference/javax/crypto/package-summary.html
-http://developer.android.com/reference/javax/crypto/interfaces/package-summary.html
-http://developer.android.com/reference/javax/crypto/spec/package-summary.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/package-summary.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/package-summary.html
-http://developer.android.com/reference/javax/net/package-summary.html
-http://developer.android.com/reference/javax/net/ssl/package-summary.html
-http://developer.android.com/reference/javax/security/auth/package-summary.html
-http://developer.android.com/reference/javax/security/auth/callback/package-summary.html
-http://developer.android.com/reference/javax/security/auth/login/package-summary.html
-http://developer.android.com/reference/javax/security/auth/x500/package-summary.html
-http://developer.android.com/reference/javax/security/cert/package-summary.html
-http://developer.android.com/reference/javax/sql/package-summary.html
-http://developer.android.com/reference/javax/xml/package-summary.html
-http://developer.android.com/reference/javax/xml/datatype/package-summary.html
-http://developer.android.com/reference/javax/xml/namespace/package-summary.html
-http://developer.android.com/reference/javax/xml/parsers/package-summary.html
-http://developer.android.com/reference/javax/xml/transform/package-summary.html
-http://developer.android.com/reference/javax/xml/transform/dom/package-summary.html
-http://developer.android.com/reference/javax/xml/transform/sax/package-summary.html
-http://developer.android.com/reference/javax/xml/transform/stream/package-summary.html
-http://developer.android.com/reference/javax/xml/validation/package-summary.html
-http://developer.android.com/reference/javax/xml/xpath/package-summary.html
-http://developer.android.com/reference/junit/framework/package-summary.html
-http://developer.android.com/reference/junit/runner/package-summary.html
-http://developer.android.com/reference/org/apache/http/package-summary.html
-http://developer.android.com/reference/org/apache/http/auth/package-summary.html
-http://developer.android.com/reference/org/apache/http/auth/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/entity/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/methods/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/protocol/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/utils/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/routing/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/util/package-summary.html
-http://developer.android.com/reference/org/apache/http/cookie/package-summary.html
-http://developer.android.com/reference/org/apache/http/cookie/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/entity/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/auth/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/client/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/conn/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/entity/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/io/package-summary.html
-http://developer.android.com/reference/org/apache/http/io/package-summary.html
-http://developer.android.com/reference/org/apache/http/message/package-summary.html
-http://developer.android.com/reference/org/apache/http/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/protocol/package-summary.html
-http://developer.android.com/reference/org/apache/http/util/package-summary.html
-http://developer.android.com/reference/org/json/package-summary.html
-http://developer.android.com/reference/org/w3c/dom/package-summary.html
-http://developer.android.com/reference/org/w3c/dom/ls/package-summary.html
-http://developer.android.com/reference/org/xml/sax/package-summary.html
-http://developer.android.com/reference/org/xml/sax/ext/package-summary.html
-http://developer.android.com/reference/org/xml/sax/helpers/package-summary.html
-http://developer.android.com/reference/org/xmlpull/v1/package-summary.html
-http://developer.android.com/reference/org/xmlpull/v1/sax2/package-summary.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSession.SpellCheckerSessionListener.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerInfo.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSession.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSubtype.html
-http://developer.android.com/reference/android/view/textservice/SuggestionsInfo.html
-http://developer.android.com/reference/android/view/textservice/TextInfo.html
-http://developer.android.com/reference/android/view/textservice/TextServicesManager.html
-http://developer.android.com/reference/android/os/Parcelable.html
-http://developer.android.com/reference/android/os/Parcelable.Creator.html
-http://developer.android.com/reference/android/os/Parcel.html
-http://developer.android.com/reference/java/lang/Class.html
-http://developer.android.com/shareables/training/OpenGLES.zip
-http://developer.android.com/reference/android/opengl/GLSurfaceView.html
-http://developer.android.com/reference/android/view/MotionEvent.html
-http://developer.android.com/reference/android/location/LocationManager.html
-http://developer.android.com/reference/android/location/LocationProvider.html
-http://developer.android.com/reference/com/google/android/gms/maps/MapView.html
-http://developer.android.com/reference/android/app/ActionBar.OnMenuVisibilityListener.html
-http://developer.android.com/reference/android/app/ActionBar.OnNavigationListener.html
-http://developer.android.com/reference/android/app/ActionBar.TabListener.html
-http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
-http://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener.html
-http://developer.android.com/reference/android/app/FragmentBreadCrumbs.OnBreadCrumbClickListener.html
-http://developer.android.com/reference/android/app/FragmentManager.BackStackEntry.html
-http://developer.android.com/reference/android/app/KeyguardManager.OnKeyguardExitResult.html
-http://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html
-http://developer.android.com/reference/android/app/PendingIntent.OnFinished.html
-http://developer.android.com/reference/android/app/SearchManager.OnCancelListener.html
-http://developer.android.com/reference/android/app/SearchManager.OnDismissListener.html
-http://developer.android.com/reference/android/app/TimePickerDialog.OnTimeSetListener.html
-http://developer.android.com/reference/android/app/ActionBar.LayoutParams.html
-http://developer.android.com/reference/android/app/ActivityGroup.html
-http://developer.android.com/reference/android/app/ActivityManager.html
-http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RecentTaskInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
-http://developer.android.com/reference/android/app/ActivityOptions.html
-http://developer.android.com/reference/android/app/AlarmManager.html
-http://developer.android.com/reference/android/app/AliasActivity.html
-http://developer.android.com/reference/android/app/Application.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.AnrInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.BatteryInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.CrashInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.RunningServiceInfo.html
-http://developer.android.com/reference/android/app/DownloadManager.html
-http://developer.android.com/reference/android/app/DownloadManager.Query.html
-http://developer.android.com/reference/android/app/DownloadManager.Request.html
-http://developer.android.com/reference/android/app/ExpandableListActivity.html
-http://developer.android.com/reference/android/app/Fragment.SavedState.html
-http://developer.android.com/reference/android/app/FragmentBreadCrumbs.html
-http://developer.android.com/reference/android/app/Instrumentation.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityResult.html
-http://developer.android.com/reference/android/app/IntentService.html
-http://developer.android.com/reference/android/app/KeyguardManager.html
-http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
-http://developer.android.com/reference/android/app/LauncherActivity.html
-http://developer.android.com/reference/android/app/LauncherActivity.IconResizer.html
-http://developer.android.com/reference/android/app/LauncherActivity.ListItem.html
-http://developer.android.com/reference/android/app/ListActivity.html
-http://developer.android.com/reference/android/app/ListFragment.html
-http://developer.android.com/reference/android/app/LoaderManager.html
-http://developer.android.com/reference/android/app/LocalActivityManager.html
-http://developer.android.com/reference/android/app/MediaRouteActionProvider.html
-http://developer.android.com/reference/android/app/MediaRouteButton.html
-http://developer.android.com/reference/android/app/NativeActivity.html
-http://developer.android.com/reference/android/app/Notification.BigPictureStyle.html
-http://developer.android.com/reference/android/app/Notification.BigTextStyle.html
-http://developer.android.com/reference/android/app/Notification.Builder.html
-http://developer.android.com/reference/android/app/Notification.InboxStyle.html
-http://developer.android.com/reference/android/app/Notification.Style.html
-http://developer.android.com/reference/android/app/Presentation.html
-http://developer.android.com/reference/android/app/SearchableInfo.html
-http://developer.android.com/reference/android/app/SearchManager.html
-http://developer.android.com/reference/android/app/TabActivity.html
-http://developer.android.com/reference/android/app/TaskStackBuilder.html
-http://developer.android.com/reference/android/app/UiModeManager.html
-http://developer.android.com/reference/android/app/WallpaperInfo.html
-http://developer.android.com/reference/android/app/WallpaperManager.html
-http://developer.android.com/reference/android/app/Fragment.InstantiationException.html
-http://developer.android.com/reference/android/app/PendingIntent.CanceledException.html
-http://developer.android.com/reference/android/content/DialogInterface.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.html
-http://developer.android.com/reference/java/lang/CharSequence.html
-http://developer.android.com/reference/java/text/NumberFormat.html
-http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html
-http://developer.android.com/reference/android/widget/Button.html
-http://developer.android.com/reference/android/view/KeyEvent.html
-http://developer.android.com/reference/android/os/Message.html
-http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html
-http://developer.android.com/reference/android/view/Window.html
-http://developer.android.com/reference/android/view/ActionMode.html
-http://developer.android.com/reference/android/view/MenuItem.html
-http://developer.android.com/reference/android/view/ContextMenu.html
-http://developer.android.com/reference/android/view/ContextMenu.ContextMenuInfo.html
-http://developer.android.com/reference/android/view/KeyEvent.Callback.html
-http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
-http://developer.android.com/reference/android/view/ActionMode.Callback.html
-http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnKeyListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnShowListener.html
-http://developer.android.com/reference/android/view/View.OnCreateContextMenuListener.html
-http://developer.android.com/reference/android/view/Window.Callback.html
-http://developer.android.com/reference/android/widget/RemoteViews.html
-http://developer.android.com/reference/android/graphics/Bitmap.html
-http://developer.android.com/reference/android/media/AudioManager.html
-http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
-http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
-http://developer.android.com/reference/android/os/Vibrator.html
-http://developer.android.com/reference/java/lang/System.html
-http://developer.android.com/shareables/training/MobileAds.zip
-http://developer.android.com/reference/android/media/JetPlayer.html
-http://developer.android.com/resources/samples/JetBoy/index.html
-http://developer.android.com/guide/topics/media/jet/jetcreator_manual.html
-http://developer.android.com/reference/android/test/ServiceTestCase.html
-http://developer.android.com/reference/android/test/RenamingDelegatingContext.html
-http://developer.android.com/reference/android/os/IBinder.html
-http://developer.android.com/reference/android/test/AndroidTestCase.html
-http://developer.android.com/reference/android/view/ViewGroup.html
-http://developer.android.com/reference/android/widget/CheckBox.html
-http://developer.android.com/reference/android/widget/RadioButton.html
-http://developer.android.com/reference/android/widget/Gallery.html
-http://developer.android.com/reference/android/widget/Spinner.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
-http://developer.android.com/reference/android/widget/ImageSwitcher.html
-http://developer.android.com/reference/android/widget/TextSwitcher.html
-http://developer.android.com/guide/topics/ui/layout-objects.html
-http://developer.android.com/reference/android/graphics/Canvas.html
-http://developer.android.com/reference/android/view/SurfaceView.html
-http://developer.android.com/resources/samples/ApiDemos/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_view_1.html
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
-http://developer.android.com/sdk/api_diff/10/changes.html
-http://developer.android.com/reference/android/hardware/usb/UsbDevice.html
-http://developer.android.com/reference/android/animation/LayoutTransition.TransitionListener.html
-http://developer.android.com/reference/android/animation/TimeAnimator.TimeListener.html
-http://developer.android.com/reference/android/animation/AnimatorInflater.html
-http://developer.android.com/reference/android/animation/AnimatorSet.Builder.html
-http://developer.android.com/reference/android/animation/TimeAnimator.html
-http://developer.android.com/shareables/training/CustomView.zip
-http://developer.android.com/sdk/eclipse-adt.html
-http://developer.android.com/reference/android/content/res/TypedArray.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.BackStackEntry.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.OnBackStackChangedListener.html
-http://developer.android.com/reference/android/support/v4/app/LoaderManager.LoaderCallbacks.html
-http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.SavedState.html
-http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
-http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html
-http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html
-http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html
-http://developer.android.com/reference/android/support/v4/app/ListFragment.html
-http://developer.android.com/reference/android/support/v4/app/LoaderManager.html
-http://developer.android.com/reference/android/support/v4/app/NavUtils.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigPictureStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigTextStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.InboxStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Style.html
-http://developer.android.com/reference/android/support/v4/app/ServiceCompat.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentBuilder.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentReader.html
-http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html
-http://developer.android.com/reference/android/support/v4/app/TaskStackBuilderHoneycomb.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.InstantiationException.html
-http://developer.android.com/reference/android/content/ComponentCallbacks.html
-http://developer.android.com/reference/java/io/FileDescriptor.html
-http://developer.android.com/reference/java/io/PrintWriter.html
-http://developer.android.com/reference/java/util/Formatter.html
-http://developer.android.com/reference/android/content/res/Configuration.html
-http://developer.android.com/reference/android/view/animation/Animation.html
-http://developer.android.com/reference/android/view/MenuInflater.html
-http://developer.android.com/reference/android/util/AttributeSet.html
-http://developer.android.com/reference/java/lang/InstantiationException.html
-http://developer.android.com/reference/android/widget/AdapterView.html
-http://developer.android.com/reference/android/app/backup/BackupManager.html
-http://developer.android.com/reference/android/app/backup/BackupAgent.html
-http://developer.android.com/reference/android/app/backup/BackupAgentHelper.html
-http://developer.android.com/reference/android/content/SharedPreferences.html
-http://developer.android.com/reference/android/app/backup/BackupDataOutput.html
-http://developer.android.com/reference/android/app/backup/BackupDataInput.html
-http://developer.android.com/resources/samples/BackupRestore/src/com/example/android/backuprestore/ExampleAgent.html
-http://developer.android.com/resources/samples/BackupRestore/index.html
-http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html
-http://developer.android.com/reference/android/app/backup/FileBackupHelper.html
-http://developer.android.com/reference/android/content/ContextWrapper.html
-http://developer.android.com/reference/android/content/pm/PackageInfo.html
-http://developer.android.com/reference/android/os/UserHandle.html
-http://developer.android.com/reference/android/content/IntentSender.html
-http://developer.android.com/reference/android/os/Handler.html
-http://developer.android.com/reference/android/os/Process.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.Intermediates.html
-http://developer.android.com/reference/android/test/TestSuiteProvider.html
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase.html
-http://developer.android.com/reference/android/test/ActivityTestCase.html
-http://developer.android.com/reference/android/test/AndroidTestRunner.html
-http://developer.android.com/reference/android/test/ApplicationTestCase.html
-http://developer.android.com/reference/android/test/InstrumentationTestSuite.html
-http://developer.android.com/reference/android/test/IsolatedContext.html
-http://developer.android.com/reference/android/test/LoaderTestCase.html
-http://developer.android.com/reference/android/test/MoreAsserts.html
-http://developer.android.com/reference/android/test/ProviderTestCase.html
-http://developer.android.com/reference/android/test/ProviderTestCase2.html
-http://developer.android.com/reference/android/test/SyncBaseInstrumentation.html
-http://developer.android.com/reference/android/test/TouchUtils.html
-http://developer.android.com/reference/android/test/AssertionFailedError.html
-http://developer.android.com/reference/android/test/ComparisonFailure.html
-http://developer.android.com/reference/android/view/ActionProvider.html
-http://developer.android.com/reference/android/widget/ShareActionProvider.html
-http://developer.android.com/shareables/training/PhotoIntentActivity.zip
-http://developer.android.com/reference/android/hardware/Sensor.html
-http://developer.android.com/reference/android/hardware/SensorEvent.html
-http://developer.android.com/reference/android/hardware/SensorManager.html
-http://developer.android.com/reference/android/hardware/SensorEventListener.html
-http://developer.android.com/resources/samples/AccelerometerPlay/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
-http://developer.android.com/reference/android/os/CancellationSignal.OnCancelListener.html
-http://developer.android.com/reference/android/os/Handler.Callback.html
-http://developer.android.com/reference/android/os/IBinder.DeathRecipient.html
-http://developer.android.com/reference/android/os/IInterface.html
-http://developer.android.com/reference/android/os/MessageQueue.IdleHandler.html
-http://developer.android.com/reference/android/os/Parcelable.ClassLoaderCreator.html
-http://developer.android.com/reference/android/os/RecoverySystem.ProgressListener.html
-http://developer.android.com/reference/android/os/AsyncTask.html
-http://developer.android.com/reference/android/os/BatteryManager.html
-http://developer.android.com/reference/android/os/Binder.html
-http://developer.android.com/reference/android/os/Build.VERSION.html
-http://developer.android.com/reference/android/os/CancellationSignal.html
-http://developer.android.com/reference/android/os/ConditionVariable.html
-http://developer.android.com/reference/android/os/CountDownTimer.html
-http://developer.android.com/reference/android/os/Debug.html
-http://developer.android.com/reference/android/os/Debug.InstructionCount.html
-http://developer.android.com/reference/android/os/Debug.MemoryInfo.html
-http://developer.android.com/reference/android/os/DropBoxManager.html
-http://developer.android.com/reference/android/os/DropBoxManager.Entry.html
-http://developer.android.com/reference/android/os/Environment.html
-http://developer.android.com/reference/android/os/FileObserver.html
-http://developer.android.com/reference/android/os/HandlerThread.html
-http://developer.android.com/reference/android/os/Looper.html
-http://developer.android.com/reference/android/os/MemoryFile.html
-http://developer.android.com/reference/android/os/MessageQueue.html
-http://developer.android.com/reference/android/os/Messenger.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseInputStream.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseOutputStream.html
-http://developer.android.com/reference/android/os/ParcelUuid.html
-http://developer.android.com/reference/android/os/PowerManager.html
-http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
-http://developer.android.com/reference/android/os/RecoverySystem.html
-http://developer.android.com/reference/android/os/RemoteCallbackList.html
-http://developer.android.com/reference/android/os/ResultReceiver.html
-http://developer.android.com/reference/android/os/StatFs.html
-http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.html
-http://developer.android.com/reference/android/os/StrictMode.VmPolicy.html
-http://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder.html
-http://developer.android.com/reference/android/os/SystemClock.html
-http://developer.android.com/reference/android/os/TokenWatcher.html
-http://developer.android.com/reference/android/os/UserManager.html
-http://developer.android.com/reference/android/os/WorkSource.html
-http://developer.android.com/reference/android/os/AsyncTask.Status.html
-http://developer.android.com/reference/android/os/BadParcelableException.html
-http://developer.android.com/reference/android/os/DeadObjectException.html
-http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
-http://developer.android.com/reference/android/os/OperationCanceledException.html
-http://developer.android.com/reference/android/os/ParcelFormatException.html
-http://developer.android.com/reference/android/os/RemoteException.html
-http://developer.android.com/reference/android/os/TransactionTooLargeException.html
-http://developer.android.com/reference/java/io/Closeable.html
-http://developer.android.com/reference/java/net/DatagramSocket.html
-http://developer.android.com/reference/java/net/Socket.html
-http://developer.android.com/reference/java/io/File.html
-http://developer.android.com/reference/java/io/IOException.html
-http://developer.android.com/reference/java/io/FileNotFoundException.html
-http://developer.android.com/reference/java/lang/ref/ReferenceQueue.html
-http://developer.android.com/reference/java/lang/Throwable.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConstants.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConstants.Field.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeFactory.html
-http://developer.android.com/reference/javax/xml/datatype/Duration.html
-http://developer.android.com/reference/javax/xml/datatype/XMLGregorianCalendar.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConfigurationException.html
-http://developer.android.com/reference/android/view/ActionProvider.VisibilityListener.html
-http://developer.android.com/reference/android/view/Choreographer.FrameCallback.html
-http://developer.android.com/reference/android/view/CollapsibleActionView.html
-http://developer.android.com/reference/android/view/GestureDetector.OnDoubleTapListener.html
-http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html
-http://developer.android.com/reference/android/view/InputQueue.Callback.html
-http://developer.android.com/reference/android/view/LayoutInflater.Factory.html
-http://developer.android.com/reference/android/view/LayoutInflater.Factory2.html
-http://developer.android.com/reference/android/view/LayoutInflater.Filter.html
-http://developer.android.com/reference/android/view/MenuItem.OnActionExpandListener.html
-http://developer.android.com/reference/android/view/MenuItem.OnMenuItemClickListener.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.OnScaleGestureListener.html
-http://developer.android.com/reference/android/view/SubMenu.html
-http://developer.android.com/reference/android/view/SurfaceHolder.html
-http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html
-http://developer.android.com/reference/android/view/SurfaceHolder.Callback2.html
-http://developer.android.com/reference/android/view/TextureView.SurfaceTextureListener.html
-http://developer.android.com/reference/android/view/View.OnAttachStateChangeListener.html
-http://developer.android.com/reference/android/view/View.OnClickListener.html
-http://developer.android.com/reference/android/view/View.OnDragListener.html
-http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
-http://developer.android.com/reference/android/view/View.OnGenericMotionListener.html
-http://developer.android.com/reference/android/view/View.OnHoverListener.html
-http://developer.android.com/reference/android/view/View.OnKeyListener.html
-http://developer.android.com/reference/android/view/View.OnLayoutChangeListener.html
-http://developer.android.com/reference/android/view/View.OnLongClickListener.html
-http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html
-http://developer.android.com/reference/android/view/View.OnTouchListener.html
-http://developer.android.com/reference/android/view/ViewGroup.OnHierarchyChangeListener.html
-http://developer.android.com/reference/android/view/ViewManager.html
-http://developer.android.com/reference/android/view/ViewParent.html
-http://developer.android.com/reference/android/view/ViewStub.OnInflateListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnDrawListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalFocusChangeListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnScrollChangedListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnTouchModeChangeListener.html
-http://developer.android.com/reference/android/view/WindowManager.html
-http://developer.android.com/reference/android/view/AbsSavedState.html
-http://developer.android.com/reference/android/view/Choreographer.html
-http://developer.android.com/reference/android/view/ContextThemeWrapper.html
-http://developer.android.com/reference/android/view/Display.html
-http://developer.android.com/reference/android/view/DragEvent.html
-http://developer.android.com/reference/android/view/FocusFinder.html
-http://developer.android.com/reference/android/view/GestureDetector.html
-http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
-http://developer.android.com/reference/android/view/Gravity.html
-http://developer.android.com/reference/android/view/HapticFeedbackConstants.html
-http://developer.android.com/reference/android/view/InputDevice.html
-http://developer.android.com/reference/android/view/InputDevice.MotionRange.html
-http://developer.android.com/reference/android/view/InputEvent.html
-http://developer.android.com/reference/android/view/InputQueue.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.KeyData.html
-http://developer.android.com/reference/android/view/KeyEvent.DispatcherState.html
-http://developer.android.com/reference/android/view/MotionEvent.PointerCoords.html
-http://developer.android.com/reference/android/view/MotionEvent.PointerProperties.html
-http://developer.android.com/reference/android/view/OrientationEventListener.html
-http://developer.android.com/reference/android/view/OrientationListener.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.SimpleOnScaleGestureListener.html
-http://developer.android.com/reference/android/view/SoundEffectConstants.html
-http://developer.android.com/reference/android/view/Surface.html
-http://developer.android.com/reference/android/view/TextureView.html
-http://developer.android.com/reference/android/view/VelocityTracker.html
-http://developer.android.com/reference/android/view/View.AccessibilityDelegate.html
-http://developer.android.com/reference/android/view/View.BaseSavedState.html
-http://developer.android.com/reference/android/view/View.DragShadowBuilder.html
-http://developer.android.com/reference/android/view/View.MeasureSpec.html
-http://developer.android.com/reference/android/view/ViewConfiguration.html
-http://developer.android.com/reference/android/view/ViewDebug.html
-http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html
-http://developer.android.com/reference/android/view/ViewStub.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.html
-http://developer.android.com/reference/android/view/ViewDebug.HierarchyTraceType.html
-http://developer.android.com/reference/android/view/ViewDebug.RecyclerTraceType.html
-http://developer.android.com/reference/android/view/InflateException.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.UnavailableException.html
-http://developer.android.com/reference/android/view/Surface.OutOfResourcesException.html
-http://developer.android.com/reference/android/view/SurfaceHolder.BadSurfaceTypeException.html
-http://developer.android.com/reference/android/view/WindowManager.BadTokenException.html
-http://developer.android.com/reference/android/view/WindowManager.InvalidDisplayException.html
-http://developer.android.com/reference/java/lang/Runnable.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeListener.html
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html
-http://developer.android.com/reference/java/util/prefs/PreferencesFactory.html
-http://developer.android.com/reference/java/util/prefs/AbstractPreferences.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeEvent.html
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeEvent.html
-http://developer.android.com/reference/java/util/prefs/Preferences.html
-http://developer.android.com/reference/java/util/prefs/BackingStoreException.html
-http://developer.android.com/reference/java/util/prefs/InvalidPreferencesFormatException.html
-http://developer.android.com/reference/android/util/Printer.html
-http://developer.android.com/reference/android/util/AtomicFile.html
-http://developer.android.com/reference/android/util/Base64.html
-http://developer.android.com/reference/android/util/Base64InputStream.html
-http://developer.android.com/reference/android/util/Base64OutputStream.html
-http://developer.android.com/reference/android/util/Config.html
-http://developer.android.com/reference/android/util/DebugUtils.html
-http://developer.android.com/reference/android/util/DisplayMetrics.html
-http://developer.android.com/reference/android/util/EventLog.html
-http://developer.android.com/reference/android/util/EventLog.Event.html
-http://developer.android.com/reference/android/util/EventLogTags.html
-http://developer.android.com/reference/android/util/EventLogTags.Description.html
-http://developer.android.com/reference/android/util/FloatMath.html
-http://developer.android.com/reference/android/util/JsonReader.html
-http://developer.android.com/reference/android/util/JsonWriter.html
-http://developer.android.com/reference/android/util/Log.html
-http://developer.android.com/reference/android/util/LogPrinter.html
-http://developer.android.com/reference/android/util/LongSparseArray.html
-http://developer.android.com/reference/android/util/LruCache.html
-http://developer.android.com/reference/android/util/MonthDisplayHelper.html
-http://developer.android.com/reference/android/util/Pair.html
-http://developer.android.com/reference/android/util/Patterns.html
-http://developer.android.com/reference/android/util/PrintStreamPrinter.html
-http://developer.android.com/reference/android/util/PrintWriterPrinter.html
-http://developer.android.com/reference/android/util/Property.html
-http://developer.android.com/reference/android/util/SparseArray.html
-http://developer.android.com/reference/android/util/SparseBooleanArray.html
-http://developer.android.com/reference/android/util/SparseIntArray.html
-http://developer.android.com/reference/android/util/StateSet.html
-http://developer.android.com/reference/android/util/StringBuilderPrinter.html
-http://developer.android.com/reference/android/util/TimeUtils.html
-http://developer.android.com/reference/android/util/TimingLogger.html
-http://developer.android.com/reference/android/util/TypedValue.html
-http://developer.android.com/reference/android/util/Xml.html
-http://developer.android.com/reference/android/util/JsonToken.html
-http://developer.android.com/reference/android/util/Xml.Encoding.html
-http://developer.android.com/reference/android/util/AndroidException.html
-http://developer.android.com/reference/android/util/AndroidRuntimeException.html
-http://developer.android.com/reference/android/util/Base64DataException.html
-http://developer.android.com/reference/android/util/MalformedJsonException.html
-http://developer.android.com/reference/android/util/NoSuchPropertyException.html
-http://developer.android.com/reference/android/util/TimeFormatException.html
-http://developer.android.com/reference/java/lang/Math.html
-http://developer.android.com/reference/java/io/PrintStream.html
-http://developer.android.com/reference/java/lang/StringBuilder.html
-http://developer.android.com/reference/android/content/pm/ApplicationInfo.html
-http://developer.android.com/resources/tutorials/views/hello-formstuff.html
-http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html
-http://developer.android.com/reference/android/widget/ImageButton.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeProvider.html
-http://developer.android.com/reference/android/widget/DatePicker.html
-http://developer.android.com/reference/android/provider/MediaStore.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.OnScanCompletedListener.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html
-http://developer.android.com/reference/android/content/ContentProvider.html
-http://developer.android.com/guide/topics/security/security.html
-http://developer.android.com/reference/java/util/concurrent/BlockingDeque.html
-http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/Callable.html
-http://developer.android.com/reference/java/util/concurrent/CompletionService.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentNavigableMap.html
-http://developer.android.com/reference/java/util/concurrent/Delayed.html
-http://developer.android.com/reference/java/util/concurrent/Executor.html
-http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/Future.html
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html
-http://developer.android.com/reference/java/util/concurrent/RunnableFuture.html
-http://developer.android.com/reference/java/util/concurrent/RunnableScheduledFuture.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html
-http://developer.android.com/reference/java/util/concurrent/ThreadFactory.html
-http://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/ArrayBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentHashMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentLinkedQueue.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentSkipListMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentSkipListSet.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArraySet.html
-http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
-http://developer.android.com/reference/java/util/concurrent/CyclicBarrier.html
-http://developer.android.com/reference/java/util/concurrent/DelayQueue.html
-http://developer.android.com/reference/java/util/concurrent/Exchanger.html
-http://developer.android.com/reference/java/util/concurrent/ExecutorCompletionService.html
-http://developer.android.com/reference/java/util/concurrent/Executors.html
-http://developer.android.com/reference/java/util/concurrent/FutureTask.html
-http://developer.android.com/reference/java/util/concurrent/LinkedBlockingDeque.html
-http://developer.android.com/reference/java/util/concurrent/LinkedBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/PriorityBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
-http://developer.android.com/reference/java/util/concurrent/Semaphore.html
-http://developer.android.com/reference/java/util/concurrent/SynchronousQueue.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.AbortPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardOldestPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardPolicy.html
-http://developer.android.com/reference/java/util/concurrent/TimeUnit.html
-http://developer.android.com/reference/java/util/concurrent/BrokenBarrierException.html
-http://developer.android.com/reference/java/util/concurrent/CancellationException.html
-http://developer.android.com/reference/java/util/concurrent/ExecutionException.html
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionException.html
-http://developer.android.com/reference/java/util/concurrent/TimeoutException.html
-http://developer.android.com/reference/java/util/Deque.html
-http://developer.android.com/reference/java/util/Queue.html
-http://developer.android.com/reference/java/util/Map.html
-http://developer.android.com/reference/java/util/NavigableMap.html
-http://developer.android.com/reference/java/util/NavigableSet.html
-http://developer.android.com/reference/java/util/Set.html
-http://developer.android.com/reference/java/util/PriorityQueue.html
-http://developer.android.com/reference/android/appwidget/AppWidgetProvider.html
-http://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html
-http://developer.android.com/reference/android/appwidget/AppWidgetManager.html
-http://developer.android.com/reference/android/widget/AnalogClock.html
-http://developer.android.com/reference/android/widget/Chronometer.html
-http://developer.android.com/reference/android/widget/ViewFlipper.html
-http://developer.android.com/reference/android/widget/StackView.html
-http://developer.android.com/reference/android/widget/AdapterViewFlipper.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html
-http://developer.android.com/reference/android/widget/RemoteViewsService.html
-http://developer.android.com/reference/android/widget/ViewAnimator.html
-http://developer.android.com/reference/android/widget/Adapter.html
-http://developer.android.com/reference/android/widget/RemoteViewsService.RemoteViewsFactory.html
-http://developer.android.com/resources/samples/StackWidget/index.html
-http://developer.android.com/reference/android/widget/Toast.html
-http://developer.android.com/resources/samples/WeatherListWidget/index.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPrivateKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPublicKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/PBEKey.html
-http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
-http://developer.android.com/resources/samples/HoneycombGallery/index.html
-http://developer.android.com/resources/samples/ActionBarCompat/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html
-http://developer.android.com/reference/android/R.attr.html
-http://developer.android.com/reference/android/R.styleable.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_action_bar.html
-http://developer.android.com/reference/android/widget/SearchView.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.html
-http://developer.android.com/reference/android/widget/SpinnerAdapter.html
-http://developer.android.com/reference/android/widget/ArrayAdapter.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
-http://developer.android.com/resources/samples/HoneycombGallery/src/com/example/android/hcgallery/TitlesFragment.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityRecordCompat.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityManager.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityRecord.html
-http://developer.android.com/resources/tutorials/views/index.html
-http://developer.android.com/reference/android/database/Cursor.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
-http://developer.android.com/reference/android/app/backup/BackupHelper.html
-http://developer.android.com/reference/android/app/backup/BackupDataInputStream.html
-http://developer.android.com/reference/android/app/backup/FullBackupDataOutput.html
-http://developer.android.com/reference/android/app/backup/RestoreObserver.html
-http://developer.android.com/reference/android/text/ClipboardManager.html
-http://developer.android.com/reference/android/net/ConnectivityManager.html
-http://developer.android.com/reference/android/hardware/display/DisplayManager.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html
-http://developer.android.com/reference/android/hardware/input/InputManager.html
-http://developer.android.com/reference/android/media/MediaRouter.html
-http://developer.android.com/reference/android/nfc/NfcManager.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.html
-http://developer.android.com/reference/android/os/storage/StorageManager.html
-http://developer.android.com/reference/android/telephony/TelephonyManager.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.html
-http://developer.android.com/reference/android/content/ServiceConnection.html
-http://developer.android.com/reference/android/content/res/AssetManager.html
-http://developer.android.com/reference/java/lang/ClassLoader.html
-http://developer.android.com/reference/android/content/ContentResolver.html
-http://developer.android.com/reference/android/content/res/Resources.Theme.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
-http://developer.android.com/reference/android/database/DatabaseErrorHandler.html
-http://developer.android.com/reference/java/io/InputStream.html
-http://developer.android.com/shareables/training/FragmentBasics.zip
-http://developer.android.com/reference/android/content/Loader.html
-http://developer.android.com/reference/android/widget/CursorAdapter.html
-http://developer.android.com/reference/android/content/CursorLoader.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ClientContext.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ClientContextConfigurer.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestAddCookies.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestDefaultHeaders.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestProxyAuthentication.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestTargetAuthentication.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ResponseProcessCookies.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpContext.html
-http://developer.android.com/reference/org/apache/http/client/CookieStore.html
-http://developer.android.com/reference/android/content/pm/FeatureInfo.html
-http://developer.android.com/reference/android/content/pm/ConfigurationInfo.html
-http://developer.android.com/reference/java/util/EventListener.html
-http://developer.android.com/reference/android/R.id.html
-http://developer.android.com/reference/android/R.layout.html
-http://developer.android.com/reference/java/lang/RuntimeException.html
-http://developer.android.com/reference/java/lang/Exception.html
-http://developer.android.com/guide/practices/design/responsiveness.html
-http://developer.android.com/reference/java/lang/StackTraceElement.html
-http://developer.android.com/reference/java/lang/Float.html
-http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
-http://developer.android.com/reference/android/graphics/Rect.html
-http://developer.android.com/reference/android/graphics/Point.html
-http://developer.android.com/reference/android/graphics/Matrix.html
-http://developer.android.com/reference/android/view/inputmethod/InputConnection.html
-http://developer.android.com/reference/android/graphics/Paint.html
-http://developer.android.com/reference/android/content/ClipData.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.Callback.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityEventSource.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html
-http://developer.android.com/reference/java/lang/Thread.html
-http://developer.android.com/reference/android/accounts/AccountAuthenticatorActivity.html
-http://developer.android.com/reference/android/preference/PreferenceActivity.html
-http://developer.android.com/reference/com/google/android/gms/maps/package-summary.html
-http://developer.android.com/reference/java/lang/Integer.html
-http://developer.android.com/reference/android/widget/TabHost.OnTabChangeListener.html
-http://developer.android.com/reference/android/widget/TabHost.TabSpec.html
-http://developer.android.com/reference/android/graphics/Region.html
-http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html
-http://developer.android.com/reference/android/view/animation/Transformation.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html
-http://developer.android.com/shareables/training/NetworkUsage.zip
-http://developer.android.com/reference/android/content/ComponentCallbacks2.html
-http://developer.android.com/reference/java/util/HashMap.html
-http://developer.android.com/reference/java/io/Serializable.html
-http://developer.android.com/reference/java/lang/IllegalArgumentException.html
-http://developer.android.com/reference/java/lang/IllegalStateException.html
-http://developer.android.com/reference/java/lang/NullPointerException.html
-http://developer.android.com/reference/java/util/EventObject.html
-http://developer.android.com/reference/android/widget/AbsListView.MultiChoiceModeListener.html
-http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html
-http://developer.android.com/reference/android/widget/AbsListView.RecyclerListener.html
-http://developer.android.com/reference/android/widget/AbsListView.SelectionBoundsAdjuster.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemLongClickListener.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html
-http://developer.android.com/reference/android/widget/Advanceable.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.OnDismissListener.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.Validator.html
-http://developer.android.com/reference/android/widget/CalendarView.OnDateChangeListener.html
-http://developer.android.com/reference/android/widget/Checkable.html
-http://developer.android.com/reference/android/widget/Chronometer.OnChronometerTickListener.html
-http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html
-http://developer.android.com/reference/android/widget/DatePicker.OnDateChangedListener.html
-http://developer.android.com/reference/android/widget/ExpandableListAdapter.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupClickListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupCollapseListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupExpandListener.html
-http://developer.android.com/reference/android/widget/Filter.FilterListener.html
-http://developer.android.com/reference/android/widget/Filterable.html
-http://developer.android.com/reference/android/widget/FilterQueryProvider.html
-http://developer.android.com/reference/android/widget/HeterogeneousExpandableList.html
-http://developer.android.com/reference/android/widget/MediaController.MediaPlayerControl.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.Tokenizer.html
-http://developer.android.com/reference/android/widget/NumberPicker.Formatter.html
-http://developer.android.com/reference/android/widget/NumberPicker.OnScrollListener.html
-http://developer.android.com/reference/android/widget/NumberPicker.OnValueChangeListener.html
-http://developer.android.com/reference/android/widget/PopupMenu.OnDismissListener.html
-http://developer.android.com/reference/android/widget/PopupMenu.OnMenuItemClickListener.html
-http://developer.android.com/reference/android/widget/PopupWindow.OnDismissListener.html
-http://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html
-http://developer.android.com/reference/android/widget/RatingBar.OnRatingBarChangeListener.html
-http://developer.android.com/reference/android/widget/SearchView.OnCloseListener.html
-http://developer.android.com/reference/android/widget/SearchView.OnQueryTextListener.html
-http://developer.android.com/reference/android/widget/SearchView.OnSuggestionListener.html
-http://developer.android.com/reference/android/widget/SectionIndexer.html
-http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html
-http://developer.android.com/reference/android/widget/ShareActionProvider.OnShareTargetSelectedListener.html
-http://developer.android.com/reference/android/widget/SimpleAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.CursorToStringConverter.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerCloseListener.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerOpenListener.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerScrollListener.html
-http://developer.android.com/reference/android/widget/TabHost.TabContentFactory.html
-http://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html
-http://developer.android.com/reference/android/widget/TimePicker.OnTimeChangedListener.html
-http://developer.android.com/reference/android/widget/ViewSwitcher.ViewFactory.html
-http://developer.android.com/reference/android/widget/WrapperListAdapter.html
-http://developer.android.com/reference/android/widget/ZoomButtonsController.OnZoomListener.html
-http://developer.android.com/reference/android/widget/AbsListView.html
-http://developer.android.com/reference/android/widget/AbsListView.LayoutParams.html
-http://developer.android.com/reference/android/widget/AbsoluteLayout.html
-http://developer.android.com/reference/android/widget/AbsoluteLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/AbsSeekBar.html
-http://developer.android.com/reference/android/widget/AbsSpinner.html
-http://developer.android.com/reference/android/widget/AdapterView.AdapterContextMenuInfo.html
-http://developer.android.com/reference/android/widget/AdapterViewAnimator.html
-http://developer.android.com/reference/android/widget/AlphabetIndexer.html
-http://developer.android.com/reference/android/widget/BaseAdapter.html
-http://developer.android.com/reference/android/widget/BaseExpandableListAdapter.html
-http://developer.android.com/reference/android/widget/CalendarView.html
-http://developer.android.com/reference/android/widget/CheckedTextView.html
-http://developer.android.com/reference/android/widget/CompoundButton.html
-http://developer.android.com/reference/android/widget/CursorTreeAdapter.html
-http://developer.android.com/reference/android/widget/DialerFilter.html
-http://developer.android.com/reference/android/widget/DigitalClock.html
-http://developer.android.com/reference/android/widget/EdgeEffect.html
-http://developer.android.com/reference/android/widget/ExpandableListView.html
-http://developer.android.com/reference/android/widget/ExpandableListView.ExpandableListContextMenuInfo.html
-http://developer.android.com/reference/android/widget/Filter.html
-http://developer.android.com/reference/android/widget/Filter.FilterResults.html
-http://developer.android.com/reference/android/widget/Gallery.LayoutParams.html
-http://developer.android.com/reference/android/widget/GridLayout.Alignment.html
-http://developer.android.com/reference/android/widget/GridLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/GridLayout.Spec.html
-http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html
-http://developer.android.com/reference/android/widget/HorizontalScrollView.html
-http://developer.android.com/reference/android/widget/ListPopupWindow.html
-http://developer.android.com/reference/android/widget/ListView.FixedViewInfo.html
-http://developer.android.com/reference/android/widget/MediaController.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.CommaTokenizer.html
-http://developer.android.com/reference/android/widget/NumberPicker.html
-http://developer.android.com/reference/android/widget/OverScroller.html
-http://developer.android.com/reference/android/widget/PopupMenu.html
-http://developer.android.com/reference/android/widget/PopupWindow.html
-http://developer.android.com/reference/android/widget/QuickContactBadge.html
-http://developer.android.com/reference/android/widget/RadioGroup.html
-http://developer.android.com/reference/android/widget/RadioGroup.LayoutParams.html
-http://developer.android.com/reference/android/widget/RatingBar.html
-http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/ResourceCursorAdapter.html
-http://developer.android.com/reference/android/widget/ResourceCursorTreeAdapter.html
-http://developer.android.com/reference/android/widget/Scroller.html
-http://developer.android.com/reference/android/widget/SeekBar.html
-http://developer.android.com/reference/android/widget/SimpleAdapter.html
-http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html
-http://developer.android.com/reference/android/widget/SimpleExpandableListAdapter.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.html
-http://developer.android.com/reference/android/widget/Space.html
-http://developer.android.com/reference/android/widget/Switch.html
-http://developer.android.com/reference/android/widget/TableLayout.html
-http://developer.android.com/reference/android/widget/TableLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/TableRow.html
-http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
-http://developer.android.com/reference/android/widget/TextClock.html
-http://developer.android.com/reference/android/widget/TextView.SavedState.html
-http://developer.android.com/reference/android/widget/TimePicker.html
-http://developer.android.com/reference/android/widget/ToggleButton.html
-http://developer.android.com/reference/android/widget/TwoLineListItem.html
-http://developer.android.com/reference/android/widget/VideoView.html
-http://developer.android.com/reference/android/widget/ViewSwitcher.html
-http://developer.android.com/reference/android/widget/ZoomButton.html
-http://developer.android.com/reference/android/widget/ZoomButtonsController.html
-http://developer.android.com/reference/android/widget/ZoomControls.html
-http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
-http://developer.android.com/reference/android/widget/TextView.BufferType.html
-http://developer.android.com/reference/android/widget/RemoteViews.ActionException.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.html
-http://developer.android.com/guide/topics/ui/binding.html
-http://developer.android.com/reference/java/lang/UnsupportedOperationException.html
-http://developer.android.com/reference/android/content/ClipboardManager.OnPrimaryClipChangedListener.html
-http://developer.android.com/reference/android/content/ContentProvider.PipeDataWriter.html
-http://developer.android.com/reference/android/content/DialogInterface.OnMultiChoiceClickListener.html
-http://developer.android.com/reference/android/content/EntityIterator.html
-http://developer.android.com/reference/android/content/IntentSender.OnFinished.html
-http://developer.android.com/reference/android/content/Loader.OnLoadCanceledListener.html
-http://developer.android.com/reference/android/content/Loader.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
-http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
-http://developer.android.com/reference/android/content/SyncStatusObserver.html
-http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerArgs.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerHandler.html
-http://developer.android.com/reference/android/content/AsyncTaskLoader.html
-http://developer.android.com/reference/android/content/BroadcastReceiver.PendingResult.html
-http://developer.android.com/reference/android/content/ClipboardManager.html
-http://developer.android.com/reference/android/content/ClipData.Item.html
-http://developer.android.com/reference/android/content/ClipDescription.html
-http://developer.android.com/reference/android/content/ContentProviderClient.html
-http://developer.android.com/reference/android/content/ContentProviderOperation.html
-http://developer.android.com/reference/android/content/ContentProviderOperation.Builder.html
-http://developer.android.com/reference/android/content/ContentProviderResult.html
-http://developer.android.com/reference/android/content/ContentQueryMap.html
-http://developer.android.com/reference/android/content/ContentUris.html
-http://developer.android.com/reference/android/content/ContentValues.html
-http://developer.android.com/reference/android/content/Entity.html
-http://developer.android.com/reference/android/content/Entity.NamedContentValues.html
-http://developer.android.com/reference/android/content/Intent.FilterComparison.html
-http://developer.android.com/reference/android/content/Intent.ShortcutIconResource.html
-http://developer.android.com/reference/android/content/IntentFilter.AuthorityEntry.html
-http://developer.android.com/reference/android/content/Loader.ForceLoadContentObserver.html
-http://developer.android.com/reference/android/content/MutableContextWrapper.html
-http://developer.android.com/reference/android/content/PeriodicSync.html
-http://developer.android.com/reference/android/content/SearchRecentSuggestionsProvider.html
-http://developer.android.com/reference/android/content/SyncAdapterType.html
-http://developer.android.com/reference/android/content/SyncContext.html
-http://developer.android.com/reference/android/content/SyncInfo.html
-http://developer.android.com/reference/android/content/SyncResult.html
-http://developer.android.com/reference/android/content/SyncStats.html
-http://developer.android.com/reference/android/content/UriMatcher.html
-http://developer.android.com/reference/android/content/ActivityNotFoundException.html
-http://developer.android.com/reference/android/content/IntentFilter.MalformedMimeTypeException.html
-http://developer.android.com/reference/android/content/IntentSender.SendIntentException.html
-http://developer.android.com/reference/android/content/OperationApplicationException.html
-http://developer.android.com/reference/android/content/ReceiverCallNotAllowedException.html
-http://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html
-http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
-http://developer.android.com/guide/topics/fundamentals.html
-http://developer.android.com/guide/topics/intents/intents-filters.html
-http://developer.android.com/reference/android/hardware/display/DisplayManager.DisplayListener.html
-http://developer.android.com/reference/java/security/spec/AlgorithmParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECField.html
-http://developer.android.com/reference/java/security/spec/KeySpec.html
-http://developer.android.com/reference/java/security/spec/DSAParameterSpec.html
-http://developer.android.com/reference/java/security/spec/DSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/DSAPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECFieldF2m.html
-http://developer.android.com/reference/java/security/spec/ECFieldFp.html
-http://developer.android.com/reference/java/security/spec/ECGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECPoint.html
-http://developer.android.com/reference/java/security/spec/ECPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/EllipticCurve.html
-http://developer.android.com/reference/java/security/spec/EncodedKeySpec.html
-http://developer.android.com/reference/java/security/spec/MGF1ParameterSpec.html
-http://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec.html
-http://developer.android.com/reference/java/security/spec/PSSParameterSpec.html
-http://developer.android.com/reference/java/security/spec/RSAKeyGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAOtherPrimeInfo.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateCrtKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/X509EncodedKeySpec.html
-http://developer.android.com/reference/java/security/spec/InvalidKeySpecException.html
-http://developer.android.com/reference/java/security/spec/InvalidParameterSpecException.html
-http://developer.android.com/reference/android/media/MediaPlayer.html
-http://developer.android.com/reference/android/media/MediaRecorder.html
-http://developer.android.com/reference/android/media/CamcorderProfile.html
-http://developer.android.com/reference/javax/xml/namespace/QName.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethod.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethod.SessionCallback.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.EventCallback.html
-http://developer.android.com/reference/android/view/inputmethod/BaseInputConnection.html
-http://developer.android.com/reference/android/view/inputmethod/CompletionInfo.html
-http://developer.android.com/reference/android/view/inputmethod/CorrectionInfo.html
-http://developer.android.com/reference/android/view/inputmethod/ExtractedText.html
-http://developer.android.com/reference/android/view/inputmethod/ExtractedTextRequest.html
-http://developer.android.com/reference/android/view/inputmethod/InputBinding.html
-http://developer.android.com/reference/android/view/inputmethod/InputConnectionWrapper.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodInfo.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSubtype.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html
-http://developer.android.com/reference/android/text/InputType.html
-http://developer.android.com/reference/android/Manifest.html
-http://developer.android.com/reference/android/Manifest.permission_group.html
-http://developer.android.com/reference/android/R.html
-http://developer.android.com/reference/android/R.anim.html
-http://developer.android.com/reference/android/R.animator.html
-http://developer.android.com/reference/android/R.array.html
-http://developer.android.com/reference/android/R.bool.html
-http://developer.android.com/reference/android/R.color.html
-http://developer.android.com/reference/android/R.dimen.html
-http://developer.android.com/reference/android/R.drawable.html
-http://developer.android.com/reference/android/R.fraction.html
-http://developer.android.com/reference/android/R.interpolator.html
-http://developer.android.com/reference/android/R.menu.html
-http://developer.android.com/reference/android/R.mipmap.html
-http://developer.android.com/reference/android/R.plurals.html
-http://developer.android.com/reference/android/R.raw.html
-http://developer.android.com/reference/android/R.string.html
-http://developer.android.com/reference/android/R.xml.html
-http://developer.android.com/reference/android/inputmethodservice/KeyboardView.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.DiscoveryListener.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.RegistrationListener.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.ResolveListener.html
-http://developer.android.com/reference/android/net/nsd/NsdServiceInfo.html
-http://developer.android.com/reference/javax/crypto/SecretKey.html
-http://developer.android.com/reference/javax/crypto/Cipher.html
-http://developer.android.com/reference/javax/crypto/CipherInputStream.html
-http://developer.android.com/reference/javax/crypto/CipherOutputStream.html
-http://developer.android.com/reference/javax/crypto/CipherSpi.html
-http://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanism.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanismSpi.html
-http://developer.android.com/reference/javax/crypto/KeyAgreement.html
-http://developer.android.com/reference/javax/crypto/KeyAgreementSpi.html
-http://developer.android.com/reference/javax/crypto/KeyGenerator.html
-http://developer.android.com/reference/javax/crypto/KeyGeneratorSpi.html
-http://developer.android.com/reference/javax/crypto/Mac.html
-http://developer.android.com/reference/javax/crypto/MacSpi.html
-http://developer.android.com/reference/javax/crypto/NullCipher.html
-http://developer.android.com/reference/javax/crypto/SealedObject.html
-http://developer.android.com/reference/javax/crypto/SecretKeyFactory.html
-http://developer.android.com/reference/javax/crypto/SecretKeyFactorySpi.html
-http://developer.android.com/reference/javax/crypto/BadPaddingException.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanismException.html
-http://developer.android.com/reference/javax/crypto/IllegalBlockSizeException.html
-http://developer.android.com/reference/javax/crypto/NoSuchPaddingException.html
-http://developer.android.com/reference/javax/crypto/ShortBufferException.html
-http://developer.android.com/reference/android/webkit/WebSettings.html
-http://developer.android.com/reference/android/webkit/WebViewClient.html
-http://developer.android.com/resources/tutorials/views/hello-webview.html
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePad.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.html
-http://developer.android.com/reference/android/content/res/Resources.NotFoundException.html
-http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpUriRequest.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpDelete.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpGet.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpHead.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpOptions.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPost.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPut.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpTrace.html
-http://developer.android.com/reference/org/apache/http/HttpRequest.html
-http://developer.android.com/reference/android/view/animation/Interpolator.html
-http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
-http://developer.android.com/reference/android/view/animation/Animation.Description.html
-http://developer.android.com/reference/android/view/animation/AnimationSet.html
-http://developer.android.com/reference/android/view/animation/AnimationUtils.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.AnimationParameters.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.AnimationParameters.html
-http://developer.android.com/reference/android/view/animation/RotateAnimation.html
-http://developer.android.com/reference/android/view/animation/ScaleAnimation.html
-http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
-http://developer.android.com/reference/java/lang/Cloneable.html
-http://developer.android.com/reference/java/lang/CloneNotSupportedException.html
-http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html
-http://developer.android.com/reference/android/hardware/usb/UsbConstants.html
-http://developer.android.com/reference/android/hardware/usb/UsbDeviceConnection.html
-http://developer.android.com/reference/android/hardware/usb/UsbEndpoint.html
-http://developer.android.com/reference/android/hardware/usb/UsbInterface.html
-http://developer.android.com/reference/android/hardware/usb/UsbRequest.html
-http://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.LayoutParams.html
-http://developer.android.com/reference/android/webkit/WebChromeClient.html
-http://developer.android.com/reference/android/webkit/ConsoleMessage.html
-http://developer.android.com/reference/android/webkit/ConsoleMessage.MessageLevel.html
-http://developer.android.com/reference/javax/security/auth/Destroyable.html
-http://developer.android.com/reference/javax/security/auth/AuthPermission.html
-http://developer.android.com/reference/javax/security/auth/PrivateCredentialPermission.html
-http://developer.android.com/reference/javax/security/auth/Subject.html
-http://developer.android.com/reference/javax/security/auth/SubjectDomainCombiner.html
-http://developer.android.com/reference/javax/security/auth/DestroyFailedException.html
-http://developer.android.com/reference/java/util/Collection.html
-http://developer.android.com/reference/java/lang/InterruptedException.html
-http://developer.android.com/reference/java/security/PrivilegedAction.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
-http://developer.android.com/reference/android/provider/BaseColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.Data.html
-http://developer.android.com/reference/android/net/Uri.Builder.html
-http://developer.android.com/reference/android/database/MatrixCursor.html
-http://developer.android.com/reference/android/provider/ContactsContract.html
-http://developer.android.com/reference/java/io/OutputStream.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseOutputStream.html
-http://developer.android.com/reference/java/nio/channels/FileChannel.html
-http://developer.android.com/reference/java/io/Flushable.html
-http://developer.android.com/reference/android/test/mock/MockContentProvider.html
-http://developer.android.com/reference/android/test/mock/MockContentResolver.html
-http://developer.android.com/reference/android/test/mock/MockContext.html
-http://developer.android.com/reference/android/test/mock/MockCursor.html
-http://developer.android.com/reference/android/test/mock/MockDialogInterface.html
-http://developer.android.com/reference/android/test/mock/MockPackageManager.html
-http://developer.android.com/reference/android/test/mock/MockResources.html
-http://developer.android.com/reference/java/lang/Number.html
-http://developer.android.com/downloads/brand/Android_Robot_outlined.ai
-http://developer.android.com/downloads/brand/Google_Play_Store.ai
-http://developer.android.com/downloads/brand/en_app_rgb_wo.ai
-http://developer.android.com/downloads/brand/en_generic_rgb_wo.ai
-http://developer.android.com/reference/org/apache/http/conn/scheme/HostNameResolver.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/PlainSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/Scheme.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/SchemeRegistry.html
-http://developer.android.com/reference/android/content/pm/ActivityInfo.html
-http://developer.android.com/reference/android/content/pm/ApplicationInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/ComponentInfo.html
-http://developer.android.com/reference/android/content/pm/InstrumentationInfo.html
-http://developer.android.com/reference/android/content/pm/LabeledIntent.html
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/PackageStats.html
-http://developer.android.com/reference/android/content/pm/PathPermission.html
-http://developer.android.com/reference/android/content/pm/PermissionGroupInfo.html
-http://developer.android.com/reference/android/content/pm/PermissionInfo.html
-http://developer.android.com/reference/android/content/pm/ProviderInfo.html
-http://developer.android.com/reference/android/content/pm/ResolveInfo.html
-http://developer.android.com/reference/android/content/pm/ResolveInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/ServiceInfo.html
-http://developer.android.com/reference/android/content/pm/Signature.html
-http://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo.html
-http://developer.android.com/reference/java/math/BigInteger.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.CursorToStringConverter.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.ViewBinder.html
-http://developer.android.com/reference/android/support/v4/widget/CursorAdapter.html
-http://developer.android.com/reference/android/support/v4/widget/EdgeEffectCompat.html
-http://developer.android.com/reference/android/support/v4/widget/ResourceCursorAdapter.html
-http://developer.android.com/reference/android/support/v4/widget/SearchViewCompat.html
-http://developer.android.com/reference/android/support/v4/widget/SearchViewCompat.OnQueryTextListenerCompat.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.html
-http://developer.android.com/reference/android/support/v4/content/CursorLoader.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.html
-http://developer.android.com/resources/samples/ContactManager/index.html
-http://developer.android.com/reference/android/provider/ContactsContract.DataColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.SyncColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredName.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Email.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Photo.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredPostal.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.GroupMembership.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
-http://developer.android.com/reference/android/provider/ContactsContract.Settings.html
-http://developer.android.com/reference/android/provider/ContactsContract.SyncState.html
-http://developer.android.com/reference/android/provider/ContactsContract.Groups.html
-http://developer.android.com/reference/android/provider/ContactsContract.GroupsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.SettingsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Entity.html
-http://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.CommonColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemPhotos.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemPhotosColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.DisplayPhoto.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.StreamItemPhotos.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.DisplayPhoto.html
-http://developer.android.com/reference/java/util/Locale.html
-http://developer.android.com/reference/java/util/Calendar.html
-http://developer.android.com/reference/android/accounts/Account.html
-http://developer.android.com/reference/android/graphics/ColorFilter.html
-http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
-http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
-http://developer.android.com/reference/org/apache/http/message/AbstractHttpMessage.html
-http://developer.android.com/reference/org/apache/http/message/HeaderGroup.html
-http://developer.android.com/reference/org/apache/http/params/HttpParams.html
-http://developer.android.com/reference/java/net/URI.html
-http://developer.android.com/reference/org/apache/http/ProtocolVersion.html
-http://developer.android.com/reference/org/apache/http/RequestLine.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionRequest.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionReleaseTrigger.html
-http://developer.android.com/reference/org/apache/http/Header.html
-http://developer.android.com/reference/org/apache/http/HttpMessage.html
-http://developer.android.com/reference/org/apache/http/HeaderIterator.html
-http://developer.android.com/reference/android/content/res/XmlResourceParser.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseInputStream.html
-http://developer.android.com/reference/android/content/res/AssetManager.AssetInputStream.html
-http://developer.android.com/reference/android/content/res/ColorStateList.html
-http://developer.android.com/reference/android/content/res/ObbInfo.html
-http://developer.android.com/reference/android/content/res/ObbScanner.html
-http://developer.android.com/resources/samples/MultiResolution/index.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
-http://developer.android.com/guide/practices/screens-support-1.5.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.html
-http://developer.android.com/resources/dashboard/screens.html
-http://developer.android.com/shareables/training/LocationAware.zip
-http://developer.android.com/reference/android/text/method/MetaKeyKeyListener.html
-http://developer.android.com/reference/java/security/GeneralSecurityException.html
-http://developer.android.com/reference/org/apache/http/protocol/ExecutionContext.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpExpectationVerifier.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpProcessor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandler.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerResolver.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestInterceptorList.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpResponseInterceptorList.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpProcessor.html
-http://developer.android.com/reference/org/apache/http/protocol/DefaultedHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/HTTP.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpDateGenerator.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestExecutor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerRegistry.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpService.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestContent.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestDate.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestExpectContinue.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestTargetHost.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestUserAgent.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseContent.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseDate.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseServer.html
-http://developer.android.com/reference/org/apache/http/protocol/SyncBasicHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/UriPatternMatcher.html
-http://developer.android.com/reference/android/accounts/AccountManagerCallback.html
-http://developer.android.com/reference/android/accounts/AccountManagerFuture.html
-http://developer.android.com/reference/android/accounts/OnAccountsUpdateListener.html
-http://developer.android.com/reference/android/accounts/AccountAuthenticatorResponse.html
-http://developer.android.com/reference/android/accounts/AuthenticatorDescription.html
-http://developer.android.com/reference/android/accounts/AccountsException.html
-http://developer.android.com/reference/android/accounts/AuthenticatorException.html
-http://developer.android.com/reference/android/accounts/NetworkErrorException.html
-http://developer.android.com/reference/android/accounts/OperationCanceledException.html
-http://developer.android.com/reference/android/text/TextWatcher.html
-http://developer.android.com/reference/android/text/method/MovementMethod.html
-http://developer.android.com/reference/android/text/Editable.html
-http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
-http://developer.android.com/reference/android/text/InputFilter.html
-http://developer.android.com/reference/android/text/method/KeyListener.html
-http://developer.android.com/reference/android/text/Layout.html
-http://developer.android.com/reference/android/text/method/LinkMovementMethod.html
-http://developer.android.com/reference/android/text/TextPaint.html
-http://developer.android.com/reference/android/text/Selection.html
-http://developer.android.com/reference/android/text/method/TransformationMethod.html
-http://developer.android.com/reference/android/graphics/Typeface.html
-http://developer.android.com/reference/android/text/style/URLSpan.html
-http://developer.android.com/reference/android/text/util/Linkify.html
-http://developer.android.com/reference/android/text/Editable.Factory.html
-http://developer.android.com/reference/android/text/Spannable.Factory.html
-http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
-http://developer.android.com/reference/org/apache/http/HttpException.html
-http://developer.android.com/reference/java/util/Comparator.html
-http://developer.android.com/reference/java/util/Enumeration.html
-http://developer.android.com/reference/java/util/Formattable.html
-http://developer.android.com/reference/java/util/Iterator.html
-http://developer.android.com/reference/java/util/ListIterator.html
-http://developer.android.com/reference/java/util/Map.Entry.html
-http://developer.android.com/reference/java/util/Observer.html
-http://developer.android.com/reference/java/util/RandomAccess.html
-http://developer.android.com/reference/java/util/SortedMap.html
-http://developer.android.com/reference/java/util/SortedSet.html
-http://developer.android.com/reference/java/util/AbstractCollection.html
-http://developer.android.com/reference/java/util/AbstractList.html
-http://developer.android.com/reference/java/util/AbstractMap.html
-http://developer.android.com/reference/java/util/AbstractMap.SimpleEntry.html
-http://developer.android.com/reference/java/util/AbstractMap.SimpleImmutableEntry.html
-http://developer.android.com/reference/java/util/AbstractQueue.html
-http://developer.android.com/reference/java/util/AbstractSequentialList.html
-http://developer.android.com/reference/java/util/AbstractSet.html
-http://developer.android.com/reference/java/util/ArrayDeque.html
-http://developer.android.com/reference/java/util/Arrays.html
-http://developer.android.com/reference/java/util/BitSet.html
-http://developer.android.com/reference/java/util/Collections.html
-http://developer.android.com/reference/java/util/Currency.html
-http://developer.android.com/reference/java/util/Date.html
-http://developer.android.com/reference/java/util/Dictionary.html
-http://developer.android.com/reference/java/util/EnumMap.html
-http://developer.android.com/reference/java/util/EnumSet.html
-http://developer.android.com/reference/java/util/EventListenerProxy.html
-http://developer.android.com/reference/java/util/FormattableFlags.html
-http://developer.android.com/reference/java/util/GregorianCalendar.html
-http://developer.android.com/reference/java/util/HashSet.html
-http://developer.android.com/reference/java/util/Hashtable.html
-http://developer.android.com/reference/java/util/IdentityHashMap.html
-http://developer.android.com/reference/java/util/LinkedHashMap.html
-http://developer.android.com/reference/java/util/LinkedHashSet.html
-http://developer.android.com/reference/java/util/LinkedList.html
-http://developer.android.com/reference/java/util/ListResourceBundle.html
-http://developer.android.com/reference/java/util/Observable.html
-http://developer.android.com/reference/java/util/Properties.html
-http://developer.android.com/reference/java/util/PropertyPermission.html
-http://developer.android.com/reference/java/util/PropertyResourceBundle.html
-http://developer.android.com/reference/java/util/Random.html
-http://developer.android.com/reference/java/util/ResourceBundle.html
-http://developer.android.com/reference/java/util/ResourceBundle.Control.html
-http://developer.android.com/reference/java/util/Scanner.html
-http://developer.android.com/reference/java/util/ServiceLoader.html
-http://developer.android.com/reference/java/util/SimpleTimeZone.html
-http://developer.android.com/reference/java/util/Stack.html
-http://developer.android.com/reference/java/util/StringTokenizer.html
-http://developer.android.com/reference/java/util/Timer.html
-http://developer.android.com/reference/java/util/TimerTask.html
-http://developer.android.com/reference/java/util/TimeZone.html
-http://developer.android.com/reference/java/util/TreeMap.html
-http://developer.android.com/reference/java/util/TreeSet.html
-http://developer.android.com/reference/java/util/UUID.html
-http://developer.android.com/reference/java/util/Vector.html
-http://developer.android.com/reference/java/util/WeakHashMap.html
-http://developer.android.com/reference/java/util/Formatter.BigDecimalLayoutForm.html
-http://developer.android.com/reference/java/util/ConcurrentModificationException.html
-http://developer.android.com/reference/java/util/DuplicateFormatFlagsException.html
-http://developer.android.com/reference/java/util/EmptyStackException.html
-http://developer.android.com/reference/java/util/FormatFlagsConversionMismatchException.html
-http://developer.android.com/reference/java/util/FormatterClosedException.html
-http://developer.android.com/reference/java/util/IllegalFormatCodePointException.html
-http://developer.android.com/reference/java/util/IllegalFormatConversionException.html
-http://developer.android.com/reference/java/util/IllegalFormatException.html
-http://developer.android.com/reference/java/util/IllegalFormatFlagsException.html
-http://developer.android.com/reference/java/util/IllegalFormatPrecisionException.html
-http://developer.android.com/reference/java/util/IllegalFormatWidthException.html
-http://developer.android.com/reference/java/util/InputMismatchException.html
-http://developer.android.com/reference/java/util/InvalidPropertiesFormatException.html
-http://developer.android.com/reference/java/util/MissingFormatArgumentException.html
-http://developer.android.com/reference/java/util/MissingFormatWidthException.html
-http://developer.android.com/reference/java/util/MissingResourceException.html
-http://developer.android.com/reference/java/util/NoSuchElementException.html
-http://developer.android.com/reference/java/util/TooManyListenersException.html
-http://developer.android.com/reference/java/util/UnknownFormatConversionException.html
-http://developer.android.com/reference/java/util/UnknownFormatFlagsException.html
-http://developer.android.com/reference/java/util/ServiceConfigurationError.html
-http://developer.android.com/reference/javax/sql/ConnectionEvent.html
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedEvent.html
-http://developer.android.com/reference/java/beans/PropertyChangeEvent.html
-http://developer.android.com/reference/javax/sql/RowSetEvent.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingEvent.html
-http://developer.android.com/reference/javax/sql/StatementEvent.html
-http://developer.android.com/reference/javax/sql/PooledConnection.html
-http://developer.android.com/reference/javax/sql/RowSet.html
-http://developer.android.com/reference/javax/net/ssl/SSLSession.html
-http://developer.android.com/reference/java/beans/IndexedPropertyChangeEvent.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List2.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List7.html
-http://developer.android.com/reference/java/security/AlgorithmParameters.html
-http://developer.android.com/reference/java/security/Key.html
-http://developer.android.com/reference/java/security/Provider.html
-http://developer.android.com/reference/java/security/NoSuchAlgorithmException.html
-http://developer.android.com/reference/java/security/InvalidKeyException.html
-http://developer.android.com/reference/java/security/NoSuchProviderException.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScheme.html
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/auth/Credentials.html
-http://developer.android.com/reference/org/apache/http/auth/AUTH.html
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeRegistry.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
-http://developer.android.com/reference/org/apache/http/auth/AuthState.html
-http://developer.android.com/reference/org/apache/http/auth/BasicUserPrincipal.html
-http://developer.android.com/reference/org/apache/http/auth/NTCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/NTUserPrincipal.html
-http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/AuthenticationException.html
-http://developer.android.com/reference/org/apache/http/auth/InvalidCredentialsException.html
-http://developer.android.com/reference/org/apache/http/auth/MalformedChallengeException.html
-http://developer.android.com/reference/android/hardware/SensorListener.html
-http://developer.android.com/shareables/training/NewsReader.zip
-http://developer.android.com/sdk/compatibility-library.html
-http://developer.android.com/resources/samples/SearchableDictionary/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewActionBar.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewFilterMode.html
-http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/SearchableDictionary.html
-http://developer.android.com/reference/android/support/v13/app/FragmentTabHost.html
-http://developer.android.com/guide/developing/tools/traceview.html
-http://developer.android.com/reference/java/lang/annotation/Annotation.html
-http://developer.android.com/reference/java/lang/annotation/ElementType.html
-http://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationTypeMismatchException.html
-http://developer.android.com/reference/java/lang/annotation/IncompleteAnnotationException.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationFormatError.html
-http://developer.android.com/reference/android/media/AudioManager.OnAudioFocusChangeListener.html
-http://developer.android.com/reference/android/media/AudioRecord.OnRecordPositionUpdateListener.html
-http://developer.android.com/reference/android/media/AudioTrack.OnPlaybackPositionUpdateListener.html
-http://developer.android.com/reference/android/media/JetPlayer.OnJetEventListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnBufferingUpdateListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnInfoListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnPreparedListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnSeekCompleteListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnTimedTextListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnVideoSizeChangedListener.html
-http://developer.android.com/reference/android/media/MediaRecorder.OnErrorListener.html
-http://developer.android.com/reference/android/media/MediaRecorder.OnInfoListener.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.MediaScannerConnectionClient.html
-http://developer.android.com/reference/android/media/SoundPool.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/media/AsyncPlayer.html
-http://developer.android.com/reference/android/media/AudioFormat.html
-http://developer.android.com/reference/android/media/AudioRecord.html
-http://developer.android.com/reference/android/media/AudioTrack.html
-http://developer.android.com/reference/android/media/CameraProfile.html
-http://developer.android.com/reference/android/media/ExifInterface.html
-http://developer.android.com/reference/android/media/FaceDetector.html
-http://developer.android.com/reference/android/media/FaceDetector.Face.html
-http://developer.android.com/reference/android/media/MediaActionSound.html
-http://developer.android.com/reference/android/media/MediaCodec.html
-http://developer.android.com/reference/android/media/MediaCodec.BufferInfo.html
-http://developer.android.com/reference/android/media/MediaCodec.CryptoInfo.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.CodecCapabilities.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html
-http://developer.android.com/reference/android/media/MediaCodecList.html
-http://developer.android.com/reference/android/media/MediaCrypto.html
-http://developer.android.com/reference/android/media/MediaExtractor.html
-http://developer.android.com/reference/android/media/MediaFormat.html
-http://developer.android.com/reference/android/media/MediaMetadataRetriever.html
-http://developer.android.com/reference/android/media/MediaPlayer.TrackInfo.html
-http://developer.android.com/reference/android/media/MediaRecorder.AudioEncoder.html
-http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html
-http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html
-http://developer.android.com/reference/android/media/MediaRecorder.VideoEncoder.html
-http://developer.android.com/reference/android/media/MediaRecorder.VideoSource.html
-http://developer.android.com/reference/android/media/MediaRouter.Callback.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteCategory.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteGroup.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteInfo.html
-http://developer.android.com/reference/android/media/MediaRouter.SimpleCallback.html
-http://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo.html
-http://developer.android.com/reference/android/media/MediaRouter.VolumeCallback.html
-http://developer.android.com/reference/android/media/MediaSyncEvent.html
-http://developer.android.com/reference/android/media/RemoteControlClient.html
-http://developer.android.com/reference/android/media/RemoteControlClient.MetadataEditor.html
-http://developer.android.com/reference/android/media/Ringtone.html
-http://developer.android.com/reference/android/media/RingtoneManager.html
-http://developer.android.com/reference/android/media/SoundPool.html
-http://developer.android.com/reference/android/media/ThumbnailUtils.html
-http://developer.android.com/reference/android/media/TimedText.html
-http://developer.android.com/reference/android/media/ToneGenerator.html
-http://developer.android.com/reference/android/media/MediaCodec.CryptoException.html
-http://developer.android.com/reference/android/media/MediaCryptoException.html
-http://developer.android.com/reference/java/lang/Appendable.html
-http://developer.android.com/reference/java/lang/Comparable.html
-http://developer.android.com/reference/java/lang/Iterable.html
-http://developer.android.com/reference/java/lang/Readable.html
-http://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler.html
-http://developer.android.com/reference/java/lang/Boolean.html
-http://developer.android.com/reference/java/lang/Byte.html
-http://developer.android.com/reference/java/lang/Character.html
-http://developer.android.com/reference/java/lang/Character.Subset.html
-http://developer.android.com/reference/java/lang/Character.UnicodeBlock.html
-http://developer.android.com/reference/java/lang/Compiler.html
-http://developer.android.com/reference/java/lang/Double.html
-http://developer.android.com/reference/java/lang/Enum.html
-http://developer.android.com/reference/java/lang/InheritableThreadLocal.html
-http://developer.android.com/reference/java/lang/Long.html
-http://developer.android.com/reference/java/lang/Package.html
-http://developer.android.com/reference/java/lang/Process.html
-http://developer.android.com/reference/java/lang/ProcessBuilder.html
-http://developer.android.com/reference/java/lang/Runtime.html
-http://developer.android.com/reference/java/lang/RuntimePermission.html
-http://developer.android.com/reference/java/lang/SecurityManager.html
-http://developer.android.com/reference/java/lang/Short.html
-http://developer.android.com/reference/java/lang/StrictMath.html
-http://developer.android.com/reference/java/lang/StringBuffer.html
-http://developer.android.com/reference/java/lang/ThreadGroup.html
-http://developer.android.com/reference/java/lang/ThreadLocal.html
-http://developer.android.com/reference/java/lang/Void.html
-http://developer.android.com/reference/java/lang/Thread.State.html
-http://developer.android.com/reference/java/lang/ArithmeticException.html
-http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/ArrayStoreException.html
-http://developer.android.com/reference/java/lang/ClassCastException.html
-http://developer.android.com/reference/java/lang/ClassNotFoundException.html
-http://developer.android.com/reference/java/lang/EnumConstantNotPresentException.html
-http://developer.android.com/reference/java/lang/IllegalAccessException.html
-http://developer.android.com/reference/java/lang/IllegalMonitorStateException.html
-http://developer.android.com/reference/java/lang/IllegalThreadStateException.html
-http://developer.android.com/reference/java/lang/IndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/NegativeArraySizeException.html
-http://developer.android.com/reference/java/lang/NoSuchFieldException.html
-http://developer.android.com/reference/java/lang/NoSuchMethodException.html
-http://developer.android.com/reference/java/lang/NumberFormatException.html
-http://developer.android.com/reference/java/lang/StringIndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/TypeNotPresentException.html
-http://developer.android.com/reference/java/lang/AbstractMethodError.html
-http://developer.android.com/reference/java/lang/AssertionError.html
-http://developer.android.com/reference/java/lang/ClassCircularityError.html
-http://developer.android.com/reference/java/lang/ClassFormatError.html
-http://developer.android.com/reference/java/lang/Error.html
-http://developer.android.com/reference/java/lang/ExceptionInInitializerError.html
-http://developer.android.com/reference/java/lang/IllegalAccessError.html
-http://developer.android.com/reference/java/lang/IncompatibleClassChangeError.html
-http://developer.android.com/reference/java/lang/InstantiationError.html
-http://developer.android.com/reference/java/lang/InternalError.html
-http://developer.android.com/reference/java/lang/LinkageError.html
-http://developer.android.com/reference/java/lang/NoClassDefFoundError.html
-http://developer.android.com/reference/java/lang/NoSuchFieldError.html
-http://developer.android.com/reference/java/lang/NoSuchMethodError.html
-http://developer.android.com/reference/java/lang/OutOfMemoryError.html
-http://developer.android.com/reference/java/lang/StackOverflowError.html
-http://developer.android.com/reference/java/lang/ThreadDeath.html
-http://developer.android.com/reference/java/lang/UnknownError.html
-http://developer.android.com/reference/java/lang/UnsatisfiedLinkError.html
-http://developer.android.com/reference/java/lang/UnsupportedClassVersionError.html
-http://developer.android.com/reference/java/lang/VirtualMachineError.html
-http://developer.android.com/reference/java/nio/channels/AlreadyConnectedException.html
-http://developer.android.com/reference/java/nio/channels/CancelledKeyException.html
-http://developer.android.com/reference/java/nio/channels/ClosedSelectorException.html
-http://developer.android.com/reference/java/nio/channels/ConnectionPendingException.html
-http://developer.android.com/reference/java/nio/channels/IllegalBlockingModeException.html
-http://developer.android.com/reference/java/nio/InvalidMarkException.html
-http://developer.android.com/reference/java/nio/channels/NoConnectionPendingException.html
-http://developer.android.com/reference/java/nio/channels/NonReadableChannelException.html
-http://developer.android.com/reference/java/nio/channels/NonWritableChannelException.html
-http://developer.android.com/reference/java/nio/channels/NotYetBoundException.html
-http://developer.android.com/reference/java/nio/channels/NotYetConnectedException.html
-http://developer.android.com/reference/java/nio/channels/OverlappingFileLockException.html
-http://developer.android.com/reference/java/nio/channels/Selector.html
-http://developer.android.com/reference/java/nio/channels/SocketChannel.html
-http://developer.android.com/reference/javax/crypto/spec/DHGenParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/OAEPParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/PBEParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/RC2ParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/RC5ParameterSpec.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueFormatter.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/message/LineFormatter.html
-http://developer.android.com/reference/org/apache/http/message/LineParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeader.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderElement.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderElementIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueFormatter.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpEntityEnclosingRequest.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpRequest.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpResponse.html
-http://developer.android.com/reference/org/apache/http/message/BasicLineFormatter.html
-http://developer.android.com/reference/org/apache/http/message/BasicLineParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicListHeaderIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicNameValuePair.html
-http://developer.android.com/reference/org/apache/http/message/BasicRequestLine.html
-http://developer.android.com/reference/org/apache/http/message/BasicStatusLine.html
-http://developer.android.com/reference/org/apache/http/message/BasicTokenIterator.html
-http://developer.android.com/reference/org/apache/http/message/BufferedHeader.html
-http://developer.android.com/reference/org/apache/http/message/ParserCursor.html
-http://developer.android.com/reference/org/apache/http/impl/client/RequestWrapper.html
-http://developer.android.com/reference/org/apache/http/impl/client/EntityEnclosingRequestWrapper.html
-http://developer.android.com/reference/org/apache/http/HttpEntityEnclosingRequest.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie2.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicCommentHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicDomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicExpiresHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicMaxAgeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicPathHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicSecureHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/CookieSpecBase.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/DateUtils.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109DomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109Spec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109SpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109VersionHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965Spec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965SpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/DateParseException.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieAttributeHandler.html
-http://developer.android.com/reference/java/math/BigDecimal.html
-http://developer.android.com/reference/java/math/MathContext.html
-http://developer.android.com/reference/java/math/RoundingMode.html
-http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/AbstractVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/AllowAllHostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/StrictHostnameVerifier.html
-http://developer.android.com/reference/javax/crypto/spec/SecretKeySpec.html
-http://developer.android.com/reference/java/nio/ByteBuffer.html
-http://developer.android.com/reference/java/security/SecureRandom.html
-http://developer.android.com/reference/java/security/InvalidAlgorithmParameterException.html
-http://developer.android.com/reference/java/nio/charset/Charset.html
-http://developer.android.com/reference/java/nio/charset/CharsetDecoder.html
-http://developer.android.com/reference/java/io/UnsupportedEncodingException.html
-http://developer.android.com/reference/java/nio/charset/CharsetEncoder.html
-http://developer.android.com/reference/java/util/regex/Pattern.html
-http://developer.android.com/reference/android/provider/CalendarContract.AttendeesColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarAlertsColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarCacheColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarSyncColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.ColorsColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.EventDaysColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.EventsColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.ExtendedPropertiesColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.RemindersColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.SyncColumns.html
-http://developer.android.com/reference/android/provider/Contacts.ContactMethodsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.ExtensionsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.GroupsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.OrganizationColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PeopleColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PhonesColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PhotosColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PresenceColumns.html
-http://developer.android.com/reference/android/provider/Contacts.SettingsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.BaseSyncColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.BaseTypes.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactNameColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactOptionsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactStatusColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.DataColumnsWithJoins.html
-http://developer.android.com/reference/android/provider/ContactsContract.DisplayNameSources.html
-http://developer.android.com/reference/android/provider/ContactsContract.FullNameStyle.html
-http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookupColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.PhoneticNameStyle.html
-http://developer.android.com/reference/android/provider/ContactsContract.PresenceColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.StatusColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.AlbumColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.ArtistColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.AudioColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.GenresColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.PlaylistsColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Files.FileColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.VideoColumns.html
-http://developer.android.com/reference/android/provider/OpenableColumns.html
-http://developer.android.com/reference/android/provider/SyncStateContract.Columns.html
-http://developer.android.com/reference/android/provider/AlarmClock.html
-http://developer.android.com/reference/android/provider/Browser.html
-http://developer.android.com/reference/android/provider/Browser.BookmarkColumns.html
-http://developer.android.com/reference/android/provider/Browser.SearchColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.html
-http://developer.android.com/reference/android/provider/CalendarContract.Attendees.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarAlerts.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarCache.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarEntity.html
-http://developer.android.com/reference/android/provider/CalendarContract.Calendars.html
-http://developer.android.com/reference/android/provider/CalendarContract.Colors.html
-http://developer.android.com/reference/android/provider/CalendarContract.EventDays.html
-http://developer.android.com/reference/android/provider/CalendarContract.Events.html
-http://developer.android.com/reference/android/provider/CalendarContract.EventsEntity.html
-http://developer.android.com/reference/android/provider/CalendarContract.ExtendedProperties.html
-http://developer.android.com/reference/android/provider/CalendarContract.Instances.html
-http://developer.android.com/reference/android/provider/CalendarContract.Reminders.html
-http://developer.android.com/reference/android/provider/CalendarContract.SyncState.html
-http://developer.android.com/reference/android/provider/CallLog.html
-http://developer.android.com/reference/android/provider/CallLog.Calls.html
-http://developer.android.com/reference/android/provider/Contacts.html
-http://developer.android.com/reference/android/provider/Contacts.ContactMethods.html
-http://developer.android.com/reference/android/provider/Contacts.Extensions.html
-http://developer.android.com/reference/android/provider/Contacts.GroupMembership.html
-http://developer.android.com/reference/android/provider/Contacts.Groups.html
-http://developer.android.com/reference/android/provider/Contacts.Intents.html
-http://developer.android.com/reference/android/provider/Contacts.Intents.Insert.html
-http://developer.android.com/reference/android/provider/Contacts.Intents.UI.html
-http://developer.android.com/reference/android/provider/Contacts.Organizations.html
-http://developer.android.com/reference/android/provider/Contacts.People.html
-http://developer.android.com/reference/android/provider/Contacts.People.ContactMethods.html
-http://developer.android.com/reference/android/provider/Contacts.People.Extensions.html
-http://developer.android.com/reference/android/provider/Contacts.People.Phones.html
-http://developer.android.com/reference/android/provider/Contacts.Phones.html
-http://developer.android.com/reference/android/provider/Contacts.Photos.html
-http://developer.android.com/reference/android/provider/Contacts.Settings.html
-http://developer.android.com/reference/android/provider/ContactsContract.AggregationExceptions.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Event.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Identity.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Im.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Nickname.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Note.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Organization.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Relation.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.SipAddress.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Website.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.AggregationSuggestions.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Data.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.StreamItems.html
-http://developer.android.com/reference/android/provider/ContactsContract.DataUsageFeedback.html
-http://developer.android.com/reference/android/provider/ContactsContract.Directory.html
-http://developer.android.com/reference/android/provider/ContactsContract.Intents.html
-http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html
-http://developer.android.com/reference/android/provider/ContactsContract.Presence.html
-http://developer.android.com/reference/android/provider/ContactsContract.ProfileSyncState.html
-http://developer.android.com/reference/android/provider/ContactsContract.QuickContact.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Data.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Entity.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.StreamItems.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContactsEntity.html
-http://developer.android.com/reference/android/provider/ContactsContract.StatusUpdates.html
-http://developer.android.com/reference/android/provider/LiveFolders.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Albums.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.Albums.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Genres.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Genres.Members.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Media.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.Members.html
-http://developer.android.com/reference/android/provider/MediaStore.Files.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.Thumbnails.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.Media.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.Thumbnails.html
-http://developer.android.com/reference/android/provider/SearchRecentSuggestions.html
-http://developer.android.com/reference/android/provider/Settings.html
-http://developer.android.com/reference/android/provider/Settings.Global.html
-http://developer.android.com/reference/android/provider/Settings.NameValueTable.html
-http://developer.android.com/reference/android/provider/Settings.Secure.html
-http://developer.android.com/reference/android/provider/Settings.System.html
-http://developer.android.com/reference/android/provider/SyncStateContract.html
-http://developer.android.com/reference/android/provider/SyncStateContract.Constants.html
-http://developer.android.com/reference/android/provider/SyncStateContract.Helpers.html
-http://developer.android.com/reference/android/provider/UserDictionary.html
-http://developer.android.com/reference/android/provider/UserDictionary.Words.html
-http://developer.android.com/reference/android/provider/VoicemailContract.html
-http://developer.android.com/reference/android/provider/VoicemailContract.Status.html
-http://developer.android.com/reference/android/provider/VoicemailContract.Voicemails.html
-http://developer.android.com/reference/android/provider/Settings.SettingNotFoundException.html
-http://developer.android.com/reference/android/support/v4/view/AccessibilityDelegateCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewCompat.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html
-http://developer.android.com/reference/android/opengl/Matrix.html
-http://developer.android.com/shareables/training/EffectiveNavigation.zip
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursorDriver.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteClosable.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursor.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteQuery.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteAbortException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteAccessPermException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteBlobTooBigException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCantOpenDatabaseException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteConstraintException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseCorruptException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseLockedException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatatypeMismatchException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDiskIOException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDoneException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteFullException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteMisuseException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteOutOfMemoryException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteReadOnlyDatabaseException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteTableLockedException.html
-http://developer.android.com/reference/android/text/GetChars.html
-http://developer.android.com/reference/android/text/Html.ImageGetter.html
-http://developer.android.com/reference/android/text/Html.TagHandler.html
-http://developer.android.com/reference/android/text/NoCopySpan.html
-http://developer.android.com/reference/android/text/ParcelableSpan.html
-http://developer.android.com/reference/android/text/Spannable.html
-http://developer.android.com/reference/android/text/Spanned.html
-http://developer.android.com/reference/android/text/SpanWatcher.html
-http://developer.android.com/reference/android/text/TextUtils.EllipsizeCallback.html
-http://developer.android.com/reference/android/text/TextUtils.StringSplitter.html
-http://developer.android.com/reference/android/text/AlteredCharSequence.html
-http://developer.android.com/reference/android/text/AndroidCharacter.html
-http://developer.android.com/reference/android/text/Annotation.html
-http://developer.android.com/reference/android/text/AutoText.html
-http://developer.android.com/reference/android/text/BoringLayout.html
-http://developer.android.com/reference/android/text/BoringLayout.Metrics.html
-http://developer.android.com/reference/android/text/DynamicLayout.html
-http://developer.android.com/reference/android/text/InputFilter.AllCaps.html
-http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html
-http://developer.android.com/reference/android/text/Layout.Directions.html
-http://developer.android.com/reference/android/text/LoginFilter.html
-http://developer.android.com/reference/android/text/LoginFilter.PasswordFilterGMail.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGeneric.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGMail.html
-http://developer.android.com/reference/android/text/NoCopySpan.Concrete.html
-http://developer.android.com/reference/android/text/SpannableString.html
-http://developer.android.com/reference/android/text/SpannableStringBuilder.html
-http://developer.android.com/reference/android/text/SpannedString.html
-http://developer.android.com/reference/android/text/StaticLayout.html
-http://developer.android.com/reference/android/text/TextUtils.SimpleStringSplitter.html
-http://developer.android.com/reference/android/text/Layout.Alignment.html
-http://developer.android.com/reference/java/io/DataInput.html
-http://developer.android.com/reference/java/io/DataOutput.html
-http://developer.android.com/reference/java/io/Externalizable.html
-http://developer.android.com/reference/java/io/FileFilter.html
-http://developer.android.com/reference/java/io/FilenameFilter.html
-http://developer.android.com/reference/java/io/ObjectInput.html
-http://developer.android.com/reference/java/io/ObjectInputValidation.html
-http://developer.android.com/reference/java/io/ObjectOutput.html
-http://developer.android.com/reference/java/io/ObjectStreamConstants.html
-http://developer.android.com/reference/java/io/BufferedInputStream.html
-http://developer.android.com/reference/java/io/BufferedOutputStream.html
-http://developer.android.com/reference/java/io/BufferedReader.html
-http://developer.android.com/reference/java/io/BufferedWriter.html
-http://developer.android.com/reference/java/io/ByteArrayInputStream.html
-http://developer.android.com/reference/java/io/ByteArrayOutputStream.html
-http://developer.android.com/reference/java/io/CharArrayReader.html
-http://developer.android.com/reference/java/io/CharArrayWriter.html
-http://developer.android.com/reference/java/io/Console.html
-http://developer.android.com/reference/java/io/DataInputStream.html
-http://developer.android.com/reference/java/io/DataOutputStream.html
-http://developer.android.com/reference/java/io/FilePermission.html
-http://developer.android.com/reference/java/io/FileReader.html
-http://developer.android.com/reference/java/io/FileWriter.html
-http://developer.android.com/reference/java/io/FilterInputStream.html
-http://developer.android.com/reference/java/io/FilterOutputStream.html
-http://developer.android.com/reference/java/io/FilterReader.html
-http://developer.android.com/reference/java/io/FilterWriter.html
-http://developer.android.com/reference/java/io/InputStreamReader.html
-http://developer.android.com/reference/java/io/LineNumberInputStream.html
-http://developer.android.com/reference/java/io/LineNumberReader.html
-http://developer.android.com/reference/java/io/ObjectInputStream.html
-http://developer.android.com/reference/java/io/ObjectInputStream.GetField.html
-http://developer.android.com/reference/java/io/ObjectOutputStream.html
-http://developer.android.com/reference/java/io/ObjectOutputStream.PutField.html
-http://developer.android.com/reference/java/io/ObjectStreamClass.html
-http://developer.android.com/reference/java/io/ObjectStreamField.html
-http://developer.android.com/reference/java/io/OutputStreamWriter.html
-http://developer.android.com/reference/java/io/PipedInputStream.html
-http://developer.android.com/reference/java/io/PipedOutputStream.html
-http://developer.android.com/reference/java/io/PipedReader.html
-http://developer.android.com/reference/java/io/PipedWriter.html
-http://developer.android.com/reference/java/io/PushbackInputStream.html
-http://developer.android.com/reference/java/io/PushbackReader.html
-http://developer.android.com/reference/java/io/RandomAccessFile.html
-http://developer.android.com/reference/java/io/Reader.html
-http://developer.android.com/reference/java/io/SequenceInputStream.html
-http://developer.android.com/reference/java/io/SerializablePermission.html
-http://developer.android.com/reference/java/io/StreamTokenizer.html
-http://developer.android.com/reference/java/io/StringBufferInputStream.html
-http://developer.android.com/reference/java/io/StringReader.html
-http://developer.android.com/reference/java/io/StringWriter.html
-http://developer.android.com/reference/java/io/Writer.html
-http://developer.android.com/reference/java/io/CharConversionException.html
-http://developer.android.com/reference/java/io/EOFException.html
-http://developer.android.com/reference/java/io/InterruptedIOException.html
-http://developer.android.com/reference/java/io/InvalidClassException.html
-http://developer.android.com/reference/java/io/InvalidObjectException.html
-http://developer.android.com/reference/java/io/NotActiveException.html
-http://developer.android.com/reference/java/io/NotSerializableException.html
-http://developer.android.com/reference/java/io/ObjectStreamException.html
-http://developer.android.com/reference/java/io/OptionalDataException.html
-http://developer.android.com/reference/java/io/StreamCorruptedException.html
-http://developer.android.com/reference/java/io/SyncFailedException.html
-http://developer.android.com/reference/java/io/UTFDataFormatException.html
-http://developer.android.com/reference/java/io/WriteAbortedException.html
-http://developer.android.com/reference/java/io/IOError.html
-http://developer.android.com/reference/java/nio/CharBuffer.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.html
-http://developer.android.com/reference/android/database/DataSetObserver.html
-http://developer.android.com/reference/android/preference/Preference.html
-http://developer.android.com/reference/android/graphics/drawable/Animatable.html
-http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ClipDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ColorDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.ConstantState.html
-http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.html
-http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.DrawableContainerState.html
-http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/LayerDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/NinePatchDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/PaintDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/PictureDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ScaleDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.ShaderFactory.html
-http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.Orientation.html
-http://developer.android.com/reference/android/appwidget/AppWidgetHostView.html
-http://developer.android.com/reference/android/inputmethodservice/ExtractEditText.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.html
-http://developer.android.com/reference/android/inputmethodservice/Keyboard.html
-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/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
-http://developer.android.com/reference/android/support/v4/view/ViewPager.PageTransformer.html
-http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
-http://developer.android.com/reference/android/support/v4/view/GestureDetectorCompat.html
-http://developer.android.com/reference/android/support/v4/util/AtomicFile.html
-http://developer.android.com/reference/android/support/v4/content/IntentCompat.html
-http://developer.android.com/reference/android/support/v4/util/LruCache.html
-http://developer.android.com/reference/android/support/v4/net/ConnectivityManagerCompat.html
-http://developer.android.com/reference/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewGroupCompat.html
-http://developer.android.com/reference/android/support/v4/view/MenuCompat.html
-http://developer.android.com/resources/samples/Support4Demos/index.html
-http://developer.android.com/resources/samples/Support13Demos/index.html
-http://developer.android.com/reference/org/apache/http/ConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/HttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/HttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/HttpResponse.html
-http://developer.android.com/reference/android/test/suitebuilder/TestMethod.html
-http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.html
-http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.FailedToCreateTests.html
-http://developer.android.com/reference/android/graphics/SurfaceTexture.OnFrameAvailableListener.html
-http://developer.android.com/reference/android/graphics/AvoidXfermode.html
-http://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html
-http://developer.android.com/reference/android/graphics/BitmapShader.html
-http://developer.android.com/reference/android/graphics/BlurMaskFilter.html
-http://developer.android.com/reference/android/graphics/Camera.html
-http://developer.android.com/reference/android/graphics/Color.html
-http://developer.android.com/reference/android/graphics/ColorMatrix.html
-http://developer.android.com/reference/android/graphics/ColorMatrixColorFilter.html
-http://developer.android.com/reference/android/graphics/ComposePathEffect.html
-http://developer.android.com/reference/android/graphics/ComposeShader.html
-http://developer.android.com/reference/android/graphics/CornerPathEffect.html
-http://developer.android.com/reference/android/graphics/DashPathEffect.html
-http://developer.android.com/reference/android/graphics/DiscretePathEffect.html
-http://developer.android.com/reference/android/graphics/DrawFilter.html
-http://developer.android.com/reference/android/graphics/EmbossMaskFilter.html
-http://developer.android.com/reference/android/graphics/ImageFormat.html
-http://developer.android.com/reference/android/graphics/Interpolator.html
-http://developer.android.com/reference/android/graphics/LayerRasterizer.html
-http://developer.android.com/reference/android/graphics/LightingColorFilter.html
-http://developer.android.com/reference/android/graphics/LinearGradient.html
-http://developer.android.com/reference/android/graphics/MaskFilter.html
-http://developer.android.com/reference/android/graphics/Movie.html
-http://developer.android.com/reference/android/graphics/Paint.FontMetrics.html
-http://developer.android.com/reference/android/graphics/Paint.FontMetricsInt.html
-http://developer.android.com/reference/android/graphics/PaintFlagsDrawFilter.html
-http://developer.android.com/reference/android/graphics/Path.html
-http://developer.android.com/reference/android/graphics/PathDashPathEffect.html
-http://developer.android.com/reference/android/graphics/PathEffect.html
-http://developer.android.com/reference/android/graphics/PathMeasure.html
-http://developer.android.com/reference/android/graphics/Picture.html
-http://developer.android.com/reference/android/graphics/PixelFormat.html
-http://developer.android.com/reference/android/graphics/PixelXorXfermode.html
-http://developer.android.com/reference/android/graphics/PointF.html
-http://developer.android.com/reference/android/graphics/PorterDuff.html
-http://developer.android.com/reference/android/graphics/PorterDuffColorFilter.html
-http://developer.android.com/reference/android/graphics/PorterDuffXfermode.html
-http://developer.android.com/reference/android/graphics/RadialGradient.html
-http://developer.android.com/reference/android/graphics/Rasterizer.html
-http://developer.android.com/reference/android/graphics/RectF.html
-http://developer.android.com/reference/android/graphics/RegionIterator.html
-http://developer.android.com/reference/android/graphics/Shader.html
-http://developer.android.com/reference/android/graphics/SumPathEffect.html
-http://developer.android.com/reference/android/graphics/SurfaceTexture.html
-http://developer.android.com/reference/android/graphics/SweepGradient.html
-http://developer.android.com/reference/android/graphics/Xfermode.html
-http://developer.android.com/reference/android/graphics/YuvImage.html
-http://developer.android.com/reference/android/graphics/AvoidXfermode.Mode.html
-http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html
-http://developer.android.com/reference/android/graphics/Bitmap.Config.html
-http://developer.android.com/reference/android/graphics/BlurMaskFilter.Blur.html
-http://developer.android.com/reference/android/graphics/Canvas.EdgeType.html
-http://developer.android.com/reference/android/graphics/Canvas.VertexMode.html
-http://developer.android.com/reference/android/graphics/Interpolator.Result.html
-http://developer.android.com/reference/android/graphics/Matrix.ScaleToFit.html
-http://developer.android.com/reference/android/graphics/Paint.Align.html
-http://developer.android.com/reference/android/graphics/Paint.Cap.html
-http://developer.android.com/reference/android/graphics/Paint.Join.html
-http://developer.android.com/reference/android/graphics/Paint.Style.html
-http://developer.android.com/reference/android/graphics/Path.Direction.html
-http://developer.android.com/reference/android/graphics/Path.FillType.html
-http://developer.android.com/reference/android/graphics/PathDashPathEffect.Style.html
-http://developer.android.com/reference/android/graphics/Region.Op.html
-http://developer.android.com/reference/android/graphics/Shader.TileMode.html
-http://developer.android.com/reference/android/graphics/SurfaceTexture.OutOfResourcesException.html
-http://developer.android.com/reference/java/nio/channels/ReadableByteChannel.html
-http://developer.android.com/reference/java/util/regex/MatchResult.html
-http://developer.android.com/reference/java/util/regex/Matcher.html
-http://developer.android.com/reference/java/security/Permission.html
-http://developer.android.com/reference/java/security/PermissionCollection.html
-http://developer.android.com/reference/java/security/Guard.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpec.html
-http://developer.android.com/reference/org/apache/http/cookie/Cookie.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieOrigin.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLConfigChooser.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLContextFactory.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLWindowSurfaceFactory.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.GLWrapper.html
-http://developer.android.com/reference/android/opengl/EGL14.html
-http://developer.android.com/reference/android/opengl/EGLConfig.html
-http://developer.android.com/reference/android/opengl/EGLContext.html
-http://developer.android.com/reference/android/opengl/EGLDisplay.html
-http://developer.android.com/reference/android/opengl/EGLObjectHandle.html
-http://developer.android.com/reference/android/opengl/EGLSurface.html
-http://developer.android.com/reference/android/opengl/ETC1.html
-http://developer.android.com/reference/android/opengl/ETC1Util.html
-http://developer.android.com/reference/android/opengl/ETC1Util.ETC1Texture.html
-http://developer.android.com/reference/android/opengl/GLDebugHelper.html
-http://developer.android.com/reference/android/opengl/GLES10.html
-http://developer.android.com/reference/android/opengl/GLES10Ext.html
-http://developer.android.com/reference/android/opengl/GLES11.html
-http://developer.android.com/reference/android/opengl/GLES11Ext.html
-http://developer.android.com/reference/android/opengl/GLES20.html
-http://developer.android.com/reference/android/opengl/GLU.html
-http://developer.android.com/reference/android/opengl/GLUtils.html
-http://developer.android.com/reference/android/opengl/Visibility.html
-http://developer.android.com/reference/android/opengl/GLException.html
-http://developer.android.com/reference/java/security/cert/Certificate.html
-http://developer.android.com/reference/org/apache/http/impl/entity/EntityDeserializer.html
-http://developer.android.com/reference/org/apache/http/impl/entity/EntitySerializer.html
-http://developer.android.com/reference/org/apache/http/impl/entity/LaxContentLengthStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/entity/StrictContentLengthStrategy.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectionKey.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelector.html
-http://developer.android.com/reference/java/nio/channels/spi/SelectorProvider.html
-http://developer.android.com/reference/java/nio/channels/DatagramChannel.html
-http://developer.android.com/reference/java/nio/channels/Pipe.html
-http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html
-http://developer.android.com/reference/android/database/CrossProcessCursor.html
-http://developer.android.com/reference/android/database/AbstractCursor.html
-http://developer.android.com/reference/android/database/AbstractCursor.SelfContentObserver.html
-http://developer.android.com/reference/android/database/AbstractWindowedCursor.html
-http://developer.android.com/reference/android/database/CharArrayBuffer.html
-http://developer.android.com/reference/android/database/ContentObservable.html
-http://developer.android.com/reference/android/database/ContentObserver.html
-http://developer.android.com/reference/android/database/CrossProcessCursorWrapper.html
-http://developer.android.com/reference/android/database/CursorJoiner.html
-http://developer.android.com/reference/android/database/CursorWindow.html
-http://developer.android.com/reference/android/database/CursorWrapper.html
-http://developer.android.com/reference/android/database/DatabaseUtils.html
-http://developer.android.com/reference/android/database/DatabaseUtils.InsertHelper.html
-http://developer.android.com/reference/android/database/DataSetObservable.html
-http://developer.android.com/reference/android/database/DefaultDatabaseErrorHandler.html
-http://developer.android.com/reference/android/database/MatrixCursor.RowBuilder.html
-http://developer.android.com/reference/android/database/MergeCursor.html
-http://developer.android.com/reference/android/database/Observable.html
-http://developer.android.com/reference/android/database/CursorJoiner.Result.html
-http://developer.android.com/reference/android/database/CursorIndexOutOfBoundsException.html
-http://developer.android.com/reference/android/database/SQLException.html
-http://developer.android.com/reference/android/database/StaleDataException.html
-http://developer.android.com/reference/android/renderscript/ScriptC.html
-http://developer.android.com/reference/android/renderscript/Script.FieldBase.html
-http://developer.android.com/reference/renderscript/rs__core_8rsh.html
-http://developer.android.com/reference/android/renderscript/Allocation.html
-http://developer.android.com/reference/android/renderscript/Element.html
-http://developer.android.com/reference/android/renderscript/Type.html
-http://developer.android.com/reference/android/net/wifi/ScanResult.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.AuthAlgorithm.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.GroupCipher.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.KeyMgmt.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.PairwiseCipher.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Protocol.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Status.html
-http://developer.android.com/reference/android/net/wifi/WifiInfo.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
-http://developer.android.com/reference/android/net/wifi/WpsInfo.html
-http://developer.android.com/reference/android/net/wifi/SupplicantState.html
-http://developer.android.com/reference/android/net/NetworkInfo.html
-http://developer.android.com/reference/android/net/DhcpInfo.html
-http://developer.android.com/reference/org/xml/sax/AttributeList.html
-http://developer.android.com/reference/org/xml/sax/Attributes.html
-http://developer.android.com/reference/org/xml/sax/ContentHandler.html
-http://developer.android.com/reference/org/xml/sax/DocumentHandler.html
-http://developer.android.com/reference/org/xml/sax/DTDHandler.html
-http://developer.android.com/reference/org/xml/sax/EntityResolver.html
-http://developer.android.com/reference/org/xml/sax/ErrorHandler.html
-http://developer.android.com/reference/org/xml/sax/Locator.html
-http://developer.android.com/reference/org/xml/sax/Parser.html
-http://developer.android.com/reference/org/xml/sax/XMLFilter.html
-http://developer.android.com/reference/org/xml/sax/XMLReader.html
-http://developer.android.com/reference/org/xml/sax/HandlerBase.html
-http://developer.android.com/reference/org/xml/sax/InputSource.html
-http://developer.android.com/reference/org/xml/sax/SAXException.html
-http://developer.android.com/reference/org/xml/sax/SAXNotRecognizedException.html
-http://developer.android.com/reference/org/xml/sax/SAXNotSupportedException.html
-http://developer.android.com/reference/org/xml/sax/SAXParseException.html
-http://developer.android.com/reference/org/xml/sax/ext/Attributes2.html
-http://developer.android.com/reference/org/xml/sax/ext/Locator2.html
-http://developer.android.com/reference/org/xml/sax/ext/EntityResolver2.html
-http://developer.android.com/reference/org/xml/sax/ext/DeclHandler.html
-http://developer.android.com/reference/org/xml/sax/ext/LexicalHandler.html
-http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html
-http://developer.android.com/reference/org/apache/http/ProtocolException.html
-http://developer.android.com/reference/java/security/acl/AclEntry.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/ArcShape.html
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.html
-http://developer.android.com/reference/java/util/jar/Attributes.html
-http://developer.android.com/reference/java/security/AuthProvider.html
-http://developer.android.com/reference/java/text/CharacterIterator.html
-http://developer.android.com/reference/org/apache/http/params/BasicHttpParams.html
-http://developer.android.com/reference/java/text/BreakIterator.html
-http://developer.android.com/reference/org/apache/http/entity/ByteArrayEntity.html
-http://developer.android.com/reference/java/security/cert/CRLSelector.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderResult.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilder.html
-http://developer.android.com/reference/java/security/cert/CertPathParameters.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorResult.html
-http://developer.android.com/reference/java/security/cert/CertSelector.html
-http://developer.android.com/reference/java/security/cert/CertStoreParameters.html
-http://developer.android.com/reference/java/text/ChoiceFormat.html
-http://developer.android.com/reference/java/text/Collator.html
-http://developer.android.com/reference/java/security/cert/CollectionCertStoreParameters.html
-http://developer.android.com/reference/java/text/DateFormat.html
-http://developer.android.com/reference/java/text/DateFormatSymbols.html
-http://developer.android.com/reference/java/text/DecimalFormat.html
-http://developer.android.com/reference/java/text/DecimalFormatSymbols.html
-http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
-http://developer.android.com/reference/java/text/Format.html
-http://developer.android.com/reference/java/net/HttpCookie.html
-http://developer.android.com/reference/org/apache/http/HttpHost.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html
-http://developer.android.com/reference/org/apache/http/HttpVersion.html
-http://developer.android.com/reference/java/util/jar/JarEntry.html
-http://developer.android.com/reference/java/security/cert/LDAPCertStoreParameters.html
-http://developer.android.com/reference/android/support/v4/util/LongSparseArray.html
-http://developer.android.com/reference/java/util/jar/Manifest.html
-http://developer.android.com/reference/java/text/MessageFormat.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/OvalShape.html
-http://developer.android.com/reference/java/security/cert/PKIXBuilderParameters.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathBuilderResult.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathChecker.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathValidatorResult.html
-http://developer.android.com/reference/java/security/cert/PKIXParameters.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteTracker.html
-http://developer.android.com/reference/java/text/RuleBasedCollator.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html
-http://developer.android.com/reference/java/text/SimpleDateFormat.html
-http://developer.android.com/reference/android/net/sip/SipProfile.html
-http://developer.android.com/reference/java/text/StringCharacterIterator.html
-http://developer.android.com/reference/org/apache/http/entity/StringEntity.html
-http://developer.android.com/reference/java/sql/Time.html
-http://developer.android.com/reference/java/sql/Timestamp.html
-http://developer.android.com/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html
-http://developer.android.com/reference/android/webkit/WebBackForwardList.html
-http://developer.android.com/reference/android/webkit/WebHistoryItem.html
-http://developer.android.com/reference/java/security/cert/X509CRLSelector.html
-http://developer.android.com/reference/java/security/cert/X509CertSelector.html
-http://developer.android.com/reference/java/util/zip/ZipEntry.html
-http://developer.android.com/reference/junit/framework/TestResult.html
-http://developer.android.com/reference/junit/framework/Test.html
-http://developer.android.com/reference/java/nio/channels/ByteChannel.html
-http://developer.android.com/reference/java/nio/channels/Channel.html
-http://developer.android.com/reference/java/nio/channels/GatheringByteChannel.html
-http://developer.android.com/reference/java/nio/channels/InterruptibleChannel.html
-http://developer.android.com/reference/java/nio/channels/ScatteringByteChannel.html
-http://developer.android.com/reference/java/nio/channels/WritableByteChannel.html
-http://developer.android.com/reference/java/nio/channels/Channels.html
-http://developer.android.com/reference/java/nio/channels/FileChannel.MapMode.html
-http://developer.android.com/reference/java/nio/channels/FileLock.html
-http://developer.android.com/reference/java/nio/channels/Pipe.SinkChannel.html
-http://developer.android.com/reference/java/nio/channels/Pipe.SourceChannel.html
-http://developer.android.com/reference/java/nio/channels/SelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/SelectionKey.html
-http://developer.android.com/reference/java/nio/channels/AsynchronousCloseException.html
-http://developer.android.com/reference/java/nio/channels/ClosedByInterruptException.html
-http://developer.android.com/reference/java/nio/channels/ClosedChannelException.html
-http://developer.android.com/reference/java/nio/channels/FileLockInterruptionException.html
-http://developer.android.com/reference/java/nio/channels/IllegalSelectorException.html
-http://developer.android.com/reference/java/nio/channels/UnresolvedAddressException.html
-http://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException.html
-http://developer.android.com/reference/org/apache/http/cookie/ClientCookie.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecFactory.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie2.html
-http://developer.android.com/reference/org/apache/http/cookie/SM.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieIdentityComparator.html
-http://developer.android.com/reference/org/apache/http/cookie/CookiePathComparator.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecRegistry.html
-http://developer.android.com/reference/org/apache/http/cookie/MalformedCookieException.html
-http://developer.android.com/reference/java/util/zip/CheckedInputStream.html
-http://developer.android.com/reference/java/util/zip/DeflaterInputStream.html
-http://developer.android.com/reference/java/security/DigestInputStream.html
-http://developer.android.com/reference/java/util/zip/InflaterInputStream.html
-http://developer.android.com/reference/java/util/zip/GZIPInputStream.html
-http://developer.android.com/reference/java/util/jar/JarInputStream.html
-http://developer.android.com/reference/java/util/zip/ZipInputStream.html
-http://developer.android.com/reference/android/support/v4/util/SparseArrayCompat.html
-http://developer.android.com/reference/java/util/regex/PatternSyntaxException.html
-http://developer.android.com/reference/org/xmlpull/v1/sax2/Driver.html
-http://developer.android.com/reference/org/xml/sax/ext/Locator2Impl.html
-http://developer.android.com/reference/org/xml/sax/helpers/LocatorImpl.html
-http://developer.android.com/sdk/tools-notes.html
-http://developer.android.com/resources/samples/TicTacToeLib/AndroidManifest.html
-http://developer.android.com/resources/samples/TicTacToeMain/AndroidManifest.html
-http://developer.android.com/reference/android/text/method/CharacterPickerDialog.html
-http://developer.android.com/guide/topics/fundamentals/services.html
-http://developer.android.com/reference/org/apache/http/params/CoreConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/params/CoreProtocolPNames.html
-http://developer.android.com/reference/org/apache/http/params/AbstractHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/DefaultedHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/HttpAbstractParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpConnectionParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpConnectionParams.html
-http://developer.android.com/reference/org/apache/http/params/HttpProtocolParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpProtocolParams.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.Channel.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ActionListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.PeerListListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pConfig.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDevice.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ConnectionInfoListener.html
-http://developer.android.com/reference/java/lang/ref/WeakReference.html
-http://developer.android.com/reference/android/support/v13/app/FragmentStatePagerAdapter.html
-http://developer.android.com/reference/org/apache/http/entity/AbstractHttpEntity.html
-http://developer.android.com/reference/org/apache/http/NameValuePair.html
-http://developer.android.com/reference/org/apache/http/HttpEntity.html
-http://developer.android.com/reference/java/security/Principal.html
-http://developer.android.com/guide/practices/performance.html
-http://developer.android.com/guide/practices/seamlessness.html
-http://developer.android.com/tools/help/ddms.html
-http://developer.android.com/reference/org/xml/sax/helpers/ParserAdapter.html
-http://developer.android.com/reference/org/apache/http/StatusLine.html
-http://developer.android.com/reference/org/apache/http/ReasonPhraseCatalog.html
-http://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback.html
-http://developer.android.com/reference/android/hardware/Camera.AutoFocusMoveCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ErrorCallback.html
-http://developer.android.com/reference/android/hardware/Camera.FaceDetectionListener.html
-http://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener.html
-http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html
-http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
-http://developer.android.com/reference/android/hardware/Camera.html
-http://developer.android.com/reference/android/hardware/Camera.Area.html
-http://developer.android.com/reference/android/hardware/Camera.CameraInfo.html
-http://developer.android.com/reference/android/hardware/Camera.Face.html
-http://developer.android.com/reference/android/hardware/Camera.Parameters.html
-http://developer.android.com/reference/android/hardware/Camera.Size.html
-http://developer.android.com/reference/android/hardware/GeomagneticField.html
-http://developer.android.com/reference/org/apache/http/client/AuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/client/CredentialsProvider.html
-http://developer.android.com/reference/org/apache/http/client/HttpClient.html
-http://developer.android.com/reference/org/apache/http/client/HttpRequestRetryHandler.html
-http://developer.android.com/reference/org/apache/http/client/RedirectHandler.html
-http://developer.android.com/reference/org/apache/http/client/RequestDirector.html
-http://developer.android.com/reference/org/apache/http/client/ResponseHandler.html
-http://developer.android.com/reference/org/apache/http/client/UserTokenHandler.html
-http://developer.android.com/reference/org/apache/http/client/CircularRedirectException.html
-http://developer.android.com/reference/org/apache/http/client/ClientProtocolException.html
-http://developer.android.com/reference/org/apache/http/client/HttpResponseException.html
-http://developer.android.com/reference/org/apache/http/client/NonRepeatableRequestException.html
-http://developer.android.com/reference/org/apache/http/client/RedirectException.html
-http://developer.android.com/reference/java/sql/Date.html
-http://developer.android.com/reference/java/util/zip/Checksum.html
-http://developer.android.com/reference/java/util/zip/Adler32.html
-http://developer.android.com/reference/java/util/zip/CheckedOutputStream.html
-http://developer.android.com/reference/java/util/zip/CRC32.html
-http://developer.android.com/reference/java/util/zip/Deflater.html
-http://developer.android.com/reference/java/util/zip/DeflaterOutputStream.html
-http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
-http://developer.android.com/reference/java/util/zip/Inflater.html
-http://developer.android.com/reference/java/util/zip/InflaterOutputStream.html
-http://developer.android.com/reference/java/util/zip/ZipFile.html
-http://developer.android.com/reference/java/util/zip/ZipOutputStream.html
-http://developer.android.com/reference/java/util/zip/DataFormatException.html
-http://developer.android.com/reference/java/util/zip/ZipException.html
-http://developer.android.com/reference/java/util/zip/ZipError.html
-http://developer.android.com/reference/org/xml/sax/ext/Attributes2Impl.html
-http://developer.android.com/reference/org/xml/sax/ext/DefaultHandler2.html
-http://developer.android.com/reference/android/text/util/Linkify.MatchFilter.html
-http://developer.android.com/reference/android/text/util/Linkify.TransformFilter.html
-http://developer.android.com/reference/android/text/util/Rfc822Token.html
-http://developer.android.com/reference/android/text/util/Rfc822Tokenizer.html
-http://developer.android.com/reference/java/nio/Buffer.html
-http://developer.android.com/reference/java/nio/FloatBuffer.html
-http://developer.android.com/reference/java/nio/IntBuffer.html
-http://developer.android.com/reference/org/apache/http/util/CharArrayBuffer.html
-http://developer.android.com/reference/android/bluetooth/BluetoothProfile.html
-http://developer.android.com/reference/android/bluetooth/BluetoothProfile.ServiceListener.html
-http://developer.android.com/reference/android/bluetooth/BluetoothA2dp.html
-http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html
-http://developer.android.com/reference/android/bluetooth/BluetoothAssignedNumbers.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.Major.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Service.html
-http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealth.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealthAppConfiguration.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealthCallback.html
-http://developer.android.com/reference/android/bluetooth/BluetoothServerSocket.html
-http://developer.android.com/reference/android/bluetooth/BluetoothSocket.html
-http://developer.android.com/reference/java/security/cert/PolicyNode.html
-http://developer.android.com/reference/java/security/cert/X509Extension.html
-http://developer.android.com/reference/java/security/cert/Certificate.CertificateRep.html
-http://developer.android.com/reference/java/security/cert/CertificateFactory.html
-http://developer.android.com/reference/java/security/cert/CertificateFactorySpi.html
-http://developer.android.com/reference/java/security/cert/CertPath.html
-http://developer.android.com/reference/java/security/cert/CertPath.CertPathRep.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderSpi.html
-http://developer.android.com/reference/java/security/cert/CertPathValidator.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorSpi.html
-http://developer.android.com/reference/java/security/cert/CertStore.html
-http://developer.android.com/reference/java/security/cert/CertStoreSpi.html
-http://developer.android.com/reference/java/security/cert/CRL.html
-http://developer.android.com/reference/java/security/cert/PolicyQualifierInfo.html
-http://developer.android.com/reference/java/security/cert/TrustAnchor.html
-http://developer.android.com/reference/java/security/cert/X509Certificate.html
-http://developer.android.com/reference/java/security/cert/X509CRL.html
-http://developer.android.com/reference/java/security/cert/X509CRLEntry.html
-http://developer.android.com/reference/java/security/cert/CertificateEncodingException.html
-http://developer.android.com/reference/java/security/cert/CertificateException.html
-http://developer.android.com/reference/java/security/cert/CertificateExpiredException.html
-http://developer.android.com/reference/java/security/cert/CertificateNotYetValidException.html
-http://developer.android.com/reference/java/security/cert/CertificateParsingException.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderException.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorException.html
-http://developer.android.com/reference/java/security/cert/CertStoreException.html
-http://developer.android.com/reference/java/security/cert/CRLException.html
-http://developer.android.com/reference/java/security/KeyStore.html
-http://developer.android.com/reference/java/security/KeyStoreException.html
-http://developer.android.com/reference/java/security/InvalidParameterException.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectTimeoutException.html
-http://developer.android.com/reference/java/net/SocketTimeoutException.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionPoolTimeoutException.html
-http://developer.android.com/sdk/api_diff/15/changes.html
-http://developer.android.com/reference/android/text/style/SuggestionSpan.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.html
-http://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html
-http://developer.android.com/reference/java/text/Annotation.html
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.Attribute.html
-http://developer.android.com/reference/java/text/AttributedString.html
-http://developer.android.com/reference/java/text/Bidi.html
-http://developer.android.com/reference/java/text/CollationElementIterator.html
-http://developer.android.com/reference/java/text/CollationKey.html
-http://developer.android.com/reference/java/text/DateFormat.Field.html
-http://developer.android.com/reference/java/text/FieldPosition.html
-http://developer.android.com/reference/java/text/Format.Field.html
-http://developer.android.com/reference/java/text/MessageFormat.Field.html
-http://developer.android.com/reference/java/text/Normalizer.html
-http://developer.android.com/reference/java/text/NumberFormat.Field.html
-http://developer.android.com/reference/java/text/ParsePosition.html
-http://developer.android.com/reference/java/text/Normalizer.Form.html
-http://developer.android.com/reference/java/text/ParseException.html
-http://developer.android.com/reference/org/apache/http/FormattedHeader.html
-http://developer.android.com/reference/org/apache/http/HeaderElement.html
-http://developer.android.com/reference/org/apache/http/HeaderElementIterator.html
-http://developer.android.com/reference/org/apache/http/HttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/HttpConnection.html
-http://developer.android.com/reference/org/apache/http/HttpConnectionMetrics.html
-http://developer.android.com/reference/org/apache/http/HttpInetConnection.html
-http://developer.android.com/reference/org/apache/http/HttpRequestFactory.html
-http://developer.android.com/reference/org/apache/http/HttpResponseInterceptor.html
-http://developer.android.com/reference/org/apache/http/HttpStatus.html
-http://developer.android.com/reference/org/apache/http/TokenIterator.html
-http://developer.android.com/reference/org/apache/http/ConnectionClosedException.html
-http://developer.android.com/reference/org/apache/http/MalformedChunkCodingException.html
-http://developer.android.com/reference/org/apache/http/MethodNotSupportedException.html
-http://developer.android.com/reference/org/apache/http/NoHttpResponseException.html
-http://developer.android.com/reference/org/apache/http/ParseException.html
-http://developer.android.com/reference/org/apache/http/UnsupportedHttpVersionException.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodImpl.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.html
-http://developer.android.com/reference/android/service/dreams/DreamService.html
-http://developer.android.com/reference/android/speech/RecognitionService.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeechService.html
-http://developer.android.com/reference/android/net/VpnService.html
-http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html
-http://developer.android.com/reference/java/security/Certificate.html
-http://developer.android.com/reference/java/security/DomainCombiner.html
-http://developer.android.com/reference/java/security/KeyStore.Entry.html
-http://developer.android.com/reference/java/security/KeyStore.LoadStoreParameter.html
-http://developer.android.com/reference/java/security/KeyStore.ProtectionParameter.html
-http://developer.android.com/reference/java/security/Policy.Parameters.html
-http://developer.android.com/reference/java/security/PrivateKey.html
-http://developer.android.com/reference/java/security/PrivilegedExceptionAction.html
-http://developer.android.com/reference/java/security/PublicKey.html
-http://developer.android.com/reference/java/security/AccessControlContext.html
-http://developer.android.com/reference/java/security/AccessController.html
-http://developer.android.com/reference/java/security/AlgorithmParameterGenerator.html
-http://developer.android.com/reference/java/security/AlgorithmParameterGeneratorSpi.html
-http://developer.android.com/reference/java/security/AlgorithmParametersSpi.html
-http://developer.android.com/reference/java/security/AllPermission.html
-http://developer.android.com/reference/java/security/BasicPermission.html
-http://developer.android.com/reference/java/security/CodeSigner.html
-http://developer.android.com/reference/java/security/CodeSource.html
-http://developer.android.com/reference/java/security/DigestOutputStream.html
-http://developer.android.com/reference/java/security/GuardedObject.html
-http://developer.android.com/reference/java/security/Identity.html
-http://developer.android.com/reference/java/security/IdentityScope.html
-http://developer.android.com/reference/java/security/KeyFactory.html
-http://developer.android.com/reference/java/security/KeyFactorySpi.html
-http://developer.android.com/reference/java/security/KeyPair.html
-http://developer.android.com/reference/java/security/KeyPairGenerator.html
-http://developer.android.com/reference/java/security/KeyPairGeneratorSpi.html
-http://developer.android.com/reference/java/security/KeyRep.html
-http://developer.android.com/reference/java/security/KeyStore.Builder.html
-http://developer.android.com/reference/java/security/KeyStore.CallbackHandlerProtection.html
-http://developer.android.com/reference/java/security/KeyStore.PasswordProtection.html
-http://developer.android.com/reference/java/security/KeyStore.PrivateKeyEntry.html
-http://developer.android.com/reference/java/security/KeyStore.SecretKeyEntry.html
-http://developer.android.com/reference/java/security/KeyStore.TrustedCertificateEntry.html
-http://developer.android.com/reference/java/security/KeyStoreSpi.html
-http://developer.android.com/reference/java/security/MessageDigest.html
-http://developer.android.com/reference/java/security/MessageDigestSpi.html
-http://developer.android.com/reference/java/security/Permissions.html
-http://developer.android.com/reference/java/security/Policy.html
-http://developer.android.com/reference/java/security/PolicySpi.html
-http://developer.android.com/reference/java/security/ProtectionDomain.html
-http://developer.android.com/reference/java/security/Provider.Service.html
-http://developer.android.com/reference/java/security/SecureClassLoader.html
-http://developer.android.com/reference/java/security/SecureRandomSpi.html
-http://developer.android.com/reference/java/security/Security.html
-http://developer.android.com/reference/java/security/SecurityPermission.html
-http://developer.android.com/reference/java/security/Signature.html
-http://developer.android.com/reference/java/security/SignatureSpi.html
-http://developer.android.com/reference/java/security/SignedObject.html
-http://developer.android.com/reference/java/security/Signer.html
-http://developer.android.com/reference/java/security/Timestamp.html
-http://developer.android.com/reference/java/security/UnresolvedPermission.html
-http://developer.android.com/reference/java/security/KeyRep.Type.html
-http://developer.android.com/reference/java/security/AccessControlException.html
-http://developer.android.com/reference/java/security/DigestException.html
-http://developer.android.com/reference/java/security/KeyException.html
-http://developer.android.com/reference/java/security/KeyManagementException.html
-http://developer.android.com/reference/java/security/PrivilegedActionException.html
-http://developer.android.com/reference/java/security/ProviderException.html
-http://developer.android.com/reference/java/security/SignatureException.html
-http://developer.android.com/reference/java/security/UnrecoverableEntryException.html
-http://developer.android.com/reference/java/security/UnrecoverableKeyException.html
-http://developer.android.com/reference/java/util/concurrent/locks/Lock.html
-http://developer.android.com/guide/faq/troubleshooting.html
-http://developer.android.com/reference/java/nio/BufferOverflowException.html
-http://developer.android.com/reference/java/nio/BufferUnderflowException.html
-http://developer.android.com/reference/org/w3c/dom/DOMException.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSException.html
-http://developer.android.com/reference/java/lang/reflect/MalformedParameterizedTypeException.html
-http://developer.android.com/reference/android/renderscript/RSRuntimeException.html
-http://developer.android.com/reference/java/lang/reflect/UndeclaredThrowableException.html
-http://developer.android.com/reference/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.html
-http://developer.android.com/reference/java/nio/charset/IllegalCharsetNameException.html
-http://developer.android.com/reference/android/renderscript/RSDriverException.html
-http://developer.android.com/reference/android/renderscript/RSIllegalArgumentException.html
-http://developer.android.com/reference/android/renderscript/RSInvalidStateException.html
-http://developer.android.com/reference/java/nio/ReadOnlyBufferException.html
-http://developer.android.com/reference/java/nio/charset/UnsupportedCharsetException.html
-http://developer.android.com/reference/java/nio/charset/spi/CharsetProvider.html
-http://developer.android.com/reference/android/preference/PreferenceFragment.html
-http://developer.android.com/reference/android/webkit/WebViewFragment.html
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
-http://developer.android.com/reference/android/preference/PreferenceFragment.OnPreferenceStartFragmentCallback.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityDestroyListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityStopListener.html
-http://developer.android.com/reference/android/preference/CheckBoxPreference.html
-http://developer.android.com/reference/android/preference/DialogPreference.html
-http://developer.android.com/reference/android/preference/EditTextPreference.html
-http://developer.android.com/reference/android/preference/ListPreference.html
-http://developer.android.com/reference/android/preference/MultiSelectListPreference.html
-http://developer.android.com/reference/android/preference/Preference.BaseSavedState.html
-http://developer.android.com/reference/android/preference/PreferenceActivity.Header.html
-http://developer.android.com/reference/android/preference/PreferenceCategory.html
-http://developer.android.com/reference/android/preference/PreferenceGroup.html
-http://developer.android.com/reference/android/preference/PreferenceManager.html
-http://developer.android.com/reference/android/preference/PreferenceScreen.html
-http://developer.android.com/reference/android/preference/RingtonePreference.html
-http://developer.android.com/reference/android/preference/SwitchPreference.html
-http://developer.android.com/reference/android/preference/TwoStatePreference.html
-http://developer.android.com/reference/android/hardware/input/InputManager.InputDeviceListener.html
-http://developer.android.com/guide/samples/index.html
-http://developer.android.com/reference/com/google/android/gms/common/AccountPicker.html
-http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html
-http://developer.android.com/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
-http://developer.android.com/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
-http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthException.html
-http://developer.android.com/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
-http://developer.android.com/reference/org/apache/http/entity/ContentLengthStrategy.html
-http://developer.android.com/reference/org/apache/http/entity/ContentProducer.html
-http://developer.android.com/reference/org/apache/http/entity/BasicHttpEntity.html
-http://developer.android.com/reference/org/apache/http/entity/BufferedHttpEntity.html
-http://developer.android.com/reference/org/apache/http/entity/EntityTemplate.html
-http://developer.android.com/reference/org/apache/http/entity/HttpEntityWrapper.html
-http://developer.android.com/reference/org/apache/http/entity/InputStreamEntity.html
-http://developer.android.com/reference/org/apache/http/entity/SerializableEntity.html
-http://developer.android.com/resources/samples/USB/AdbTest/index.html
-http://developer.android.com/resources/samples/USB/MissileLauncher/index.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractClientConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPooledConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPoolEntry.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnectionOperator.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultHttpRoutePlanner.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultResponseParser.html
-http://developer.android.com/reference/org/apache/http/impl/conn/IdleConnectionHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/conn/ProxySelectorRoutePlanner.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.ConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.PoolEntry.html
-http://developer.android.com/reference/org/apache/http/impl/conn/Wire.html
-http://developer.android.com/reference/org/apache/http/conn/OperatedClientConnection.html
-http://developer.android.com/reference/org/apache/http/conn/ManagedClientConnection.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionOperator.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoutePlanner.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
-http://developer.android.com/resources/samples/TicTacToeMain/index.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html
-http://developer.android.com/reference/android/support/v4/view/KeyEventCompat.html
-http://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html
-http://developer.android.com/reference/android/support/v4/view/MotionEventCompat.html
-http://developer.android.com/reference/android/support/v4/view/VelocityTrackerCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewCompatJB.html
-http://developer.android.com/reference/android/support/v4/view/ViewCompatJellybeanMr1.html
-http://developer.android.com/reference/android/support/v4/view/ViewConfigurationCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.SavedState.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.SimpleOnPageChangeListener.html
-http://developer.android.com/reference/javax/xml/namespace/NamespaceContext.html
-http://developer.android.com/reference/javax/xml/transform/Source.html
-http://developer.android.com/reference/javax/xml/transform/Transformer.html
-http://developer.android.com/reference/javax/xml/transform/sax/TemplatesHandler.html
-http://developer.android.com/reference/javax/xml/transform/sax/TransformerHandler.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXResult.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXSource.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXTransformerFactory.html
-http://developer.android.com/reference/javax/xml/transform/TransformerFactory.html
-http://developer.android.com/reference/javax/xml/transform/Result.html
-http://developer.android.com/reference/javax/xml/transform/Templates.html
-http://developer.android.com/reference/android/text/method/ArrowKeyMovementMethod.html
-http://developer.android.com/reference/android/text/method/BaseKeyListener.html
-http://developer.android.com/reference/android/text/method/BaseMovementMethod.html
-http://developer.android.com/reference/android/text/method/DateKeyListener.html
-http://developer.android.com/reference/android/text/method/DateTimeKeyListener.html
-http://developer.android.com/reference/android/text/method/DialerKeyListener.html
-http://developer.android.com/reference/android/text/method/DigitsKeyListener.html
-http://developer.android.com/reference/android/text/method/HideReturnsTransformationMethod.html
-http://developer.android.com/reference/android/text/method/MultiTapKeyListener.html
-http://developer.android.com/reference/android/text/method/NumberKeyListener.html
-http://developer.android.com/reference/android/text/method/PasswordTransformationMethod.html
-http://developer.android.com/reference/android/text/method/QwertyKeyListener.html
-http://developer.android.com/reference/android/text/method/ReplacementTransformationMethod.html
-http://developer.android.com/reference/android/text/method/ScrollingMovementMethod.html
-http://developer.android.com/reference/android/text/method/SingleLineTransformationMethod.html
-http://developer.android.com/reference/android/text/method/TextKeyListener.html
-http://developer.android.com/reference/android/text/method/TimeKeyListener.html
-http://developer.android.com/reference/android/text/method/Touch.html
-http://developer.android.com/reference/android/text/method/TextKeyListener.Capitalize.html
-http://developer.android.com/reference/android/security/KeyChainAliasCallback.html
-http://developer.android.com/reference/android/security/KeyChain.html
-http://developer.android.com/reference/android/security/KeyChainException.html
-http://developer.android.com/reference/javax/net/ServerSocketFactory.html
-http://developer.android.com/reference/javax/net/SocketFactory.html
-http://developer.android.com/guide/topics/clipboard/copy-paste.html
-http://developer.android.com/reference/javax/sql/CommonDataSource.html
-http://developer.android.com/reference/javax/sql/ConnectionEventListener.html
-http://developer.android.com/reference/javax/sql/ConnectionPoolDataSource.html
-http://developer.android.com/reference/javax/sql/DataSource.html
-http://developer.android.com/reference/javax/sql/RowSetInternal.html
-http://developer.android.com/reference/javax/sql/RowSetListener.html
-http://developer.android.com/reference/javax/sql/RowSetMetaData.html
-http://developer.android.com/reference/javax/sql/RowSetReader.html
-http://developer.android.com/reference/javax/sql/RowSetWriter.html
-http://developer.android.com/reference/javax/sql/StatementEventListener.html
-http://developer.android.com/reference/java/sql/ResultSet.html
-http://developer.android.com/reference/java/sql/Array.html
-http://developer.android.com/reference/java/sql/Blob.html
-http://developer.android.com/reference/java/sql/Clob.html
-http://developer.android.com/reference/java/sql/NClob.html
-http://developer.android.com/reference/java/sql/Ref.html
-http://developer.android.com/reference/java/sql/RowId.html
-http://developer.android.com/reference/java/sql/SQLXML.html
-http://developer.android.com/reference/java/net/URL.html
-http://developer.android.com/reference/java/sql/ResultSetMetaData.html
-http://developer.android.com/reference/java/sql/Statement.html
-http://developer.android.com/reference/java/sql/SQLWarning.html
-http://developer.android.com/reference/java/sql/Wrapper.html
-http://developer.android.com/reference/java/sql/SQLException.html
-http://developer.android.com/reference/java/sql/Connection.html
-http://developer.android.com/reference/java/sql/SQLData.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html
-http://developer.android.com/resources/samples/get.html
-http://developer.android.com/reference/java/util/jar/Pack200.Packer.html
-http://developer.android.com/reference/java/util/jar/Pack200.Unpacker.html
-http://developer.android.com/reference/java/util/jar/Attributes.Name.html
-http://developer.android.com/reference/java/util/jar/JarFile.html
-http://developer.android.com/reference/java/util/jar/JarOutputStream.html
-http://developer.android.com/reference/java/util/jar/Pack200.html
-http://developer.android.com/reference/java/util/jar/JarException.html
-http://developer.android.com/reference/java/nio/charset/CoderResult.html
-http://developer.android.com/reference/java/nio/charset/CodingErrorAction.html
-http://developer.android.com/reference/java/nio/charset/CharacterCodingException.html
-http://developer.android.com/reference/java/nio/charset/MalformedInputException.html
-http://developer.android.com/reference/java/nio/charset/UnmappableCharacterException.html
-http://developer.android.com/reference/java/nio/charset/CoderMalfunctionError.html
-http://developer.android.com/reference/android/webkit/DownloadListener.html
-http://developer.android.com/reference/android/webkit/GeolocationPermissions.Callback.html
-http://developer.android.com/reference/android/webkit/PluginStub.html
-http://developer.android.com/reference/android/webkit/ValueCallback.html
-http://developer.android.com/reference/android/webkit/WebChromeClient.CustomViewCallback.html
-http://developer.android.com/reference/android/webkit/WebIconDatabase.IconListener.html
-http://developer.android.com/reference/android/webkit/WebStorage.QuotaUpdater.html
-http://developer.android.com/reference/android/webkit/WebView.FindListener.html
-http://developer.android.com/reference/android/webkit/WebView.PictureListener.html
-http://developer.android.com/reference/android/webkit/CookieManager.html
-http://developer.android.com/reference/android/webkit/CookieSyncManager.html
-http://developer.android.com/reference/android/webkit/DateSorter.html
-http://developer.android.com/reference/android/webkit/GeolocationPermissions.html
-http://developer.android.com/reference/android/webkit/HttpAuthHandler.html
-http://developer.android.com/reference/android/webkit/JsPromptResult.html
-http://developer.android.com/reference/android/webkit/JsResult.html
-http://developer.android.com/reference/android/webkit/MimeTypeMap.html
-http://developer.android.com/reference/android/webkit/SslErrorHandler.html
-http://developer.android.com/reference/android/webkit/URLUtil.html
-http://developer.android.com/reference/android/webkit/WebIconDatabase.html
-http://developer.android.com/reference/android/webkit/WebResourceResponse.html
-http://developer.android.com/reference/android/webkit/WebStorage.html
-http://developer.android.com/reference/android/webkit/WebStorage.Origin.html
-http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html
-http://developer.android.com/reference/android/webkit/WebView.WebViewTransport.html
-http://developer.android.com/reference/android/webkit/WebViewDatabase.html
-http://developer.android.com/reference/android/webkit/WebSettings.LayoutAlgorithm.html
-http://developer.android.com/reference/android/webkit/WebSettings.PluginState.html
-http://developer.android.com/reference/android/webkit/WebSettings.RenderPriority.html
-http://developer.android.com/reference/android/webkit/WebSettings.TextSize.html
-http://developer.android.com/reference/android/webkit/WebSettings.ZoomDensity.html
-http://developer.android.com/reference/android/net/http/SslError.html
-http://developer.android.com/reference/javax/xml/transform/ErrorListener.html
-http://developer.android.com/reference/javax/xml/transform/SourceLocator.html
-http://developer.android.com/reference/javax/xml/transform/URIResolver.html
-http://developer.android.com/reference/javax/xml/transform/OutputKeys.html
-http://developer.android.com/reference/javax/xml/transform/TransformerConfigurationException.html
-http://developer.android.com/reference/javax/xml/transform/TransformerException.html
-http://developer.android.com/reference/javax/xml/transform/TransformerFactoryConfigurationError.html
-http://developer.android.com/reference/javax/xml/parsers/DocumentBuilder.html
-http://developer.android.com/reference/android/inputmethodservice/KeyboardView.OnKeyboardActionListener.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodSessionImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodSessionImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.Insets.html
-http://developer.android.com/reference/android/inputmethodservice/Keyboard.Key.html
-http://developer.android.com/reference/android/inputmethodservice/Keyboard.Row.html
-http://developer.android.com/sdk/api_diff/14/changes.html
-http://developer.android.com/resources/samples/SampleSyncAdapter/res/xml-v14/contacts.html
-http://developer.android.com/resources/samples/VoicemailProviderDemo/index.html
-http://developer.android.com/reference/android/media/effect/Effect.html
-http://developer.android.com/reference/android/media/effect/EffectContext.html
-http://developer.android.com/reference/android/media/effect/EffectFactory.html
-http://developer.android.com/resources/samples/RandomMusicPlayer/index.html
-http://developer.android.com/reference/android/nfc/NdefMessage.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.CreateNdefMessageCallback.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.OnNdefPushCompleteCallback.html
-http://developer.android.com/reference/android/nfc/NdefRecord.html
-http://developer.android.com/resources/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDeviceList.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.GroupInfoListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pGroup.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pInfo.html
-http://developer.android.com/resources/samples/WiFiDirectDemo/index.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityManager.AccessibilityStateChangeListener.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.EngineInfo.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.Engine.html
-http://developer.android.com/reference/android/speech/tts/SynthesisRequest.html
-http://developer.android.com/reference/android/speech/tts/SynthesisCallback.html
-http://developer.android.com/resources/samples/TtsEngine/index.html
-http://developer.android.com/reference/android/renderscript/Script.html
-http://developer.android.com/reference/android/renderscript/FieldPacker.html
-http://developer.android.com/reference/android/net/VpnService.Builder.html
-http://developer.android.com/reference/android/app/admin/DeviceAdminInfo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/index.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/switches.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Hover.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
-http://developer.android.com/guide/practices/jni.html
-http://developer.android.com/reference/org/xml/sax/helpers/AttributesImpl.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserException.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ValueSanitizer.html
-http://developer.android.com/reference/android/net/Credentials.html
-http://developer.android.com/reference/android/net/LocalServerSocket.html
-http://developer.android.com/reference/android/net/LocalSocket.html
-http://developer.android.com/reference/android/net/LocalSocketAddress.html
-http://developer.android.com/reference/android/net/MailTo.html
-http://developer.android.com/reference/android/net/Proxy.html
-http://developer.android.com/reference/android/net/SSLCertificateSocketFactory.html
-http://developer.android.com/reference/android/net/SSLSessionCache.html
-http://developer.android.com/reference/android/net/TrafficStats.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.IllegalCharacterValueSanitizer.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ParameterValuePair.html
-http://developer.android.com/reference/android/net/LocalSocketAddress.Namespace.html
-http://developer.android.com/reference/android/net/NetworkInfo.DetailedState.html
-http://developer.android.com/reference/android/net/NetworkInfo.State.html
-http://developer.android.com/reference/android/net/ParseException.html
-http://developer.android.com/reference/com/google/android/gms/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/auth/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/common/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/panorama/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/plus/package-summary.html
-http://developer.android.com/guide/topics/wireless/bluetooth.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.OnControlStatusChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.OnEnableStatusChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Visualizer.OnDataCaptureListener.html
-http://developer.android.com/reference/android/media/audiofx/AcousticEchoCanceler.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.Descriptor.html
-http://developer.android.com/reference/android/media/audiofx/AutomaticGainControl.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.Settings.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.Settings.html
-http://developer.android.com/reference/android/media/audiofx/NoiseSuppressor.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Visualizer.html
-http://developer.android.com/reference/java/net/InetAddress.html
-http://developer.android.com/reference/org/apache/http/io/SessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/io/HttpTransportMetrics.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManager.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManagerFactory.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionKeepAliveStrategy.html
-http://developer.android.com/reference/org/apache/http/conn/EofSensorWatcher.html
-http://developer.android.com/reference/org/apache/http/conn/BasicEofSensorWatcher.html
-http://developer.android.com/reference/org/apache/http/conn/BasicManagedEntity.html
-http://developer.android.com/reference/org/apache/http/conn/EofSensorInputStream.html
-http://developer.android.com/reference/org/apache/http/conn/MultihomePlainSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/HttpHostConnectException.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLES20Activity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CompressedTextureActivity.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10Ext.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11ExtensionPack.html
-http://developer.android.com/resources/dashboard/opengl.html
-http://developer.android.com/reference/java/util/logging/Filter.html
-http://developer.android.com/reference/java/util/logging/LoggingMXBean.html
-http://developer.android.com/reference/java/util/logging/ConsoleHandler.html
-http://developer.android.com/reference/java/util/logging/ErrorManager.html
-http://developer.android.com/reference/java/util/logging/FileHandler.html
-http://developer.android.com/reference/java/util/logging/Formatter.html
-http://developer.android.com/reference/java/util/logging/Handler.html
-http://developer.android.com/reference/java/util/logging/Level.html
-http://developer.android.com/reference/java/util/logging/Logger.html
-http://developer.android.com/reference/java/util/logging/LoggingPermission.html
-http://developer.android.com/reference/java/util/logging/LogManager.html
-http://developer.android.com/reference/java/util/logging/LogRecord.html
-http://developer.android.com/reference/java/util/logging/MemoryHandler.html
-http://developer.android.com/reference/java/util/logging/SimpleFormatter.html
-http://developer.android.com/reference/java/util/logging/SocketHandler.html
-http://developer.android.com/reference/java/util/logging/StreamHandler.html
-http://developer.android.com/reference/java/util/logging/XMLFormatter.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest.html
-http://developer.android.com/reference/android/renderscript/AllocationAdapter.html
-http://developer.android.com/reference/android/renderscript/BaseObj.html
-http://developer.android.com/reference/android/renderscript/Byte2.html
-http://developer.android.com/reference/android/renderscript/Byte3.html
-http://developer.android.com/reference/android/renderscript/Byte4.html
-http://developer.android.com/reference/android/renderscript/Double2.html
-http://developer.android.com/reference/android/renderscript/Double3.html
-http://developer.android.com/reference/android/renderscript/Double4.html
-http://developer.android.com/reference/android/renderscript/Element.Builder.html
-http://developer.android.com/reference/android/renderscript/FileA3D.html
-http://developer.android.com/reference/android/renderscript/FileA3D.IndexEntry.html
-http://developer.android.com/reference/android/renderscript/Float2.html
-http://developer.android.com/reference/android/renderscript/Float3.html
-http://developer.android.com/reference/android/renderscript/Float4.html
-http://developer.android.com/reference/android/renderscript/Font.html
-http://developer.android.com/reference/android/renderscript/Int2.html
-http://developer.android.com/reference/android/renderscript/Int3.html
-http://developer.android.com/reference/android/renderscript/Int4.html
-http://developer.android.com/reference/android/renderscript/Long2.html
-http://developer.android.com/reference/android/renderscript/Long3.html
-http://developer.android.com/reference/android/renderscript/Long4.html
-http://developer.android.com/reference/android/renderscript/Matrix2f.html
-http://developer.android.com/reference/android/renderscript/Matrix3f.html
-http://developer.android.com/reference/android/renderscript/Matrix4f.html
-http://developer.android.com/reference/android/renderscript/Mesh.html
-http://developer.android.com/reference/android/renderscript/Mesh.AllocationBuilder.html
-http://developer.android.com/reference/android/renderscript/Mesh.Builder.html
-http://developer.android.com/reference/android/renderscript/Mesh.TriangleMeshBuilder.html
-http://developer.android.com/reference/android/renderscript/Program.html
-http://developer.android.com/reference/android/renderscript/Program.BaseProgramBuilder.html
-http://developer.android.com/reference/android/renderscript/ProgramFragment.html
-http://developer.android.com/reference/android/renderscript/ProgramFragment.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramRaster.html
-http://developer.android.com/reference/android/renderscript/ProgramRaster.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramVertex.html
-http://developer.android.com/reference/android/renderscript/ProgramVertex.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramVertexFixedFunction.html
-http://developer.android.com/reference/android/renderscript/ProgramVertexFixedFunction.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramVertexFixedFunction.Constants.html
-http://developer.android.com/reference/android/renderscript/RenderScript.html
-http://developer.android.com/reference/android/renderscript/RenderScript.RSErrorHandler.html
-http://developer.android.com/reference/android/renderscript/RenderScript.RSMessageHandler.html
-http://developer.android.com/reference/android/renderscript/RenderScriptGL.html
-http://developer.android.com/reference/android/renderscript/RenderScriptGL.SurfaceConfig.html
-http://developer.android.com/reference/android/renderscript/Sampler.html
-http://developer.android.com/reference/android/renderscript/Sampler.Builder.html
-http://developer.android.com/reference/android/renderscript/Script.Builder.html
-http://developer.android.com/reference/android/renderscript/Script.FieldID.html
-http://developer.android.com/reference/android/renderscript/Script.KernelID.html
-http://developer.android.com/reference/android/renderscript/ScriptGroup.html
-http://developer.android.com/reference/android/renderscript/ScriptGroup.Builder.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsic.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlend.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlur.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicColorMatrix.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicConvolve3x3.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicConvolve5x5.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicLUT.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicYuvToRGB.html
-http://developer.android.com/reference/android/renderscript/Short2.html
-http://developer.android.com/reference/android/renderscript/Short3.html
-http://developer.android.com/reference/android/renderscript/Short4.html
-http://developer.android.com/reference/android/renderscript/Type.Builder.html
-http://developer.android.com/reference/android/renderscript/Allocation.MipmapControl.html
-http://developer.android.com/reference/android/renderscript/Element.DataKind.html
-http://developer.android.com/reference/android/renderscript/Element.DataType.html
-http://developer.android.com/reference/android/renderscript/FileA3D.EntryType.html
-http://developer.android.com/reference/android/renderscript/Font.Style.html
-http://developer.android.com/reference/android/renderscript/Mesh.Primitive.html
-http://developer.android.com/reference/android/renderscript/Program.TextureType.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.EnvMode.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.Format.html
-http://developer.android.com/reference/android/renderscript/ProgramRaster.CullMode.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.BlendDstFunc.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.BlendSrcFunc.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.DepthFunc.html
-http://developer.android.com/reference/android/renderscript/RenderScript.Priority.html
-http://developer.android.com/reference/android/renderscript/Sampler.Value.html
-http://developer.android.com/reference/android/renderscript/Type.CubemapFace.html
-http://developer.android.com/reference/java/net/ContentHandlerFactory.html
-http://developer.android.com/reference/java/net/CookiePolicy.html
-http://developer.android.com/reference/java/net/CookieStore.html
-http://developer.android.com/reference/java/net/DatagramSocketImplFactory.html
-http://developer.android.com/reference/java/net/FileNameMap.html
-http://developer.android.com/reference/java/net/SocketImplFactory.html
-http://developer.android.com/reference/java/net/SocketOptions.html
-http://developer.android.com/reference/java/net/URLStreamHandlerFactory.html
-http://developer.android.com/reference/java/net/Authenticator.html
-http://developer.android.com/reference/java/net/CacheRequest.html
-http://developer.android.com/reference/java/net/CacheResponse.html
-http://developer.android.com/reference/java/net/ContentHandler.html
-http://developer.android.com/reference/java/net/CookieHandler.html
-http://developer.android.com/reference/java/net/CookieManager.html
-http://developer.android.com/reference/java/net/DatagramPacket.html
-http://developer.android.com/reference/java/net/DatagramSocketImpl.html
-http://developer.android.com/reference/java/net/HttpURLConnection.html
-http://developer.android.com/reference/java/net/IDN.html
-http://developer.android.com/reference/java/net/Inet4Address.html
-http://developer.android.com/reference/java/net/Inet6Address.html
-http://developer.android.com/reference/java/net/InetSocketAddress.html
-http://developer.android.com/reference/java/net/InterfaceAddress.html
-http://developer.android.com/reference/java/net/JarURLConnection.html
-http://developer.android.com/reference/java/net/MulticastSocket.html
-http://developer.android.com/reference/java/net/NetPermission.html
-http://developer.android.com/reference/java/net/NetworkInterface.html
-http://developer.android.com/reference/java/net/PasswordAuthentication.html
-http://developer.android.com/reference/java/net/Proxy.html
-http://developer.android.com/reference/java/net/ProxySelector.html
-http://developer.android.com/reference/java/net/ResponseCache.html
-http://developer.android.com/reference/java/net/SecureCacheResponse.html
-http://developer.android.com/reference/java/net/ServerSocket.html
-http://developer.android.com/reference/java/net/SocketAddress.html
-http://developer.android.com/reference/java/net/SocketImpl.html
-http://developer.android.com/reference/java/net/SocketPermission.html
-http://developer.android.com/reference/java/net/URLClassLoader.html
-http://developer.android.com/reference/java/net/URLConnection.html
-http://developer.android.com/reference/java/net/URLDecoder.html
-http://developer.android.com/reference/java/net/URLEncoder.html
-http://developer.android.com/reference/java/net/URLStreamHandler.html
-http://developer.android.com/reference/java/net/Authenticator.RequestorType.html
-http://developer.android.com/reference/java/net/Proxy.Type.html
-http://developer.android.com/reference/java/net/BindException.html
-http://developer.android.com/reference/java/net/ConnectException.html
-http://developer.android.com/reference/java/net/HttpRetryException.html
-http://developer.android.com/reference/java/net/MalformedURLException.html
-http://developer.android.com/reference/java/net/NoRouteToHostException.html
-http://developer.android.com/reference/java/net/PortUnreachableException.html
-http://developer.android.com/reference/java/net/ProtocolException.html
-http://developer.android.com/reference/java/net/SocketException.html
-http://developer.android.com/reference/java/net/UnknownHostException.html
-http://developer.android.com/reference/java/net/UnknownServiceException.html
-http://developer.android.com/reference/java/net/URISyntaxException.html
-http://developer.android.com/reference/android/text/style/CharacterStyle.html
-http://developer.android.com/reference/android/text/style/ParagraphStyle.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
-http://developer.android.com/reference/org/w3c/dom/ls/DOMImplementationLS.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSInput.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSOutput.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSParser.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSParserFilter.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSResourceResolver.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSSerializer.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicResponseHandler.html
-http://developer.android.com/google/play/billing/QueryPurchases
-http://developer.android.com/google/play/billing/Consume
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/accessibility/ClockBackService.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/accessibility/TaskBackService.html
-http://developer.android.com/guide/topics/testing/index.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/LargeTest.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGestureListener.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturePerformedListener.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturingListener.html
-http://developer.android.com/reference/android/gesture/Gesture.html
-http://developer.android.com/reference/android/gesture/GestureLibraries.html
-http://developer.android.com/reference/android/gesture/GestureLibrary.html
-http://developer.android.com/reference/android/gesture/GesturePoint.html
-http://developer.android.com/reference/android/gesture/GestureStore.html
-http://developer.android.com/reference/android/gesture/GestureStroke.html
-http://developer.android.com/reference/android/gesture/GestureUtils.html
-http://developer.android.com/reference/android/gesture/OrientedBoundingBox.html
-http://developer.android.com/reference/android/gesture/Prediction.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLFilterImpl.html
-http://developer.android.com/reference/android/text/style/AbsoluteSizeSpan.html
-http://developer.android.com/reference/android/text/style/AlignmentSpan.Standard.html
-http://developer.android.com/reference/android/text/style/BackgroundColorSpan.html
-http://developer.android.com/reference/android/text/style/BulletSpan.html
-http://developer.android.com/reference/android/text/style/EasyEditSpan.html
-http://developer.android.com/reference/android/text/style/ForegroundColorSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.Standard.html
-http://developer.android.com/reference/android/text/style/LocaleSpan.html
-http://developer.android.com/reference/android/text/style/QuoteSpan.html
-http://developer.android.com/reference/android/text/style/RelativeSizeSpan.html
-http://developer.android.com/reference/android/text/style/ScaleXSpan.html
-http://developer.android.com/reference/android/text/style/StrikethroughSpan.html
-http://developer.android.com/reference/android/text/style/StyleSpan.html
-http://developer.android.com/reference/android/text/style/SubscriptSpan.html
-http://developer.android.com/reference/android/text/style/SuperscriptSpan.html
-http://developer.android.com/reference/android/text/style/TextAppearanceSpan.html
-http://developer.android.com/reference/android/text/style/TypefaceSpan.html
-http://developer.android.com/reference/android/text/style/UnderlineSpan.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngine.html
-http://developer.android.com/reference/org/apache/http/impl/auth/AuthSchemeBase.html
-http://developer.android.com/reference/org/apache/http/impl/auth/BasicScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/BasicSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/impl/auth/DigestScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/DigestSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/RFC2617Scheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngineException.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ChannelListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdServiceResponseListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdTxtRecordListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ServiceResponseListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.UpnpServiceResponseListener.html
-http://developer.android.com/reference/java/lang/reflect/AnnotatedElement.html
-http://developer.android.com/reference/java/lang/reflect/GenericArrayType.html
-http://developer.android.com/reference/java/lang/reflect/GenericDeclaration.html
-http://developer.android.com/reference/java/lang/reflect/InvocationHandler.html
-http://developer.android.com/reference/java/lang/reflect/Member.html
-http://developer.android.com/reference/java/lang/reflect/ParameterizedType.html
-http://developer.android.com/reference/java/lang/reflect/Type.html
-http://developer.android.com/reference/java/lang/reflect/TypeVariable.html
-http://developer.android.com/reference/java/lang/reflect/WildcardType.html
-http://developer.android.com/reference/java/lang/reflect/AccessibleObject.html
-http://developer.android.com/reference/java/lang/reflect/Array.html
-http://developer.android.com/reference/java/lang/reflect/Constructor.html
-http://developer.android.com/reference/java/lang/reflect/Field.html
-http://developer.android.com/reference/java/lang/reflect/Method.html
-http://developer.android.com/reference/java/lang/reflect/Modifier.html
-http://developer.android.com/reference/java/lang/reflect/Proxy.html
-http://developer.android.com/reference/java/lang/reflect/ReflectPermission.html
-http://developer.android.com/reference/java/lang/reflect/InvocationTargetException.html
-http://developer.android.com/reference/java/lang/reflect/GenericSignatureFormatError.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultRequestDirector.html
-http://developer.android.com/resources/samples/SoftKeyboard/index.html
-http://developer.android.com/guide/practices/security.html
-http://developer.android.com/reference/javax/crypto/spec/DESedeKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DESKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHPrivateKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHPublicKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/PBEKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/PSource.html
-http://developer.android.com/reference/javax/crypto/spec/PSource.PSpecified.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageParser.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageWriter.html
-http://developer.android.com/reference/org/apache/http/io/SessionOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/SocketInputBuffer.html
-http://developer.android.com/reference/java/sql/SQLPermission.html
-http://developer.android.com/reference/javax/net/ssl/SSLPermission.html
-http://developer.android.com/reference/java/lang/annotation/Retention.html
-http://developer.android.com/reference/android/text/style/AlignmentSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.LeadingMarginSpan2.html
-http://developer.android.com/reference/android/text/style/LineBackgroundSpan.html
-http://developer.android.com/reference/android/text/style/LineHeightSpan.html
-http://developer.android.com/reference/android/text/style/LineHeightSpan.WithDensity.html
-http://developer.android.com/reference/android/text/style/TabStopSpan.html
-http://developer.android.com/reference/android/text/style/UpdateAppearance.html
-http://developer.android.com/reference/android/text/style/UpdateLayout.html
-http://developer.android.com/reference/android/text/style/WrapTogetherSpan.html
-http://developer.android.com/reference/android/text/style/ClickableSpan.html
-http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
-http://developer.android.com/reference/android/text/style/DynamicDrawableSpan.html
-http://developer.android.com/reference/android/text/style/IconMarginSpan.html
-http://developer.android.com/reference/android/text/style/ImageSpan.html
-http://developer.android.com/reference/android/text/style/MaskFilterSpan.html
-http://developer.android.com/reference/android/text/style/MetricAffectingSpan.html
-http://developer.android.com/reference/android/text/style/RasterizerSpan.html
-http://developer.android.com/reference/android/text/style/ReplacementSpan.html
-http://developer.android.com/reference/android/text/style/TabStopSpan.Standard.html
-http://developer.android.com/reference/android/speech/RecognitionListener.html
-http://developer.android.com/reference/android/speech/RecognitionService.Callback.html
-http://developer.android.com/reference/android/speech/RecognizerIntent.html
-http://developer.android.com/reference/android/speech/RecognizerResultsIntent.html
-http://developer.android.com/reference/android/speech/SpeechRecognizer.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
-http://developer.android.com/reference/com/google/android/gcm/package-summary.html
-http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
-http://developer.android.com/reference/javax/net/ssl/SSLSocket.html
-http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html
-http://developer.android.com/reference/javax/net/ssl/SSLException.html
-http://developer.android.com/reference/dalvik/bytecode/Opcodes.html
-http://developer.android.com/reference/dalvik/bytecode/OpcodeInfo.html
-http://developer.android.com/videos/index.html
-http://developer.android.com/reference/java/nio/ByteOrder.html
-http://developer.android.com/reference/java/nio/DoubleBuffer.html
-http://developer.android.com/reference/java/nio/LongBuffer.html
-http://developer.android.com/reference/java/nio/MappedByteBuffer.html
-http://developer.android.com/reference/java/nio/ShortBuffer.html
-http://developer.android.com/reference/com/google/android/gms/R.html
-http://developer.android.com/reference/com/google/android/gms/R.attr.html
-http://developer.android.com/reference/com/google/android/gms/R.id.html
-http://developer.android.com/reference/com/google/android/gms/R.string.html
-http://developer.android.com/reference/com/google/android/gms/R.styleable.html
-http://developer.android.com/reference/javax/security/auth/callback/CallbackHandler.html
-http://developer.android.com/reference/javax/security/auth/x500/X500Principal.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMLocator.html
-http://developer.android.com/reference/java/beans/PropertyChangeListenerProxy.html
-http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html
-http://developer.android.com/shareables/training/BitmapFun.zip
-http://developer.android.com/sdk/api_diff/13/changes.html
-http://developer.android.com/reference/org/apache/http/impl/client/ClientParamsStack.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarMechanics.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html
-http://developer.android.com/resources/samples/RenderScript/index.html
-http://developer.android.com/reference/org/apache/http/impl/client/AbstractAuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/AbstractHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicCookieStore.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicCredentialsProvider.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultRedirectHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultUserTokenHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/RedirectLocations.html
-http://developer.android.com/reference/org/apache/http/impl/client/RoutedRequest.html
-http://developer.android.com/reference/org/apache/http/impl/client/TunnelRefusedException.html
-http://developer.android.com/shareables/training/ActivityLifecycle.zip
-http://developer.android.com/reference/java/util/concurrent/locks/Condition.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReadWriteLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractOwnableSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.ConditionObject.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.ConditionObject.html
-http://developer.android.com/reference/java/util/concurrent/locks/LockSupport.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html
-http://developer.android.com/reference/junit/framework/Protectable.html
-http://developer.android.com/reference/junit/framework/TestListener.html
-http://developer.android.com/reference/junit/framework/TestFailure.html
-http://developer.android.com/reference/junit/framework/AssertionFailedError.html
-http://developer.android.com/reference/junit/framework/ComparisonFailure.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.CreateBeamUrisCallback.html
-http://developer.android.com/reference/android/nfc/NfcEvent.html
-http://developer.android.com/reference/android/nfc/Tag.html
-http://developer.android.com/reference/android/nfc/FormatException.html
-http://developer.android.com/reference/android/nfc/TagLostException.html
-http://developer.android.com/guide/topics/nfc/index.html
-http://developer.android.com/reference/android/net/http/AndroidHttpClient.html
-http://developer.android.com/reference/android/net/http/HttpResponseCache.html
-http://developer.android.com/reference/android/net/http/SslCertificate.html
-http://developer.android.com/reference/android/net/http/SslCertificate.DName.html
-http://developer.android.com/reference/android/net/http/X509TrustManagerExtensions.html
-http://developer.android.com/reference/android/support/v13/app/FragmentPagerAdapter.html
-http://developer.android.com/reference/java/lang/ref/PhantomReference.html
-http://developer.android.com/reference/java/lang/ref/Reference.html
-http://developer.android.com/reference/java/lang/ref/SoftReference.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntry.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRouteDirector.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.html
-http://developer.android.com/reference/org/apache/http/conn/routing/BasicRouteDirector.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.LayerType.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.TunnelType.html
-http://developer.android.com/reference/javax/xml/validation/ValidatorHandler.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderAdapter.html
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedListener.html
-http://developer.android.com/reference/javax/net/ssl/KeyManager.html
-http://developer.android.com/reference/javax/net/ssl/ManagerFactoryParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingListener.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionContext.html
-http://developer.android.com/reference/javax/net/ssl/TrustManager.html
-http://developer.android.com/reference/javax/net/ssl/X509KeyManager.html
-http://developer.android.com/reference/javax/net/ssl/X509TrustManager.html
-http://developer.android.com/reference/javax/net/ssl/CertPathTrustManagerParameters.html
-http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
-http://developer.android.com/reference/javax/net/ssl/KeyManagerFactory.html
-http://developer.android.com/reference/javax/net/ssl/KeyManagerFactorySpi.html
-http://developer.android.com/reference/javax/net/ssl/KeyStoreBuilderParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLContext.html
-http://developer.android.com/reference/javax/net/ssl/SSLContextSpi.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngine.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.html
-http://developer.android.com/reference/javax/net/ssl/SSLParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLServerSocket.html
-http://developer.android.com/reference/javax/net/ssl/SSLServerSocketFactory.html
-http://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html
-http://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html
-http://developer.android.com/reference/javax/net/ssl/TrustManagerFactorySpi.html
-http://developer.android.com/reference/javax/net/ssl/X509ExtendedKeyManager.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.HandshakeStatus.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.Status.html
-http://developer.android.com/reference/javax/net/ssl/SSLHandshakeException.html
-http://developer.android.com/reference/javax/net/ssl/SSLKeyException.html
-http://developer.android.com/reference/javax/net/ssl/SSLPeerUnverifiedException.html
-http://developer.android.com/reference/javax/net/ssl/SSLProtocolException.html
-http://developer.android.com/reference/javax/security/cert/X509Certificate.html
-http://developer.android.com/reference/android/text/format/DateFormat.html
-http://developer.android.com/reference/android/text/format/DateUtils.html
-http://developer.android.com/reference/android/text/format/Formatter.html
-http://developer.android.com/reference/android/text/format/Time.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DraggableDot.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueWorker.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL10.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL11.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLConfig.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLContext.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLDisplay.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLSurface.html
-http://developer.android.com/guide/developing/tools/draw9patch.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/PoolEntryRequest.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/AbstractConnPool.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RouteSpecificPool.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThread.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.html
-http://developer.android.com/reference/android/support/v4/net/TrafficStatsCompat.html
-http://developer.android.com/reference/android/support/v4/net/TrafficStatsCompatIcs.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpRequestFactory.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/impl/EnglishReasonPhraseCatalog.html
-http://developer.android.com/reference/org/apache/http/impl/HttpConnectionMetricsImpl.html
-http://developer.android.com/reference/org/apache/http/impl/NoConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/util/ByteArrayBuffer.html
-http://developer.android.com/reference/org/apache/http/util/EncodingUtils.html
-http://developer.android.com/reference/org/apache/http/util/EntityUtils.html
-http://developer.android.com/reference/org/apache/http/util/ExceptionUtils.html
-http://developer.android.com/reference/org/apache/http/util/LangUtils.html
-http://developer.android.com/reference/org/apache/http/util/VersionInfo.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL.html
-http://developer.android.com/reference/android/location/GpsStatus.Listener.html
-http://developer.android.com/reference/android/location/GpsStatus.NmeaListener.html
-http://developer.android.com/reference/android/location/LocationListener.html
-http://developer.android.com/reference/android/location/Address.html
-http://developer.android.com/reference/android/location/Criteria.html
-http://developer.android.com/reference/android/location/Geocoder.html
-http://developer.android.com/reference/android/location/GpsSatellite.html
-http://developer.android.com/reference/android/location/GpsStatus.html
-http://developer.android.com/reference/android/location/Location.html
-http://developer.android.com/reference/junit/runner/BaseTestRunner.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnInitListener.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnUtteranceCompletedListener.html
-http://developer.android.com/reference/android/view/ViewDebug.CapturedViewProperty.html
-http://developer.android.com/reference/android/view/ViewDebug.ExportedProperty.html
-http://developer.android.com/reference/android/view/ViewDebug.FlagToString.html
-http://developer.android.com/reference/android/view/ViewDebug.IntToString.html
-http://developer.android.com/reference/android/support/v4/content/Loader.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/support/v4/content/AsyncTaskLoader.html
-http://developer.android.com/reference/android/support/v4/content/ContextCompat.html
-http://developer.android.com/reference/android/support/v4/content/Loader.ForceLoadContentObserver.html
-http://developer.android.com/reference/java/lang/Deprecated.html
-http://developer.android.com/reference/java/lang/annotation/Documented.html
-http://developer.android.com/reference/android/test/FlakyTest.html
-http://developer.android.com/reference/java/lang/annotation/Inherited.html
-http://developer.android.com/reference/android/webkit/JavascriptInterface.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/MediumTest.html
-http://developer.android.com/reference/java/lang/Override.html
-http://developer.android.com/reference/android/widget/RemoteViews.RemoteView.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/SmallTest.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Smoke.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Suppress.html
-http://developer.android.com/reference/android/annotation/SuppressLint.html
-http://developer.android.com/reference/java/lang/SuppressWarnings.html
-http://developer.android.com/reference/java/lang/annotation/Target.html
-http://developer.android.com/reference/android/annotation/TargetApi.html
-http://developer.android.com/reference/dalvik/annotation/TestTarget.html
-http://developer.android.com/reference/dalvik/annotation/TestTargetClass.html
-http://developer.android.com/reference/android/test/UiThreadTest.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpTransportMetricsImpl.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html
-http://developer.android.com/guide/developing/tools/adt.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMResult.html
-http://developer.android.com/reference/javax/xml/transform/stream/StreamResult.html
-http://developer.android.com/reference/org/xml/sax/helpers/AttributeListImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/NamespaceSupport.html
-http://developer.android.com/reference/org/xml/sax/helpers/ParserFactory.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderFactory.html
-http://developer.android.com/reference/javax/xml/parsers/SAXParserFactory.html
-http://developer.android.com/reference/javax/security/auth/login/LoginException.html
-http://developer.android.com/reference/junit/runner/TestSuiteLoader.html
-http://developer.android.com/reference/junit/runner/Version.html
-http://developer.android.com/reference/java/awt/font/NumericShaper.html
-http://developer.android.com/reference/java/awt/font/TextAttribute.html
-http://developer.android.com/about/versions/android-1.5.html
-http://developer.android.com/about/versions/android-1.6.html
-http://developer.android.com/about/versions/android-2.1.html
-http://developer.android.com/about/versions/android-2.2.html
-http://developer.android.com/about/versions/android-2.3.html
-http://developer.android.com/reference/org/apache/http/impl/io/ChunkedInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/IdentityInputStream.html
-http://developer.android.com/reference/java/sql/CallableStatement.html
-http://developer.android.com/reference/java/sql/DatabaseMetaData.html
-http://developer.android.com/reference/java/sql/Driver.html
-http://developer.android.com/reference/java/sql/ParameterMetaData.html
-http://developer.android.com/reference/java/sql/PreparedStatement.html
-http://developer.android.com/reference/java/sql/Savepoint.html
-http://developer.android.com/reference/java/sql/SQLInput.html
-http://developer.android.com/reference/java/sql/SQLOutput.html
-http://developer.android.com/reference/java/sql/Struct.html
-http://developer.android.com/reference/java/sql/DriverManager.html
-http://developer.android.com/reference/java/sql/DriverPropertyInfo.html
-http://developer.android.com/reference/java/sql/Types.html
-http://developer.android.com/reference/java/sql/ClientInfoStatus.html
-http://developer.android.com/reference/java/sql/RowIdLifetime.html
-http://developer.android.com/reference/java/sql/BatchUpdateException.html
-http://developer.android.com/reference/java/sql/DataTruncation.html
-http://developer.android.com/reference/java/sql/SQLClientInfoException.html
-http://developer.android.com/reference/java/sql/SQLDataException.html
-http://developer.android.com/reference/java/sql/SQLFeatureNotSupportedException.html
-http://developer.android.com/reference/java/sql/SQLIntegrityConstraintViolationException.html
-http://developer.android.com/reference/java/sql/SQLInvalidAuthorizationSpecException.html
-http://developer.android.com/reference/java/sql/SQLNonTransientConnectionException.html
-http://developer.android.com/reference/java/sql/SQLNonTransientException.html
-http://developer.android.com/reference/java/sql/SQLRecoverableException.html
-http://developer.android.com/reference/java/sql/SQLSyntaxErrorException.html
-http://developer.android.com/reference/java/sql/SQLTimeoutException.html
-http://developer.android.com/reference/java/sql/SQLTransactionRollbackException.html
-http://developer.android.com/reference/java/sql/SQLTransientConnectionException.html
-http://developer.android.com/reference/java/sql/SQLTransientException.html
-http://developer.android.com/reference/com/google/android/gms/common/ConnectionResult.html
-http://developer.android.com/reference/org/apache/http/impl/io/ChunkedOutputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthOutputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/IdentityOutputStream.html
-http://developer.android.com/sdk/api_diff/12/changes.html
-http://developer.android.com/reference/android/mtp/MtpDevice.html
-http://developer.android.com/reference/android/mtp/MtpStorageInfo.html
-http://developer.android.com/reference/android/mtp/MtpDeviceInfo.html
-http://developer.android.com/reference/android/mtp/MtpObjectInfo.html
-http://developer.android.com/reference/android/mtp/MtpConstants.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/GameView.html
-http://developer.android.com/reference/android/net/rtp/RtpStream.html
-http://developer.android.com/reference/android/net/rtp/AudioStream.html
-http://developer.android.com/reference/android/net/rtp/AudioGroup.html
-http://developer.android.com/reference/android/net/rtp/AudioCodec.html
-http://developer.android.com/reference/android/net/sip/SipProfile.Builder.html
-http://developer.android.com/reference/javax/xml/parsers/FactoryConfigurationError.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRoutePNames.html
-http://developer.android.com/reference/android/support/v13/app/FragmentCompat.html
-http://developer.android.com/guide/topics/usb/index.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/SocketOutputBuffer.html
-http://developer.android.com/resources/tutorials/views/hello-spinner.html
-http://developer.android.com/resources/tutorials/views/hello-listview.html
-http://developer.android.com/resources/tutorials/views/hello-gridview.html
-http://developer.android.com/sdk/api_diff/17/changes.html
-http://developer.android.com/sdk/api_diff/16/changes.html
-http://developer.android.com/about/versions/android-3.1-highlights.html
-http://developer.android.com/sdk/api_diff/11/changes.html
-http://developer.android.com/sdk/api_diff/9/changes.html
-http://developer.android.com/sdk/api_diff/8/changes.html
-http://developer.android.com/about/versions/android-2.2-highlights.html
-http://developer.android.com/sdk/api_diff/7/changes.html
-http://developer.android.com/about/versions/android-2.0-highlights.html
-http://developer.android.com/about/versions/android-2.0.1.html
-http://developer.android.com/sdk/api_diff/6/changes.html
-http://developer.android.com/about/versions/android-2.0.html
-http://developer.android.com/sdk/api_diff/5/changes.html
-http://developer.android.com/sdk/api_diff/4/changes.html
-http://developer.android.com/about/versions/android-1.6-highlights.html
-http://developer.android.com/sdk/api_diff/3/changes.html
-http://developer.android.com/about/versions/android-1.5-highlights.html
-http://developer.android.com/about/versions/android-1.1.html
-http://developer.android.com/reference/javax/xml/transform/stream/StreamSource.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.html
-http://developer.android.com/reference/com/google/android/gms/maps/MapFragment.html
-http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMapOptions.html
-http://developer.android.com/reference/android/os/storage/OnObbStateChangeListener.html
-http://developer.android.com/guide/topics/location/obtaining-user-location.html
-http://developer.android.com/sdk/ndk/index.html
-http://developer.android.com/reference/java/beans/PropertyChangeListener.html
-http://developer.android.com/reference/java/beans/PropertyChangeSupport.html
-http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html
-http://developer.android.com/resources/samples/AndroidBeamDemo/index.html
-http://developer.android.com/reference/android/telephony/SmsManager.html
-http://developer.android.com/reference/javax/security/cert/Certificate.html
-http://developer.android.com/reference/javax/security/cert/CertificateEncodingException.html
-http://developer.android.com/reference/javax/security/cert/CertificateException.html
-http://developer.android.com/reference/javax/security/cert/CertificateExpiredException.html
-http://developer.android.com/reference/javax/security/cert/CertificateNotYetValidException.html
-http://developer.android.com/reference/javax/security/cert/CertificateParsingException.html
-http://developer.android.com/tools/help/uiautomator/null
-http://developer.android.com/reference/org/apache/http/auth/params/AuthPNames.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthParamBean.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthParams.html
-http://developer.android.com/shareables/training/nsdchat.zip
-http://developer.android.com/reference/org/apache/http/client/params/AllClientPNames.html
-http://developer.android.com/reference/org/json/JSONObject.html
-http://developer.android.com/reference/org/w3c/dom/DOMConfiguration.html
-http://developer.android.com/reference/org/w3c/dom/Document.html
-http://developer.android.com/reference/org/w3c/dom/Node.html
-http://developer.android.com/reference/java/security/acl/Acl.html
-http://developer.android.com/reference/java/security/acl/Group.html
-http://developer.android.com/reference/java/security/acl/Owner.html
-http://developer.android.com/reference/java/security/acl/Permission.html
-http://developer.android.com/reference/java/security/acl/AclNotFoundException.html
-http://developer.android.com/reference/java/security/acl/LastOwnerException.html
-http://developer.android.com/reference/java/security/acl/NotOwnerException.html
-http://developer.android.com/reference/java/security/interfaces/DSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/DSAPublicKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPublicKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAMultiPrimePrivateCrtKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPrivateCrtKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPublicKey.html
-http://developer.android.com/reference/renderscript/index.html
-http://developer.android.com/reference/renderscript/globals.html
-http://developer.android.com/reference/renderscript/annotated.html
-http://developer.android.com/reference/renderscript/rs__types_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__allocation_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__atomic_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__cl_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__debug_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__element_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__math_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__matrix_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__object_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__quaternion_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__sampler_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__time_8rsh_source.html
-http://developer.android.com/reference/renderscript/structrs__script__call.html
-http://developer.android.com/reference/renderscript/rs__types_8rsh.html
-http://developer.android.com/reference/renderscript/structrs__script.html
-http://developer.android.com/reference/renderscript/structrs__allocation.html
-http://developer.android.com/reference/renderscript/rs__core_8rsh_source.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMSource.html
-http://developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html
-http://developer.android.com/reference/javax/xml/parsers/SAXParser.html
-http://developer.android.com/reference/javax/xml/parsers/ParserConfigurationException.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientPNames.html
-http://developer.android.com/reference/org/apache/http/client/params/AuthPolicy.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientParamBean.html
-http://developer.android.com/reference/org/apache/http/client/params/CookiePolicy.html
-http://developer.android.com/reference/org/apache/http/client/params/HttpClientParams.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerPNames.html
-http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecPNames.html
-http://developer.android.com/reference/org/json/JSONException.html
-http://developer.android.com/reference/android/net/sip/SipException.html
-http://developer.android.com/reference/javax/security/auth/callback/UnsupportedCallbackException.html
-http://developer.android.com/reference/javax/security/auth/callback/Callback.html
-http://developer.android.com/reference/javax/xml/xpath/XPathException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathExpressionException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFactoryConfigurationException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunctionException.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRoute.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParams.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRouteBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParams.html
-http://developer.android.com/sdk/api_diff/9/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/changes-summary.html
-http://developer.android.com/reference/org/apache/http/conn/util/InetAddressUtils.html
-http://developer.android.com/reference/java/security/interfaces/DSAKey.html
-http://developer.android.com/reference/java/security/interfaces/DSAKeyPairGenerator.html
-http://developer.android.com/reference/java/security/interfaces/DSAParams.html
-http://developer.android.com/reference/java/security/interfaces/ECKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAKey.html
-http://developer.android.com/reference/javax/xml/xpath/XPath.html
-http://developer.android.com/reference/javax/xml/xpath/XPathExpression.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunction.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunctionResolver.html
-http://developer.android.com/reference/javax/xml/xpath/XPathVariableResolver.html
-http://developer.android.com/reference/javax/xml/xpath/XPathConstants.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFactory.html
-http://developer.android.com/sdk/api_diff/5/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/changes-summary.html
-http://developer.android.com/reference/android/support/v4/database/DatabaseUtilsCompat.html
-http://developer.android.com/reference/org/json/JSONArray.html
-http://developer.android.com/reference/org/json/JSONStringer.html
-http://developer.android.com/reference/org/json/JSONTokener.html
-http://developer.android.com/sdk/win-usb.html
-http://developer.android.com/reference/android/media/effect/EffectUpdateListener.html
-http://developer.android.com/reference/javax/xml/validation/Schema.html
-http://developer.android.com/reference/android/support/v4/os/ParcelableCompatCreatorCallbacks.html
-http://developer.android.com/reference/android/support/v4/os/ParcelableCompat.html
-http://developer.android.com/reference/org/w3c/dom/Attr.html
-http://developer.android.com/reference/org/w3c/dom/CDATASection.html
-http://developer.android.com/reference/org/w3c/dom/CharacterData.html
-http://developer.android.com/reference/org/w3c/dom/Comment.html
-http://developer.android.com/reference/org/w3c/dom/DocumentFragment.html
-http://developer.android.com/reference/org/w3c/dom/DocumentType.html
-http://developer.android.com/reference/org/w3c/dom/DOMError.html
-http://developer.android.com/reference/org/w3c/dom/DOMErrorHandler.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementation.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementationList.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementationSource.html
-http://developer.android.com/reference/org/w3c/dom/DOMLocator.html
-http://developer.android.com/reference/org/w3c/dom/DOMStringList.html
-http://developer.android.com/reference/org/w3c/dom/Element.html
-http://developer.android.com/reference/org/w3c/dom/Entity.html
-http://developer.android.com/reference/org/w3c/dom/EntityReference.html
-http://developer.android.com/reference/org/w3c/dom/NamedNodeMap.html
-http://developer.android.com/reference/org/w3c/dom/NameList.html
-http://developer.android.com/reference/org/w3c/dom/NodeList.html
-http://developer.android.com/reference/org/w3c/dom/Notation.html
-http://developer.android.com/reference/org/w3c/dom/ProcessingInstruction.html
-http://developer.android.com/reference/org/w3c/dom/Text.html
-http://developer.android.com/reference/org/w3c/dom/TypeInfo.html
-http://developer.android.com/reference/org/w3c/dom/UserDataHandler.html
-http://developer.android.com/reference/android/support/v4/content/pm/ActivityInfoCompat.html
-http://developer.android.com/reference/renderscript/rs__math_8rsh.html
-http://developer.android.com/reference/renderscript/structrs__matrix4x4.html
-http://developer.android.com/reference/renderscript/rs__cl_8rsh.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceActivities.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerServiceActivities.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/Marker.html
-http://developer.android.com/resources/community-groups.html
-http://developer.android.com/reference/org/apache/http/client/utils/CloneUtils.html
-http://developer.android.com/reference/org/apache/http/client/utils/URIUtils.html
-http://developer.android.com/reference/org/apache/http/client/utils/URLEncodedUtils.html
-http://developer.android.com/guide/topics/fundamentals/activities.html
-http://developer.android.com/guide/topics/fundamentals/fragments.html
-http://developer.android.com/guide/topics/ui/notifiers/index.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusClient.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
-http://developer.android.com/sdk/api_diff/11/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/changes-summary.html
-http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html
-http://developer.android.com/sdk/api_diff/9/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.service.wallpaper.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.telephony.gsm.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_dalvik.bytecode.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.awt.font.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.io.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.lang.reflect.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.net.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.nio.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.security.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.sql.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.text.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.concurrent.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.concurrent.atomic.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.concurrent.locks.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.logging.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.zip.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.net.ssl.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.security.auth.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.security.auth.x500.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.sql.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.datatype.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.parsers.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.transform.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.validation.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_org.apache.http.protocol.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.AudioTrack.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.CameraProfile.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.MediaRecorder.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.security.auth.Subject.html
-http://developer.android.com/reference/renderscript/structrs__element.html
-http://developer.android.com/reference/renderscript/structrs__type.html
-http://developer.android.com/reference/renderscript/structrs__sampler.html
-http://developer.android.com/reference/renderscript/structrs__mesh.html
-http://developer.android.com/reference/renderscript/structrs__path.html
-http://developer.android.com/reference/renderscript/structrs__program__fragment.html
-http://developer.android.com/reference/renderscript/structrs__program__vertex.html
-http://developer.android.com/reference/renderscript/structrs__program__raster.html
-http://developer.android.com/reference/renderscript/structrs__program__store.html
-http://developer.android.com/reference/renderscript/structrs__font.html
-http://developer.android.com/reference/renderscript/structrs__matrix3x3.html
-http://developer.android.com/reference/renderscript/structrs__matrix2x2.html
-http://developer.android.com/sdk/api_diff/3/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/changes-summary.html
-http://developer.android.com/reference/renderscript/rs__object_8rsh.html
-http://developer.android.com/sdk/api_diff/9/changes/java.net.NetworkInterface.html
-http://developer.android.com/sdk/api_diff/9/changes/java.net.SocketImpl.html
-http://developer.android.com/reference/renderscript/rs__allocation_8rsh.html
-http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecParamBean.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageItemInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/17/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/changes-summary.html
-http://developer.android.com/guide/topics/fundamentals/loaders.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.logging.Logger.html
-http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/17/changes/android.text.format.DateUtils.html
-http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.html
-http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityEvent.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityNodeInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityService.html
-http://developer.android.com/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityServiceInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/17/changes/android.Manifest.permission_group.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.AlertDialog.Builder.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.RelativeLayout.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.accessibilityservice.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.nfc.tech.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.renderscript.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.telephony.cdma.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.ContextThemeWrapper.html
-http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetHost.html
-http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.BatteryManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/17/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/17/changes/android.bluetooth.BluetoothA2dp.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.CalendarContract.CalendarColumns.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.CalendarContract.EventsColumns.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.ContentProviderClient.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.CallLog.Calls.html
-http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.CameraInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.telephony.cdma.CdmaCellLocation.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.CheckedTextView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/17/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/17/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/17/changes/android.renderscript.Script.html
-http://developer.android.com/sdk/api_diff/17/changes/android.database.DatabaseUtils.InsertHelper.html
-http://developer.android.com/sdk/api_diff/17/changes/android.text.format.DateFormat.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.admin.DeviceAdminInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.DigitalClock.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSession.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/17/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.SystemClock.html
-http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/17/changes/android.util.FloatMath.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PermissionInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PermissionGroupInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ProviderInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.FragmentManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/17/changes/android.location.LocationProvider.html
-http://developer.android.com/sdk/api_diff/17/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.ViewAnimator.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.IntentSender.html
-http://developer.android.com/sdk/api_diff/17/changes/android.location.Location.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.ViewGroup.MarginLayoutParams.html
-http://developer.android.com/sdk/api_diff/17/changes/android.text.TextUtils.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.RouteInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.RemoteCallbackList.html
-http://developer.android.com/sdk/api_diff/17/changes/android.graphics.Paint.html
-http://developer.android.com/sdk/api_diff/17/changes/android.opengl.GLES20.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSubtype.html
-http://developer.android.com/sdk/api_diff/17/changes/android.telephony.PhoneStateListener.html
-http://developer.android.com/sdk/api_diff/17/changes/android.net.LocalSocket.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebViewDatabase.html
-http://developer.android.com/sdk/api_diff/17/changes/android.util.LruCache.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaMetadataRetriever.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.Callback.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.Process.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.Notification.Builder.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.PowerManager.WakeLock.html
-http://developer.android.com/sdk/api_diff/17/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.RelativeLayout.LayoutParams.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ResolveInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.ViewGroup.LayoutParams.html
-http://developer.android.com/sdk/api_diff/17/changes/android.net.wifi.ScanResult.html
-http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/17/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.VideoView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.SurfaceView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.SlidingDrawer.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.TwoLineListItem.html
-http://developer.android.com/reference/javax/security/auth/callback/PasswordCallback.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.html
-http://developer.android.com/reference/renderscript/rs__atomic_8rsh.html
-http://developer.android.com/sdk/api_diff/17/changes/jdiff_statistics.html
-http://developer.android.com/shareables/app_widget_templates-v4.0.zip
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/fields_index_all.html
-http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html
-http://developer.android.com/reference/android/telephony/gsm/SmsManager.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.SubmitPdu.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.MessageClass.html
-http://developer.android.com/sdk/api_diff/15/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/changes-summary.html
-http://developer.android.com/reference/android/telephony/CellIdentityCdma.html
-http://developer.android.com/reference/android/telephony/CellIdentityGsm.html
-http://developer.android.com/reference/android/telephony/CellIdentityLte.html
-http://developer.android.com/reference/android/telephony/CellInfo.html
-http://developer.android.com/reference/android/telephony/CellInfoCdma.html
-http://developer.android.com/reference/android/telephony/CellInfoGsm.html
-http://developer.android.com/reference/android/telephony/CellInfoLte.html
-http://developer.android.com/reference/android/telephony/CellSignalStrength.html
-http://developer.android.com/reference/android/telephony/CellSignalStrengthCdma.html
-http://developer.android.com/reference/android/telephony/CellSignalStrengthGsm.html
-http://developer.android.com/reference/android/telephony/CellSignalStrengthLte.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.Window.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnErrorListener.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnEventListener.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnInfoListener.html
-http://developer.android.com/reference/android/drm/DrmStore.ConstraintsColumns.html
-http://developer.android.com/reference/android/drm/DrmConvertedStatus.html
-http://developer.android.com/reference/android/drm/DrmErrorEvent.html
-http://developer.android.com/reference/android/drm/DrmEvent.html
-http://developer.android.com/reference/android/drm/DrmInfo.html
-http://developer.android.com/reference/android/drm/DrmInfoEvent.html
-http://developer.android.com/reference/android/drm/DrmInfoRequest.html
-http://developer.android.com/reference/android/drm/DrmInfoStatus.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.html
-http://developer.android.com/reference/android/drm/DrmRights.html
-http://developer.android.com/reference/android/drm/DrmStore.html
-http://developer.android.com/reference/android/drm/DrmStore.Action.html
-http://developer.android.com/reference/android/drm/DrmStore.DrmObjectType.html
-http://developer.android.com/reference/android/drm/DrmStore.Playback.html
-http://developer.android.com/reference/android/drm/DrmStore.RightsStatus.html
-http://developer.android.com/reference/android/drm/DrmSupportInfo.html
-http://developer.android.com/reference/android/drm/DrmUtils.html
-http://developer.android.com/reference/android/drm/DrmUtils.ExtendedMetadataParser.html
-http://developer.android.com/reference/android/drm/ProcessedData.html
-http://developer.android.com/sdk/api_diff/15/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.service.textservice.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.service.wallpaper.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.textservice.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.ConnectionPoolDataSource.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.DataSource.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.PooledConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.RowSet.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.AndroidException.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
-http://developer.android.com/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.ClipboardManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.LinearLayout.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.OverScroller.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.Spinner.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebView.html
-http://developer.android.com/reference/android/telephony/CellLocation.html
-http://developer.android.com/reference/android/telephony/NeighboringCellInfo.html
-http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html
-http://developer.android.com/reference/android/telephony/PhoneStateListener.html
-http://developer.android.com/reference/android/telephony/ServiceState.html
-http://developer.android.com/reference/android/telephony/SignalStrength.html
-http://developer.android.com/reference/android/telephony/SmsMessage.html
-http://developer.android.com/reference/android/telephony/SmsMessage.SubmitPdu.html
-http://developer.android.com/reference/android/telephony/SmsMessage.MessageClass.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/3/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.LogManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.AlarmManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.AlertDialog.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.Annotation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.AutoText.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.DialogInterface.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.Instrumentation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.TextUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.Chronometer.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.Class.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.KeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Menu.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.RectF.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.CursorWrapper.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.URLSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.DexFile.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/3/changes/android.preference.DialogPreference.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.TouchUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.location.Location.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewDebug.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Resources.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.Touch.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.TypedArray.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.NetworkInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Looper.html
-http://developer.android.com/sdk/api_diff/3/changes/android.util.TimeUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Handler.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.RingtoneManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.URLUtil.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.jar.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.logging.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.Level.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.SoundPool.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ProgressBar.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.OrientationListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Parcel.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Rect.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
-http://developer.android.com/sdk/api_diff/3/changes/android.util.SparseIntArray.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.Spanned.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.SpanWatcher.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.TextWatcher.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Transformation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
-http://developer.android.com/sdk/api_diff/11/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.AbstractExecutorService.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.AbstractOwnableSynchronizer.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.AccessController.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.Criteria.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Calendar.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ThreadPoolExecutor.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.SharedPreferences.Editor.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.reflect.Array.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Array.html
-http://developer.android.com/sdk/api_diff/9/changes/java.nio.Buffer.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Arrays.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Collections.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicBoolean.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicInteger.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerFieldUpdater.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLong.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongFieldUpdater.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReference.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.DatabaseMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.BaseInputConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.BatchUpdateException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Blob.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.BreakIterator.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.Executors.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.CallableStatement.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.File.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.TreeSet.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.TreeMap.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Class.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.ResourceBundle.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PrintStream.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PrintWriter.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Clob.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/9/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.CollationKey.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ConcurrentHashMap.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Connection.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.System.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.ContactsContract.CommonDataKinds.Nickname.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Math.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.StrictMath.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.DataTruncation.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.datatype.DatatypeFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.DateFormatSymbols.html
-http://developer.android.com/sdk/api_diff/9/changes/android.text.format.DateUtils.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.DecimalFormatSymbols.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ScheduledThreadPoolExecutor.html
-http://developer.android.com/sdk/api_diff/9/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.LinkedList.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.parsers.DocumentBuilderFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Double.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.DropBoxManager.Entry.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLContextSpi.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Enum.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ExecutorService.html
-http://developer.android.com/sdk/api_diff/9/changes/org.apache.http.protocol.HTTP.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/9/changes/dalvik.system.PathClassLoader.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Float.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.Format.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.FutureTask.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.Geocoder.html
-http://developer.android.com/sdk/api_diff/9/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Package.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.LockSupport.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.String.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.reflect.Member.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLContext.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ResultSet.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionContext.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.Policy.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.security.auth.x500.X500Principal.html
-http://developer.android.com/sdk/api_diff/9/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.KeyStoreBuilderParameters.html
-http://developer.android.com/sdk/api_diff/9/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/9/changes/android.telephony.gsm.GsmCellLocation.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.NumberFormat.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.InputConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.InputConnectionWrapper.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLEngine.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSocket.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.IntentSender.html
-http://developer.android.com/sdk/api_diff/9/changes/android.opengl.GLES20.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.HandshakeCompletedEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/android.graphics.ImageFormat.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.IOException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Statement.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.awt.font.TextAttribute.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Properties.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Locale.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Types.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.ObjectStreamClass.html
-http://developer.android.com/sdk/api_diff/9/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/9/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.parsers.SAXParserFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.transform.TransformerFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.validation.SchemaFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/android.service.wallpaper.WallpaperService.Engine.html
-http://developer.android.com/sdk/api_diff/9/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ParameterMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PipedInputStream.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PipedReader.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.PowerManager.WakeLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.PreparedStatement.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.PropertyResourceBundle.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLInput.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Scanner.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ResultSetMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/android.net.wifi.WifiManager.WifiLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLOutput.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLWarning.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionBindingEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.TimeUnit.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.UnrecoverableKeyException.html
-http://developer.android.com/sdk/api_diff/3/changes/jdiff_statistics.html
-http://developer.android.com/reference/android/telephony/cdma/CdmaCellLocation.html
-http://developer.android.com/sdk/installing.html
-http://developer.android.com/tools/sdk/ndk/overview.html
-http://developer.android.com/reference/dalvik/system/DexClassLoader.html
-http://developer.android.com/sdk/api_diff/13/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/changes-summary.html
-http://developer.android.com/tools/help/sqlite3.html
-http://developer.android.com/guide/developing/device.html
-http://developer.android.com/sdk/adding-components.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.DropBoxManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.BatteryManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DownloadManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.dimen.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
-http://developer.android.com/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.AlarmClock.html
-http://developer.android.com/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.accounts.AccountManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.layout.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.format.Time.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.AbstractCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.StateSet.html
-http://developer.android.com/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.AsyncTask.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.MenuItem.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.AlertDialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.Patterns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.InputType.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/15/changes/android.opengl.GLES11Ext.html
-http://developer.android.com/reference/android/nfc/tech/IsoDep.html
-http://developer.android.com/reference/android/nfc/tech/MifareClassic.html
-http://developer.android.com/reference/android/nfc/tech/MifareUltralight.html
-http://developer.android.com/reference/android/nfc/tech/Ndef.html
-http://developer.android.com/reference/android/nfc/tech/NdefFormatable.html
-http://developer.android.com/reference/android/nfc/tech/NfcA.html
-http://developer.android.com/reference/android/nfc/tech/NfcB.html
-http://developer.android.com/reference/android/nfc/tech/NfcBarcode.html
-http://developer.android.com/reference/android/nfc/tech/NfcF.html
-http://developer.android.com/reference/android/nfc/tech/NfcV.html
-http://developer.android.com/reference/android/nfc/tech/TagTechnology.html
-http://developer.android.com/reference/android/net/sip/SipManager.html
-http://developer.android.com/reference/android/net/sip/SipAudioCall.html
-http://developer.android.com/resources/samples/SipDemo/index.html
-http://developer.android.com/reference/android/net/sip/SipAudioCall.Listener.html
-http://developer.android.com/reference/android/net/sip/SipErrorCode.html
-http://developer.android.com/reference/android/net/sip/SipSession.html
-http://developer.android.com/reference/android/net/sip/SipSession.Listener.html
-http://developer.android.com/reference/android/net/sip/SipSession.State.html
-http://developer.android.com/reference/android/net/sip/SipRegistrationListener.html
-http://developer.android.com/sdk/api_diff/7/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/4/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/changes-summary.html
-http://developer.android.com/guide/developing/debugging/index.html
-http://developer.android.com/guide/developing/tools/adb.html
-http://developer.android.com/guide/publishing/app-signing.html
-http://developer.android.com/guide/developing/devices/managing-avds.html
-http://developer.android.com/sdk/api_diff/15/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/15/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_all.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
-http://developer.android.com/reference/com/google/android/gms/plus/GooglePlusUtil.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusOneButton.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusShare.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusShare.Builder.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusSignInButton.html
-http://developer.android.com/sdk/api_diff/16/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/changes-summary.html
-http://developer.android.com/guide/appendix/api-levels.html
-http://developer.android.com/sdk/api_diff/17/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html
-http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html
-http://developer.android.com/sdk/api_diff/5/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginList.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioFormat.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.BatteryManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html
-http://developer.android.com/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html
-http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.NotificationManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.VideoView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.format.DateUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.TextPaint.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.Plugin.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.format.Formatter.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginData.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html
-http://developer.android.com/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.HandlerThread.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.InputType.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.IntentService.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Service.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.PixelFormat.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceView.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceHolder.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TouchDex.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMStack.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/5/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/15/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/7/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
-http://developer.android.com/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebStorage.html
-http://developer.android.com/sdk/api_diff/7/changes/android.graphics.Rect.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
-http://developer.android.com/sdk/api_diff/7/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/7/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/7/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
-http://developer.android.com/sdk/api_diff/7/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
-http://developer.android.com/reference/classes.html
-http://developer.android.com/resources/samples/SpinnerTest/index.html
-http://developer.android.com/resources/samples/Spinner/index.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/GroundOverlay.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/MarkerOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/Polygon.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/PolygonOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/Polyline.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/PolylineOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/TileOverlay.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdate.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html
-http://developer.android.com/reference/com/google/android/gms/maps/Projection.html
-http://developer.android.com/reference/com/google/android/gms/maps/UiSettings.html
-http://developer.android.com/reference/com/google/android/gms/maps/LocationSource.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/TileProvider.html
-http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdateFactory.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.AudioEncoder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AbsSeekBar.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.AbstractCursor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityNodeInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityService.html
-http://developer.android.com/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityServiceInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.media.audiofx.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/16/changes/android.security.KeyChain.html
-http://developer.android.com/sdk/api_diff/16/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ActionMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ActionProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.MemoryInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AdapterViewAnimator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AdapterViewFlipper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Notification.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.AllocationBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.wifi.p2p.WifiP2pManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewTreeObserver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.InstrumentationTestSuite.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.TestSuite.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Program.BaseProgramBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.TriangleMeshBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.UserDictionary.Words.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Allocation.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.accessibilityservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.animation.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.drm.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.net.wifi.p2p.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.nfc.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.nfc.tech.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.renderscript.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.security.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.service.textservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.textservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/16/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetHostView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.Assert.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.AssertionFailedError.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.AssertionFailedError.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.AsyncTaskLoader.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.SurfaceTexture.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.AttendeesColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.AudioRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.AvoidXfermode.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.runner.BaseTestRunner.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/16/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.html
-http://developer.android.com/sdk/api_diff/16/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.EventsColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.RemindersColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.CalendarView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Camera.html
-http://developer.android.com/sdk/api_diff/16/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Vibrator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Loader.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/16/changes/android.animation.LayoutTransition.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.CheckedTextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipData.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipData.Item.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipDescription.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteClosable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.ComparisonFailure.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.ComparisonFailure.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ComponentCallbacks2.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.CommonDataKinds.Phone.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.Contacts.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.DataUsageFeedback.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.PhoneLookupColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSubtype.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.ContentObservable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.ContentObserver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentProviderClient.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.CookieManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Font.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NdefRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RSSurfaceView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RSTextureView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Constants.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.StrictMode.VmPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmManagerClient.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.Action.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.DrmObjectType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.Playback.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.RightsStatus.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmSupportInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.TokenWatcher.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.inputmethod.EditorInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Element.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.GridLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.TestResult.html
-http://developer.android.com/sdk/api_diff/16/changes/android.text.Html.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.EntryType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.IndexEntry.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Font.Style.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.FormatException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.FrameLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Gallery.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.GeolocationPermissions.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.View.AccessibilityDelegate.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Sampler.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramStore.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NdefMessage.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Program.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NfcAdapter.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.InputDevice.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.LinearLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.res.Resources.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Spinner.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.InputEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.RelativeLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.SearchView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewStub.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.drawable.GradientDrawable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.audiofx.Visualizer.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Switch.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.MediaStore.MediaColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.inputmethod.InputMethodManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.tech.IsoDep.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.KeyguardManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Paint.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.JsResult.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_junit.framework.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_junit.runner.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.PixelFormat.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Process.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.Primitive.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.Uri.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteOpenHelper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener.html
-http://developer.android.com/sdk/api_diff/16/changes/android.service.textservice.SpellCheckerService.Session.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PermissionInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.PixelXorXfermode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.Format.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.CullMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQueryBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.SurfaceConfig.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Script.html
-http://developer.android.com/sdk/api_diff/16/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.TextureView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.SQLException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQuery.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteStatement.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.HierarchyTraceType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.RecyclerTraceType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewPropertyAnimator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebIconDatabase.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebStorage.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebView.HitTestResult.html
-http://developer.android.com/sdk/api_diff/13/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.AttendeesColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.CalendarColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.EventsColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/16/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/7/changes/jdiff_statistics.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/LatLng.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_java.util.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.View.html
-http://developer.android.com/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
-http://developer.android.com/reference/renderscript/rs__sampler_8rsh.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.accessibility.AccessibilityRecord.html
-http://developer.android.com/sdk/api_diff/15/changes/android.bluetooth.BluetoothDevice.html
-http://developer.android.com/sdk/api_diff/15/changes/android.appwidget.AppWidgetHostView.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/15/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/15/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.textservice.SpellCheckerSession.html
-http://developer.android.com/sdk/api_diff/15/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/15/changes/android.text.style.SuggestionSpan.html
-http://developer.android.com/sdk/api_diff/15/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.html
-http://developer.android.com/sdk/api_diff/15/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/15/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/15/changes/android.media.MediaMetadataRetriever.html
-http://developer.android.com/sdk/api_diff/15/changes/android.service.textservice.SpellCheckerService.Session.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeechService.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.RemoteException.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.textservice.SuggestionsInfo.html
-http://developer.android.com/sdk/api_diff/15/changes/android.graphics.SurfaceTexture.html
-http://developer.android.com/sdk/api_diff/15/changes/android.service.wallpaper.WallpaperService.Engine.html
-http://developer.android.com/sdk/api_diff/15/changes/android.webkit.WebSettings.LayoutAlgorithm.html
-http://developer.android.com/reference/javax/xml/validation/SchemaFactory.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.ActivityGroup.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.hardware.usb.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.FragmentTransaction.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/13/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/13/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.graphics.Point.html
-http://developer.android.com/sdk/api_diff/13/changes/android.graphics.PointF.html
-http://developer.android.com/sdk/api_diff/13/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/13/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.KeyguardManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.FragmentManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/13/changes/android.hardware.usb.UsbDeviceConnection.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.KeyguardManager.KeyguardLock.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.LocalActivityManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/13/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.TabActivity.html
-http://developer.android.com/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
-http://developer.android.com/reference/com/google/android/gms/panorama/PanoramaClient.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html
-http://developer.android.com/sdk/api_diff/13/changes/jdiff_statistics.html
-http://developer.android.com/reference/renderscript/structrs__tm.html
-http://developer.android.com/reference/javax/xml/validation/SchemaFactoryLoader.html
-http://developer.android.com/reference/javax/xml/validation/TypeInfoProvider.html
-http://developer.android.com/reference/javax/xml/validation/Validator.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
-http://developer.android.com/reference/com/google/android/gms/maps/MapsInitializer.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
-http://developer.android.com/resources/samples/BluetoothChat/index.html
-http://developer.android.com/resources/samples/BluetoothHDP/index.html
-http://developer.android.com/sdk/api_diff/12/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
-http://developer.android.com/sdk/api_diff/11/changes/java.lang.Object.html
-http://developer.android.com/reference/dalvik/system/BaseDexClassLoader.html
-http://developer.android.com/reference/dalvik/system/DexFile.html
-http://developer.android.com/reference/android/sax/Element.html
-http://developer.android.com/reference/android/sax/ElementListener.html
-http://developer.android.com/reference/android/sax/EndElementListener.html
-http://developer.android.com/reference/android/sax/EndTextElementListener.html
-http://developer.android.com/reference/dalvik/system/PathClassLoader.html
-http://developer.android.com/reference/android/sax/RootElement.html
-http://developer.android.com/reference/android/sax/StartElementListener.html
-http://developer.android.com/reference/android/sax/TextElementListener.html
-http://developer.android.com/sdk/api_diff/17/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.telephony.gsm.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_java.util.concurrent.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_java.util.concurrent.locks.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Deque.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Queue.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.CacheManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.ResourceBundle.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Uri.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SyncInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Uri.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.DatePicker.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Proxy.html
-http://developer.android.com/sdk/api_diff/11/changes/android.preference.Preference.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.LayoutInflater.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Locale.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SharedPreferences.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.CursorWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Vibrator.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.NavigableMap.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.NavigableSet.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentValues.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.SparseArray.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.TabWidget.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Service.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ProgressDialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.MotionEvent.html
-http://developer.android.com/guide/topics/network/sip.html
-http://developer.android.com/sdk/api_diff/17/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/17/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/methods_index_changes.html
-http://developer.android.com/reference/renderscript/rs__matrix_8rsh.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/17/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/17/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.ListItem.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/4/changes/android.text.style.ImageSpan.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_all.html
-http://developer.android.com/reference/renderscript/rs__debug_8rsh.html
-http://developer.android.com/reference/renderscript/rs__element_8rsh.html
-http://developer.android.com/reference/renderscript/rs__quaternion_8rsh.html
-http://developer.android.com/reference/renderscript/rs__time_8rsh.html
-http://developer.android.com/reference/renderscript/globals_func.html
-http://developer.android.com/reference/renderscript/globals_type.html
-http://developer.android.com/reference/renderscript/globals_enum.html
-http://developer.android.com/reference/renderscript/rs__graphics_8rsh.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.NinePatch.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Typeface.html
-http://developer.android.com/resources/faq/index.html
-http://developer.android.com/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_changes.html
-http://developer.android.com/shareables/sample_images.zip
-http://developer.android.com/reference/com/google/android/gms/maps/model/LatLngBounds.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/Tile.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/UrlTileProvider.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/VisibleRegion.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.CheckedTextView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabWidget.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_dialog.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_list.html
-http://developer.android.com/shareables/icon_templates-v4.0.zip
-http://developer.android.com/shareables/icon_templates-v2.3.zip
-http://developer.android.com/shareables/icon_templates-v2.0.zip
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/13/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.Config.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.VERSION.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.anim.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.AndroidTestCase.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.location.Address.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.VelocityTracker.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission_group.html
-http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ComponentName.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.TypedValue.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/4/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.drawable.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher_archive.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_changes.html
-http://developer.android.com/reference/renderscript/rs__mesh_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__program_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__graphics_8rsh_source.html
-http://developer.android.com/sdk/api_diff/10/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_all.html
-http://developer.android.com/resources/samples/NFCDemo/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SecureView.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.nfc.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.test.mock.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
-http://developer.android.com/sdk/api_diff/14/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_changes.html
-http://developer.android.com/reference/renderscript/rs__mesh_8rsh.html
-http://developer.android.com/sdk/api_diff/10/changes/android.nfc.NfcAdapter.html
-http://developer.android.com/sdk/api_diff/10/changes/android.media.MediaRecorder.AudioEncoder.html
-http://developer.android.com/sdk/api_diff/10/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/10/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/10/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/10/changes/android.bluetooth.BluetoothDevice.html
-http://developer.android.com/sdk/api_diff/10/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/10/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/10/changes/android.content.Context.html
-http://developer.android.com/reference/com/google/android/gcm/GCMBaseIntentService.html
-http://developer.android.com/reference/com/google/android/gcm/GCMBroadcastReceiver.html
-http://developer.android.com/reference/com/google/android/gcm/GCMConstants.html
-http://developer.android.com/reference/com/google/android/gcm/GCMRegistrar.html
-http://developer.android.com/sdk/api_diff/12/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.animation.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.drm.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.sip.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html
-http://developer.android.com/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html
-http://developer.android.com/sdk/api_diff/14/changes/android.accounts.AccountManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/14/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.ActionBar.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ActionMode.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.AlertDialog.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Allocation.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html
-http://developer.android.com/sdk/api_diff/14/changes/java.security.AllPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.animation.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.app.backup.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.nfc.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.nfc.tech.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.renderscript.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.Animator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Application.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.BaseObj.html
-http://developer.android.com/sdk/api_diff/14/changes/java.security.BasicPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html
-http://developer.android.com/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Byte2.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Byte3.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Byte4.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html
-http://developer.android.com/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.Class.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.TrafficStats.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.SparseArray.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.SparseIntArray.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.MenuItem.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.Config.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.NdefRecord.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_dalvik.annotation.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html
-http://developer.android.com/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Element.html
-http://developer.android.com/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html
-http://developer.android.com/sdk/api_diff/14/changes/java.io.ObjectInputStream.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/14/changes/java.io.FilePermission.html
-http://developer.android.com/sdk/api_diff/14/changes/java.net.SocketPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/java.security.Permission.html
-http://developer.android.com/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.IntEvaluator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.ExpandableListView.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.PackageStats.html
-http://developer.android.com/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.reflect.Field.html
-http://developer.android.com/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Script.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.FragmentManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.FrameLayout.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.reflect.Method.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.OverScroller.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.LinearLayout.html
-http://developer.android.com/sdk/api_diff/14/changes/android.opengl.GLUtils.html
-http://developer.android.com/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html
-http://developer.android.com/sdk/api_diff/14/changes/android.graphics.Paint.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Looper.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Handler.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.SyncAdapterType.html
-http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html
-http://developer.android.com/sdk/api_diff/14/changes/android.preference.Preference.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.http.SslError.html
-http://developer.android.com/sdk/api_diff/14/changes/java.util.logging.Handler.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.color.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.PopupMenu.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.InputDevice.html
-http://developer.android.com/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Int2.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Int3.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Int4.html
-http://developer.android.com/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.IntentSender.html
-http://developer.android.com/sdk/api_diff/14/changes/android.text.Layout.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.io.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.lang.ref.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.lang.reflect.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.net.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.security.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.util.logging.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_javax.security.auth.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.LayoutTransition.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.LiveFolders.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Long2.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Long3.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Long4.html
-http://developer.android.com/sdk/api_diff/14/changes/android.opengl.Matrix.html
-http://developer.android.com/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html
-http://developer.android.com/sdk/api_diff/14/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/14/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Notification.Builder.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.SearchView.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Service.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.Patterns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Process.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.integer.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.RecoverySystem.html
-http://developer.android.com/sdk/api_diff/14/changes/android.graphics.RectF.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Short2.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Short3.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Short4.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.StackView.html
-http://developer.android.com/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html
-http://developer.android.com/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html
-http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html
-http://developer.android.com/sdk/api_diff/14/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/changes-summary.html
-http://developer.android.com/resources/samples/RenderScript/HelloCompute/index.html
-http://developer.android.com/resources/samples/RenderScript/HelloCompute/src/com/example/android/rs/hellocompute/mono.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.http.SslCertificate.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputDevice.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputDevice.MotionRange.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.MotionEvent.PointerCoords.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_all.html
-http://developer.android.com/reference/com/google/android/gcm/server/package-summary.html
-http://developer.android.com/reference/renderscript/rs__program_8rsh.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.format.Formatter.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmManagerClient.OnEventListener.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.PictureListener.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.DebugUtils.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.TrafficStats.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebSettings.LayoutAlgorithm.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.TimeUtils.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmInfoEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmErrorEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.inputmethod.InputMethodSubtype.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.CookieManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/12/changes/android.graphics.Camera.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.Config.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.EventLog.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.StateSet.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.method.MovementMethod.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.Xml.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.ActivityManager.RecentTaskInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.FragmentBreadCrumbs.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/12/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.sip.SipProfile.Builder.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.sip.SipProfile.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/12/changes/android.widget.DatePicker.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DialogFragment.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DownloadManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.method.BaseMovementMethod.html
-http://developer.android.com/sdk/api_diff/12/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.SpannableStringBuilder.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/12/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/12/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/12/changes/android.animation.ValueAnimator.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/12/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/10/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/android.accounts.AbstractAccountAuthenticator.html
-http://developer.android.com/sdk/api_diff/6/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/6/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/6/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/6/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/6/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/6/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/6/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/15/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_changes.html
-http://developer.android.com/reference/com/google/android/gms/common/Scopes.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/classes_index_changes.html
-http://developer.android.com/reference/com/google/android/gcm/server/Constants.html
-http://developer.android.com/reference/com/google/android/gcm/server/Message.html
-http://developer.android.com/reference/com/google/android/gcm/server/Message.Builder.html
-http://developer.android.com/reference/com/google/android/gcm/server/MulticastResult.html
-http://developer.android.com/reference/com/google/android/gcm/server/Result.html
-http://developer.android.com/reference/com/google/android/gcm/server/Sender.html
-http://developer.android.com/reference/com/google/android/gcm/server/InvalidRequestException.html
-http://developer.android.com/sdk/api_diff/15/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/constructors_index_changes.html
-http://developer.android.com/resources/articles/creating-input-method.html
-http://developer.android.com/sdk/api_diff/17/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/17/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/10/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/6/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_changes.html
-http://developer.android.com/guide/faq/index.html
-http://developer.android.com/sdk/api_diff/8/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.gesture.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.text.util.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_dalvik.bytecode.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_java.net.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_java.nio.charset.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_java.util.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_java.util.regex.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_javax.xml.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_javax.xml.parsers.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_org.w3c.dom.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.regex.Matcher.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.regex.Pattern.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.CacheManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.JsResult.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.ActivityManager.ProcessErrorStateInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.AlarmManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/15/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ComponentName.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.SyncResult.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.http.SslCertificate.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Contacts.PresenceColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.StatusColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.AudioColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.anim.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ComponentInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Node.html
-http://developer.android.com/sdk/api_diff/8/changes/android.text.AndroidCharacter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.ViewGroup.LayoutParams.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/8/changes/android.graphics.PixelFormat.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.HapticFeedbackConstants.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/8/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.DOMException.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/8/changes/android.util.EventLogTags.html
-http://developer.android.com/sdk/api_diff/8/changes/android.util.Log.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/10/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.opengl.Matrix.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.accounts.AccountManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.ActivityInstrumentationTestCase2.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Document.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.ArrayList.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Attr.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.SoundPool.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.BaseExpandableListAdapter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.CallLog.Calls.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Images.Thumbnails.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Video.Thumbnails.html
-http://developer.android.com/sdk/api_diff/8/changes/java.nio.charset.Charset.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.Gesture.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.GesturePoint.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.GestureStroke.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.Groups.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.RawContacts.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/8/changes/java.net.DatagramSocketImpl.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilder.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilderFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.DOMImplementation.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Element.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Entity.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.GestureDetector.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.NamedNodeMap.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.SAXParser.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.SAXParserFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Text.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.VelocityTracker.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.HashMap.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.TabWidget.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaScannerConnection.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaScannerConnection.MediaScannerConnectionClient.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.Playlists.Members.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.VideoView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.text.util.Rfc822Tokenizer.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.XMLConstants.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_changes.html
-http://developer.android.com/guide/faq/framework.html
-http://developer.android.com/guide/faq/licensingandoss.html
-http://developer.android.com/guide/faq/security.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_changes.html
diff --git a/docs/html/topic/libraries/support-library/setup.jd b/docs/html/topic/libraries/support-library/setup.jd
index 8fbcee1..62f7148 100755
--- a/docs/html/topic/libraries/support-library/setup.jd
+++ b/docs/html/topic/libraries/support-library/setup.jd
@@ -216,7 +216,7 @@
 <p>In this case, the build file setting tells Google Play that the default build variant of your
   application can be installed on devices with Android 2.2 (API level 8) and higher. For more
   information about build variants, see
-  <a href="{@docRoot}sdk/installing/studio-build.html">Build System Overview</a>. </p>
+  <a href="{@docRoot}studio/build/index.html">Build System Overview</a>. </p>
 
 <p class="note">
   <strong>Note:</strong> If you are including the v4 support and v7 appcompat libraries in your
diff --git a/docs/html/topic/libraries/testing-support-library/index.jd b/docs/html/topic/libraries/testing-support-library/index.jd
index f69a35b7..8b23f73 100644
--- a/docs/html/topic/libraries/testing-support-library/index.jd
+++ b/docs/html/topic/libraries/testing-support-library/index.jd
@@ -629,5 +629,5 @@
 
   <p>
   For more information about Android Studio and to download it, see
-  <a href="{@docRoot}sdk/index.html">Download Android Studio and SDK Tools</a>.
+  <a href="{@docRoot}studio/index.html">Download Android Studio and SDK Tools</a>.
   </p>
diff --git a/docs/html/training/_book.yaml b/docs/html/training/_book.yaml
index 47c6904..00f9295 100644
--- a/docs/html/training/_book.yaml
+++ b/docs/html/training/_book.yaml
@@ -754,18 +754,6 @@
     - name: description
       value: How to use DHU to test Auto apps.
 
-- title: Building Apps for Work
-  path: /training/enterprise/index.html
-  section:
-  - title: Ensuring Compatibility with Managed Profiles
-    path: /training/enterprise/app-compatibility.html
-  - title: Implementing App Restrictions
-    path: /training/enterprise/app-restrictions.html
-  - title: Building a Device Policy Controller
-    path: /training/enterprise/work-policy-ctrl.html
-  - title: Configuring Corporate-Owned, Single-Use Devices
-    path: /training/enterprise/cosu.html
-
 - title: Best Practices for Interaction & Engagement
   path: /training/best-ux.html
   section:
@@ -1386,7 +1374,7 @@
     - name: description
       value: How to use the SafetyNet service to analyze a device where your app is running and get information about its compatibility with your app.
   - title: Enhancing Security with Device Management Policies
-    path: /training/enterprise/device-management-policy.html
+    path: /work/device-management-policy.html
     path_attributes:
     - name: description
       value: How to create an application that enforces security policies on devices.
diff --git a/docs/html/training/auto/messaging/index.jd b/docs/html/training/auto/messaging/index.jd
index fa8a8c4..0c4c732 100644
--- a/docs/html/training/auto/messaging/index.jd
+++ b/docs/html/training/auto/messaging/index.jd
@@ -280,7 +280,7 @@
 <p>
   After you have updated the support libraries, import them into your Android Studio development
   project by adding this dependency to your
-  <a href="{@docRoot}sdk/installing/studio-build.html#configBuild">build.gradle</a> file:
+  <a href="{@docRoot}studio/build/index.html#configBuild">build.gradle</a> file:
 </p>
 
 <pre>
diff --git a/docs/html/training/auto/start/index.jd b/docs/html/training/auto/start/index.jd
index 4d84960..d65ab68 100644
--- a/docs/html/training/auto/start/index.jd
+++ b/docs/html/training/auto/start/index.jd
@@ -63,7 +63,7 @@
 <p>Before you begin building apps for Auto, you must:</p>
 
 <ul>
-<li><strong><a href="{@docRoot}sdk/installing/create-project.html">Create or
+<li><strong><a href="{@docRoot}studio/projects/create-project.html">Create or
 update your app project</a></strong> - Android 5.0 (API level 21) provides new
 APIs for implementing audio playback and messaging that is compatible with Auto.
 To access the new APIs, create a project or modify an existing project to target
diff --git a/docs/html/training/basics/firstapp/creating-project.jd b/docs/html/training/basics/firstapp/creating-project.jd
index 57118ce..e66237a 100644
--- a/docs/html/training/basics/firstapp/creating-project.jd
+++ b/docs/html/training/basics/firstapp/creating-project.jd
@@ -37,10 +37,9 @@
 shows how to create a new project either using Android Studio or using the
 SDK tools from a command line.</p>
 
-<p class="note"><strong>Note:</strong> You should already have the Android SDK installed, and if
-you're using Android Studio, you should also have <a href="{@docRoot}sdk/installing/studio.html">
-Android Studio</a> installed. If you don't have these, follow the guide to <a
-href="{@docRoot}sdk/installing/index.html">Installing the Android SDK</a> before you start this
+<p class="note"><strong>Note:</strong> You should already have Android Studio or the Android SDK
+command-line tools installed. If not, <a
+href="{@docRoot}studio/index.html">download them</a> before you start this
 lesson.</p>
 
 
@@ -139,7 +138,7 @@
       <li><code>compiledSdkVersion</code> is the platform version against which you will compile
         your app. By default, this is set to the latest version of Android available in your SDK.
         (It should be Android 4.1 or greater; if you don't have such a version available, you must
-        install one using the <a href="{@docRoot}sdk/installing/adding-packages.html">SDK Manager</a>.)
+        install one using the <a href="{@docRoot}studio/intro/update.html">SDK Manager</a>.)
         You can still build your app to support older versions, but setting this to the latest
         version allows you to enable new features and optimize your app for a great user experience
         on the latest devices.</li>
@@ -154,7 +153,7 @@
         <a href="{@docRoot}training/basics/supporting-devices/platforms.html">Supporting Different
           Platform Versions</a>.</li>
     </ul>
-    <p>See <a href="{@docRoot}sdk/installing/studio-build.html">Building Your Project with Gradle</a>
+    <p>See <a href="{@docRoot}studio/build/index.html">Building Your Project with Gradle</a>
     for more information about Gradle.</p></dd>
 </dl>
 
diff --git a/docs/html/training/basics/firstapp/index.jd b/docs/html/training/basics/firstapp/index.jd
index 4e3689a..cb5073f 100644
--- a/docs/html/training/basics/firstapp/index.jd
+++ b/docs/html/training/basics/firstapp/index.jd
@@ -15,7 +15,7 @@
 <h2>Dependencies</h2>
 
 <ul>
-  <li><a href="{@docRoot}sdk/index.html">Android Studio</a></li>
+  <li><a href="{@docRoot}studio/index.html">Android Studio</a></li>
 </ul>
 
 </div>
@@ -32,7 +32,7 @@
 <p>Before you start this class, be sure you have your development environment set up. You need
 to:</p>
 <ol>
-  <li>Download <a href="{@docRoot}sdk/index.html">Android Studio</a>.</li>
+  <li>Download <a href="{@docRoot}studio/index.html">Android Studio</a>.</li>
   <li>Download the latest SDK tools and platforms using the
   <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>.</li>
 </ol>
diff --git a/docs/html/training/basics/firstapp/starting-activity.jd b/docs/html/training/basics/firstapp/starting-activity.jd
index 69cf6f8..e84e17e 100644
--- a/docs/html/training/basics/firstapp/starting-activity.jd
+++ b/docs/html/training/basics/firstapp/starting-activity.jd
@@ -25,13 +25,6 @@
   <li><a href="#DisplayMessage">Display the Message</a></li>
 </ol>
 
-<h2>You should also read</h2>
-
-<ul>
-  <li><a href="{@docRoot}sdk/installing/index.html">Installing the
-SDK</a></li>
-</ul>
-
 
 </div>
 </div>
@@ -406,7 +399,7 @@
 
 <p class="note"><strong>Note:</strong> Your Android SDK should already include
 the latest Android Support Library, which you installed during the
-<a href="{@docRoot}sdk/installing/adding-packages.html">Adding SDK Packages</a> step.
+<a href="{@docRoot}studio/intro/update.html">Adding SDK Packages</a> step.
 When using the templates in Android Studio, the Support Library is automatically added to your app project
 (you can see the library's JAR file listed under <em>Android Dependencies</em>). If you're not using
 Android Studio, you need to manually add the library to your project&mdash;follow the guide for <a
diff --git a/docs/html/training/basics/supporting-devices/languages.jd b/docs/html/training/basics/supporting-devices/languages.jd
index e1bf657..7d4d474 100644
--- a/docs/html/training/basics/supporting-devices/languages.jd
+++ b/docs/html/training/basics/supporting-devices/languages.jd
@@ -19,6 +19,7 @@
     <ul>
     <li><a href="{@docRoot}distribute/tools/localization-checklist.html">Localization Checklist</a></li>
       <li><a href="{@docRoot}guide/topics/resources/localization.html">Localization with Resources</a></li>
+      <li><a href="https://support.google.com/l10n/answer/6359997">App Translation Service</a></li>
     </ul>
   </div>
 </div>
diff --git a/docs/html/training/custom-views/index.jd b/docs/html/training/custom-views/index.jd
index f732adb..447da94 100755
--- a/docs/html/training/custom-views/index.jd
+++ b/docs/html/training/custom-views/index.jd
@@ -48,7 +48,7 @@
 <dl>
 <dt><b><a href="create-view.html">Creating a View Class</a></b></dt>
 <dd>Create a class that acts like a built-in view, with custom
-    attributes and support from the <a href="http://developer.android.com/sdk/installing/studio-layout.html">Android Studio</a> layout editor.
+    attributes and support from the <a href="http://developer.android.com/studio/write/layout-editor.html">Android Studio</a> layout editor.
 </dd>
 
 <dt><b><a href="custom-drawing.html">Custom Drawing</a></b></dt>
diff --git a/docs/html/training/enterprise/index.jd b/docs/html/training/enterprise/index.jd
deleted file mode 100644
index d54607c..0000000
--- a/docs/html/training/enterprise/index.jd
+++ /dev/null
@@ -1,65 +0,0 @@
-page.title=Building Apps for Work
-meta.tags="work, enterprise, corporate"
-page.tags="work", "enterprise", "corporate"
-page.metaDescription=Learn how to build Android apps for the enterprise and take advantage of Google's Android for Work program.
-page.article=true
-
-@jd:body
-
-<iframe width="448" height="252"
-    src="//www.youtube.com/embed/jQWB_-o1kz4?autohide=1&amp;showinfo=0"
-    frameborder="0" allowfullscreen=""
-    style="float: right; margin: 0 0 20px 20px;"></iframe>
-
-<p>
-  The Android framework provides features to support the security, data separation, and
-  administration needs of a enterprise environment. As an app developer, you can make your app more
-  appealing to corporate customers by gracefully handling enterprise security and feature
-  restrictions. You can also modify your app so that technology administrators can remotely
-  configure it for use with enterprise resources.
-</p>
-
-<p>
-  To help businesses incorporate Android devices and apps into the workplace, Google provides the
-  <a href="http://www.google.com/work/android">Android for Work</a> program, which offers a suite
-  of APIs and services for device distribution and administration. Through this program companies
-  can connect with Enterprise Mobility Management (EMM) providers to help integrate Android with
-  their businesses.
-</p>
-
-<p>
-  For more information, follow the links below to learn how to update your Android app to support
-  the enterprise environment or build enterprise-specific solutions.
-</p>
-
-<h2 id="apps">App Development for Enterprises</h2>
-
-<p>
-  Learn how to make your app function smoothly in corporate environments that restrict device
-  features and data access. Go further to support enterprise use of your app by enabling
-  restrictions that corporate technology administrators can use to remotely configure your app:
-</p>
-
-<div class="dynamic-grid">
-  <div class="resource-widget resource-flow-layout landing col-12"
-    data-query="collection:training/work/apps"
-    data-cardSizes="6x6"
-    data-maxResults="6">
-  </div>
-</div>
-
-
-<h2 id="admin">Device and App Administration</h2>
-
-<p>
-  Learn how to build policy controller apps that enable enterprise technology administrators
-  to manage devices, manage corporate apps, and provide access to company resources:
-</p>
-
-<div class="dynamic-grid">
-  <div class="resource-widget resource-flow-layout landing col-12"
-    data-query="collection:training/work/admin"
-    data-cardSizes="6x6"
-    data-maxResults="4">
-  </div>
-</div>
diff --git a/docs/html/training/enterprise/work-policy-ctrl.jd b/docs/html/training/enterprise/work-policy-ctrl.jd
deleted file mode 100644
index 8225ea3..0000000
--- a/docs/html/training/enterprise/work-policy-ctrl.jd
+++ /dev/null
@@ -1,339 +0,0 @@
-page.title=Building a Device Policy Controller
-page.metaDescription=Learn how to develop a device policy controller to create and administer a managed profile on an employee's device.
-page.tags="work policy controller,WPC,device policy controller,DPC"
-@jd:body
-
-<div id="tb-wrapper">
-<div id="tb">
-
-<h2>This lesson teaches you to</h2>
-<ol>
- <li><a href="#after_creating_profile">Create a Managed Profile</a></li>
- <li><a href="#set_up_policies">Set Up Device Policies</a></li>
- <li><a href="#apply_restrictions">Apply App Restrictions</a></li>
-</ol>
-
-<!-- related docs (NOT javadocs) -->
-
-<h2>
-  You should also read
-</h2>
-
-<ul>
-  <li>
-    <a href="{@docRoot}guide/topics/admin/device-admin.html">Device
-    Administration</a>
-  </li>
-</ul>
-
-<h2>Resources</h2>
-<ul>
-
-  <li>
-    <a href=
-    "{@docRoot}samples/BasicManagedProfile/index.html">BasicManagedProfile</a>
-  </li>
-
-  <li>
-    <a href=
-    "{@docRoot}samples/AppRestrictionEnforcer/index.html">AppRestrictionEnforcer</a>
-  </li>
-</ul>
-
-</div>
-</div>
-
-
-<p>
-  In an Android for Work deployment, an enterprise needs to maintain control
-  over certain aspects of the employees' devices. The enterprise needs to
-  ensure that work-related information is encrypted and is kept separate from
-  employees' personal data. The enterprise may also need to limit device
-  capabilities, such as whether the device is allowed to use its camera. And
-  the enterprise may require that approved apps provide app restrictions, so
-  the enterprise can turn app capability on or off as needed.
-</p>
-
-<p>
-  To handle these tasks, an enterprise develops and deploys
-  a <em>device policy controller</em> app (previously known as a
-  <em>work policy controller</em>). This app is installed on each employee's device. The
-  controller app installed on each employee's device and creates a work user
-  profile, which accesses enterprise apps and data separately from the user's
-  personal account. The controller app also acts as the
-  bridge between the enterprise's management software and the device; the
-  enterprise tells the controller app when it needs to make configuration
-  changes, and the controller app makes the appropriate settings changes for the
-  device and for other apps.
-</p>
-
-<p>
-  This lesson describes how to develop a device policy controller app for devices
-  in an Android for Work deployment. The lesson describes how to create a work
-  user profile, how to set device policies, and how to apply
-  restrictions to other apps running on the managed profile.
-</p>
-
-<p class="note">
-  <strong>Note:</strong> This lesson does not cover the situation where the
-  only profile on the device is the managed profile, under the enterprise's
-  control.
-</p>
-
-<h2 id="overview">Device Administration Overview</h2>
-
-<p>
-  In an Android for Work deployment, the enterprise administrator can set
-  policies to control the behavior of employees' devices and apps. The
-  enterprise administrator sets these policies with software provided by their
-  Enterprise Mobility Management (EMM) provider. The EMM software communicates
-  with a device policy controller on each device. The device policy controller, in
-  turn, manages the settings and behavior of the work user profile on each
-  individual’s device.
-</p>
-
-<p class="note">
-  <strong>Note:</strong> A device policy controller is built on the existing
-  model used for device administration applications, as described in <a href=
-  "{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a>.
-  In particular, your app needs to create a subclass of {@link
-  android.app.admin.DeviceAdminReceiver}, as described in that document.
-</p>
-
-<h3 id="managed_profiles">Managed profiles</h3>
-
-<p>
-  Users often want to use their personal devices in an enterprise setting. This
-  situation can present enterprises with a dilemma. If the user can use their
-  own device, the enterprise has to worry that confidential information (like
-  employee emails and contacts) are on a device the enterprise does not
-  control.
-</p>
-
-<p>
-  To address this situation, Android 5.0 (API level 21) allows enterprises to
-  set up a special work user profile using the Managed Profile API. This
-  user profile is called a <em>managed profile</em>, or a <em>work profile</em>
-  in the Android for Work program. If a device has a
-  managed profile for work, the profile's settings are under the control of the
-  enterprise administrator. The administrator can choose which apps are allowed
-  for that profile, and can control just what device features are available to
-  the profile.
-</p>
-
-<h2 id="create_profile">Create a Managed Profile</h2>
-
-<p>To create a managed profile on a device that already has a personal profile,
-first check that the device can support a managed profile, by seeing if the
-device supports the {@link
-android.content.pm.PackageManager#FEATURE_MANAGED_USERS FEATURE_MANAGED_USERS}
-system feature:</p>
-
-<pre>PackageManager pm = getPackageManager();
-if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
-
-    // This device does not support native managed profiles!
-
-}</pre>
-
-<p>If the device supports managed profiles, create one by sending an intent with
-an {@link android.app.admin.DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE
-ACTION_PROVISION_MANAGED_PROFILE} action. Include the device admin package
-name as an extra.</p>
-
-<pre>Activity provisioningActivity = getActivity();
-
-// You'll need the package name for the WPC app.
-String myWPCPackageName = "com.example.myWPCApp";
-
-// Set up the provisioning intent
-Intent provisioningIntent =
-        new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
-intent.putExtra(myWPCPackageName,
-        provisioningActivity.getApplicationContext().getPackageName());
-
-if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
-         == null) {
-
-    // No handler for intent! Can't provision this device.
-    // Show an error message and cancel.
-} else {
-
-    // REQUEST_PROVISION_MANAGED_PROFILE is defined
-    // to be a suitable request code
-    startActivityForResult(provisioningIntent,
-            REQUEST_PROVISION_MANAGED_PROFILE);
-    provisioningActivity.finish();
-}</pre>
-
-<p>The system responds to this intent by doing the following:</p>
-
-<ul>
-  <li>Verifies that the device is encrypted. If it is not, the system prompts
-  the user to encrypt the device before proceeding.
-  </li>
-
-  <li>Creates a managed profile.
-  </li>
-
-  <li>Removes non-required applications from the managed profile.
-  </li>
-
-  <li>Copies the device policy controller app into the managed profile and
-    sets it as the profile owner.
-  </li>
-</ul>
-
-<p>Override {@link android.app.Activity#onActivityResult onActivityResult()} to
-see whether the provisioning was successful, as shown in the following 
-example code:</p>
-
-<pre>&#64;Override
-public void onActivityResult(int requestCode, int resultCode, Intent data) {
-
-    // Check if this is the result of the provisioning activity
-    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
-
-        // If provisioning was successful, the result code is 
-        // Activity.RESULT_OK
-        if (resultCode == Activity.RESULT_OK) {
-            // Hurray! Managed profile created and provisioned!
-        } else {
-            // Boo! Provisioning failed!
-        }
-        return;
-
-    } else {
-        // This is the result of some other activity, call the superclass
-        super.onActivityResult(requestCode, resultCode, data);
-    }
-}</pre>
-
-<h3 id="after_creating_profile">After Creating the Managed Profile</h3>
-
-<p>When the profile has been provisioned, the system calls the device policy
-controller app's {@link android.app.admin.DeviceAdminReceiver#onProfileProvisioningComplete
-DeviceAdminReceiver.onProfileProvisioningComplete()} method. Override this
-callback method to finish enabling the managed profile.</p>
-
-<p>Typically, your {@link
-android.app.admin.DeviceAdminReceiver#onProfileProvisioningComplete
-DeviceAdminReceiver.onProfileProvisioningComplete()} callback implementation
-would perform these tasks:</p>
-
-<ul>
-  <li>Verify that the device is complying with the EMM's device policies, as
-  described in <a href="#set_up_policies">Set Up Device Policies</a>
-  </li>
-
-  <li>Enable any system applications that the administrator chooses to make
-  available within the managed profile, using {@link
-  android.app.admin.DevicePolicyManager#enableSystemApp
-  DevicePolicyManager.enableSystemApp()}   </li>
-
-  <li>If the device uses Google Play for Work, add the Google account
-  to the managed profile with {@link android.accounts.AccountManager#addAccount
-  AccountManager.addAccount()}, so administrators can install
-  applications to the device
-  </li>
-</ul>
-
-<p>Once you have completed these tasks, call the device policy manager's
-{@link android.app.admin.DevicePolicyManager#setProfileEnabled
-setProfileEnabled()} method to activate the managed profile:</p>
-
-
-<pre>// Get the device policy manager
-DevicePolicyManager myDevicePolicyMgr =
-        (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
-
-ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
-
-// Set the name for the newly created managed profile.
-myDevicePolicyMgr.setProfileName(componentName, "My New Managed Profile");
-
-// ...and enable the profile
-manager.setProfileEnabled(componentName);</pre>
-
-<h2 id="set_up_policies">Set Up Device Policies</h2>
-
-<p>
-  The device policy controller app is responsible for applying the enterprise's
-  device policies. For example, a particular enterprise might require that all
-  devices become locked after a certain number of failed attempts to enter the
-  device password. The controller app queries the EMM to find out what
-  the current policies are, then uses the <a href=
-  "{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a>
-  API to apply those policies.
-</p>
-
-<p>For information on how to apply device policies, see the 
-<a href="{@docRoot}guide/topics/admin/device-admin.html#policies">Device
-Administration</a> guide.</p>
-
-
-<h2 id="apply_restrictions">Apply App Restrictions</h2>
-
-<p>Enterprise environments may require that approved apps implement security
-or feature restrictions. App developers must implement these restrictions
-and declare them for use by enterprise administrators, as described in
-<a href="{@docRoot}training/enterprise/app-restrictions.html">Implementing
-App Restrictions</a>. The device policy controller receives restriction changes
-from the enterprise administrator, and forwards those restriction changes to the apps.</p>
-
-<p>For example, a particular news app might have a restriction setting that
-controls whether the app is allowed to download videos over a cellular
-network. When the EMM wants to disable cellular downloads, it sends a
-notification to the controller app. The controller app, in turn,
-notifies the news app that the restriction setting has changed.</p>
-
-<p class="note"><strong>Note:</strong> This document covers how the device policy
-controller app changes the restriction settings for the other apps on the
-managed profile. Details on how the device policy controller app communicates with
-the EMM are out of scope for this document.</p>
-
-<p>To change an app's restrictions, call the {@link
-android.app.admin.DevicePolicyManager#setApplicationRestrictions
-DevicePolicyManager.setApplicationRestrictions()} method. This method is passed
-three parameters: the controller app's {@link
-android.app.admin.DeviceAdminReceiver}, the package name of the app whose
-restrictions are being changed, and a {@link android.os.Bundle Bundle} that
-contains the restrictions you want to set.</p>
-
-<p>For example, suppose there's an app on the managed profile with the package
-name <code>"com.example.newsfetcher"</code>. This app has a single boolean
-restriction that can be configured, with the key
-<code>"downloadByCellular"</code>. If this restriction is set to
-<code>false</code>, the newsfetcher app is not allowed to download data through
-a cellular network; it must use a Wi-Fi network instead.</p>
-
-<p>
-  If your device policy controller app needs to turn off cellular downloads, it
-  would first fetch the device policy service object, as described above. It
-  then assembles a restrictions bundle and passes this bundle to {@link
-  android.app.admin.DevicePolicyManager#setApplicationRestrictions
-  setApplicationRestrictions()}:
-</p>
-
-<pre>// Fetch the DevicePolicyManager
-DevicePolicyManager myDevicePolicyMgr =
-        (DevicePolicyManager) thisActivity
-                .getSystemService(Context.DEVICE_POLICY_SERVICE);
-
-// Set up the restrictions bundle
-bundle restrictionsBundle = new Bundle();
-restrictionsBundle.putBoolean("downloadByCellular", false);
-
-// Pass the restrictions to the policy manager. Assume the WPC app
-// already has a DeviceAdminReceiver defined (myDeviceAdminReceiver).
-myDevicePolicyMgr.setApplicationRestrictions(
-        myDeviceAdminReceiver, "com.example.newsfetcher", restrictionsBundle);</pre>
-
-
-<p class="note"><strong>Note:</strong> The device policy service conveys the restrictions
-change to the app you name. However, it is up to that app to actually implement
-the restriction. For example, in this case, the app would be responsible for
-disabling its ability to use cellular networks for video downloads. Setting the
-restriction does not cause the system to enforce this restriction on the app.
-For more information, see <a href="{@docRoot}training/enterprise/app-
-restrictions.html">Implementing App Restrictions</a>.</p>
diff --git a/docs/html/training/material/compatibility.jd b/docs/html/training/material/compatibility.jd
index 49ef7f7..9ea88b2 100644
--- a/docs/html/training/material/compatibility.jd
+++ b/docs/html/training/material/compatibility.jd
@@ -127,7 +127,7 @@
 
 <p>To use these features in versions of Android earlier than 5.0 (API level 21), include the
 Android v7 Support Library in your project as a <a
-href="{@docRoot}/sdk/installing/studio-build.html#dependencies">Gradle dependency</a>:</p>
+href="{@docRoot}/studio/build/index.html#dependencies">Gradle dependency</a>:</p>
 
 <pre>
 dependencies {
diff --git a/docs/html/training/material/drawables.jd b/docs/html/training/material/drawables.jd
index eb9d273..75911f1 100644
--- a/docs/html/training/material/drawables.jd
+++ b/docs/html/training/material/drawables.jd
@@ -70,7 +70,7 @@
 <code>Palette</code> class, such as <code>Palette.getVibrantColor</code>.</p>
 
 <p>To use the {@link android.support.v7.graphics.Palette} class in your project, add the following
-<a href="{@docRoot}sdk/installing/studio-build.html#dependencies">Gradle dependency</a> to your
+<a href="{@docRoot}studio/build/index.html#dependencies">Gradle dependency</a> to your
 app's module:</p>
 
 <pre>
diff --git a/docs/html/training/material/lists-cards.jd b/docs/html/training/material/lists-cards.jd
index e7bdfe0..ee4a56f 100644
--- a/docs/html/training/material/lists-cards.jd
+++ b/docs/html/training/material/lists-cards.jd
@@ -254,7 +254,7 @@
 <p>The {@link android.support.v7.widget.RecyclerView} and {@link android.support.v7.widget.CardView}
 widgets are part of the <a href="{@docRoot}tools/support-library/features.html#v7">v7 Support
 Libraries</a>. To use these widgets in your project, add these
-<a href="{@docRoot}sdk/installing/studio-build.html#dependencies">Gradle dependencies</a> to your
+<a href="{@docRoot}studio/build/index.html#dependencies">Gradle dependencies</a> to your
 app's module:</p>
 
 <pre>
diff --git a/docs/html/training/multiple-apks/api.jd b/docs/html/training/multiple-apks/api.jd
index 504b4e3..6647a8c 100755
--- a/docs/html/training/multiple-apks/api.jd
+++ b/docs/html/training/multiple-apks/api.jd
@@ -149,17 +149,9 @@
 likelihood of mistakes that could have been easily avoided.</p>
 
 <p class="note"><strong>Note:</strong>  While the implementation details of how to create and
-include library projects are beyond the scope of this lesson, you can get up to speed quickly on
-their creation at the following links:</p>
-<ul>
-<li><a
-href="{@docRoot}sdk/installing/create-project.html#SettingUpLibraryModule">Managing Projects
-from Android Studio</a></li>
-<li><a
-href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">Managing Projects
-from the Command Line</a></li>
-</ul>
-
+include library projects are beyond the scope of this lesson, you can get up to speed
+by reading <a
+href="{@docRoot}studio/projects/android-library.html">Create an Android Library</a>.</p>
 
 <p>If you’re converting an existing application to use multiple APK support,
 scour your codebase for every localized string file, list of values, theme
diff --git a/docs/html/training/multiple-apks/multiple.jd b/docs/html/training/multiple-apks/multiple.jd
index 2501564..c0c2baa 100755
--- a/docs/html/training/multiple-apks/multiple.jd
+++ b/docs/html/training/multiple-apks/multiple.jd
@@ -178,16 +178,9 @@
 likelihood of mistakes that could have been easily avoided.</p>
 
 <p class="note"><strong>Note:</strong>  While the implementation details of how to create and
-include library projects are beyond the scope of this lesson, you can get up to speed quickly on
-their creation at the following links:</p>
-<ul>
-<li><a
-href="{@docRoot}sdk/installing/create-project.html#SettingUpLibraryModule">Managing Projects
-from Android Studio</a></li>
-<li><a
-href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">Managing Projects
-from the Command Line</a></li>
-</ul>
+include library projects are beyond the scope of this lesson, you can get up to speed
+by reading <a
+href="{@docRoot}studio/projects/android-library.html">Create an Android Library</a>.</p>
 
 <p>If you’re converting an existing application to use multiple APK support,
 scour your codebase for every localized string file, list of values, theme
diff --git a/docs/html/training/multiple-apks/screensize.jd b/docs/html/training/multiple-apks/screensize.jd
index a482f67..1668691 100755
--- a/docs/html/training/multiple-apks/screensize.jd
+++ b/docs/html/training/multiple-apks/screensize.jd
@@ -126,18 +126,9 @@
 likelihood of mistakes that could have been easily avoided.</p>
 
 <p class="note"><strong>Note:</strong>  While the implementation details of how to create and
-include library projects are beyond the scope of this lesson, you can get up to speed quickly on
-their creation at the following links:</p>
-<ul>
-<li><a
-href="{@docRoot}sdk/installing/create-project.html#SettingUpLibraryModule">Managing Projects
-from Android Studio</a></li>
-<li><a
-href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">Managing Projects
-from the Command Line</a></li>
-</ul>
-
-
+include library projects are beyond the scope of this lesson, you can get up to speed
+by reading <a
+href="{@docRoot}studio/projects/android-library.html">Create an Android Library</a>.</p>
 
 <p>If you’re converting an existing application to use multiple APK support,
 scour your codebase for every localized string file, list of values, theme
diff --git a/docs/html/training/multiple-apks/texture.jd b/docs/html/training/multiple-apks/texture.jd
index 3ffd64f..ff3c024 100755
--- a/docs/html/training/multiple-apks/texture.jd
+++ b/docs/html/training/multiple-apks/texture.jd
@@ -109,16 +109,9 @@
 likelihood of mistakes that could have been easily avoided.</p>
 
 <p class="note"><strong>Note:</strong>  While the implementation details of how to create and
-include library projects are beyond the scope of this lesson, you can get up to speed quickly on
-their creation at the following links:</p>
-<ul>
-<li><a
-href="{@docRoot}sdk/installing/create-project.html#SettingUpLibraryModule">Managing Projects
-from Android Studio</a></li>
-<li><a
-href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">Managing Projects
-from the Command Line</a></li>
-</ul>
+include library projects are beyond the scope of this lesson, you can get up to speed
+by reading <a
+href="{@docRoot}studio/projects/android-library.html">Create an Android Library</a>.</p>
 
 <p>If you’re converting an existing application to use multiple APK support,
 scour your codebase for every localized string file, list of values, theme
diff --git a/docs/html/training/testing/integration-testing/service-testing.jd b/docs/html/training/testing/integration-testing/service-testing.jd
index 7b420ac..60b95ca 100644
--- a/docs/html/training/testing/integration-testing/service-testing.jd
+++ b/docs/html/training/testing/integration-testing/service-testing.jd
@@ -128,7 +128,7 @@
 
 <h2 id="run">Run Integration Tests for Services</h2>
 <p>
-You can run integration tests from <a href="{@docRoot}sdk/index.html">Android Studio</a> or
+You can run integration tests from <a href="{@docRoot}studio/index.html">Android Studio</a> or
 from the command-line. Make sure to specify
 <a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
   {@code AndroidJUnitRunner}</a> as the default instrumentation runner in your project.
diff --git a/docs/html/training/testing/ui-testing/espresso-testing.jd b/docs/html/training/testing/ui-testing/espresso-testing.jd
index 45a4ceb..7df67e7 100644
--- a/docs/html/training/testing/ui-testing/espresso-testing.jd
+++ b/docs/html/training/testing/ui-testing/espresso-testing.jd
@@ -582,7 +582,7 @@
 
 <h2 id="run">Run Espresso Tests on a Device or Emulator</h2>
 <p>
-You can run Espresso tests from <a href="{@docRoot}sdk/index.html">Android Studio</a> or
+You can run Espresso tests from <a href="{@docRoot}studio/index.html">Android Studio</a> or
 from the command-line. Make sure to specify
 <a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
   {@code AndroidJUnitRunner}</a> as the default instrumentation runner in your project.
diff --git a/docs/html/training/testing/ui-testing/index.jd b/docs/html/training/testing/ui-testing/index.jd
index 1aa95a4..20ec99e 100644
--- a/docs/html/training/testing/ui-testing/index.jd
+++ b/docs/html/training/testing/ui-testing/index.jd
@@ -32,7 +32,7 @@
 you to run your tests quickly and reliably in a repeatable manner.</p>
 
 <p class="note"><strong>Note: </strong>It is strongly encouraged that you use
-<a href="{@docRoot}sdk/installing/studio.html">Android Studio</a> for
+<a href="{@docRoot}studio/index.html">Android Studio</a> for
 building your test apps, because it provides project setup, library inclusion, and packaging
 conveniences. This class assumes you are using Android Studio.</p>
 
diff --git a/docs/html/training/testing/ui-testing/uiautomator-testing.jd b/docs/html/training/testing/ui-testing/uiautomator-testing.jd
index 9dac5aa..05ddc34 100644
--- a/docs/html/training/testing/ui-testing/uiautomator-testing.jd
+++ b/docs/html/training/testing/ui-testing/uiautomator-testing.jd
@@ -512,7 +512,7 @@
 
 <h2 id="run">Run UI Automator Tests on a Device or Emulator</h2>
 <p>
-You can run UI Automator tests from <a href="{@docRoot}sdk/index.html">Android Studio</a> or
+You can run UI Automator tests from <a href="{@docRoot}studio/index.html">Android Studio</a> or
 from the command-line. Make sure to specify
 <a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
   {@code AndroidJUnitRunner}</a> as the default instrumentation runner in your project.
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index 2c0fb4e..e2aa5f4 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -1187,37 +1187,6 @@
   </li>
   <!-- End: Building for Auto -->
 
-
-  <!-- Start: Building for Work -->
-  <li class="nav-section">
-    <div class="nav-section-header">
-      <a href="<?cs var:toroot ?>training/enterprise/index.html">
-      <span class="small">Building Apps for</span><br/>
-              Work
-      </a>
-    </div>
-    <ul>
-      <li><a href="<?cs var:toroot ?>training/enterprise/app-compatibility.html">
-        Ensuring Compatibility with Managed Profiles
-      </a>
-      </li>
-      <li><a href="<?cs var:toroot ?>training/enterprise/app-restrictions.html">
-        Implementing App Restrictions
-      </a>
-      </li>
-      <li><a href="<?cs var:toroot ?>training/enterprise/work-policy-ctrl.html">
-        Building a Device Policy Controller
-      </a>
-      </li>
-      <li><a href="<?cs var:toroot ?>training/enterprise/cosu.html">
-        Configuring Corporate-Owned, Single-Use Devices
-      </a>
-      </li>
-    </ul>
-  </li>
-  <!-- End: Building for Work -->
-
-
   <li class="nav-section">
     <div class="nav-section-header">
       <a href="<?cs var:toroot ?>training/best-ux.html">
@@ -2118,7 +2087,7 @@
       </li>
 
       <li>
-        <a href="<?cs var:toroot ?>training/enterprise/device-management-policy.html"
+        <a href="<?cs var:toroot ?>work/device-management-policy.html"
             description="How to create an application that enforces security policies on devices."
             >Enhancing Security with Device Management Policies</a>
       </li>
diff --git a/docs/html/training/tv/start/index.jd b/docs/html/training/tv/start/index.jd
index cbd9b49..fcdaa10 100644
--- a/docs/html/training/tv/start/index.jd
+++ b/docs/html/training/tv/start/index.jd
@@ -37,7 +37,7 @@
 
 <p class="note">
   <strong>Note:</strong> You are encouraged to use <a href=
-  "{@docRoot}sdk/installing/studio.html">Android Studio</a> for building TV apps, because it
+  "{@docRoot}studio/index.html">Android Studio</a> for building TV apps, because it
   provides project setup, library inclusion, and packaging conveniences. This training assumes you
   are using Android Studio.
 </p>
diff --git a/docs/html/training/tv/start/start.jd b/docs/html/training/tv/start/start.jd
index babde77..05d442e 100755
--- a/docs/html/training/tv/start/start.jd
+++ b/docs/html/training/tv/start/start.jd
@@ -77,17 +77,17 @@
 <p>Before you begin building apps for TV, you must:</p>
 
 <ul>
-  <li><strong><a href="{@docRoot}sdk/installing/adding-packages.html#GetTools">
+  <li><strong><a href="{@docRoot}studio/intro/update.html#GetTools">
     Update your SDK tools to version 24.0.0 or higher</a></strong>
     <br>
     The updated SDK tools enable you to build and test apps for TV.
   </li>
-  <li><strong><a href="{@docRoot}sdk/installing/adding-packages.html#GetTools">
+  <li><strong><a href="{@docRoot}studio/intro/update.html#GetTools">
     Update your SDK with Android 5.0 (API 21) or higher</a></strong>
     <br>
     The updated platform version provides new APIs for TV apps.
   </li>
-  <li><strong><a href="{@docRoot}sdk/installing/create-project.html">
+  <li><strong><a href="{@docRoot}studio/projects/create-project.html">
     Create or update your app project</a></strong>
     <br>
     In order to access new APIs for TV devices, you must create a project or modify an existing
@@ -364,6 +364,6 @@
 <p>
   For more information about using emulators see, <a href="{@docRoot}tools/devices/emulator.html">
   Using the Emulator</a>. For more information on deploying apps from Android Studio to virtual
-  devices, see <a href="{@docRoot}sdk/installing/studio-debug.html">Debugging with Android
+  devices, see <a href="{@docRoot}studio/debug/index.html">Debugging with Android
   Studio</a>.
 </p>
diff --git a/docs/html/training/volley/index.jd b/docs/html/training/volley/index.jd
index 31c0ed0..a8c4b84 100755
--- a/docs/html/training/volley/index.jd
+++ b/docs/html/training/volley/index.jd
@@ -78,9 +78,8 @@
 </li>
 
 <li>Import the downloaded source into your app project as an Android library module
-(as described in <a href="{@docRoot}sdk/installing/create-project.html#SettingUpLibraryModule">
-Managing Projects from Android Studio</a>, if you're using Android Studio) or make a
-<a href="{@docRoot}guide/faq/commontasks.html#addexternallibrary"><code>.jar</code> file</a>.</li>
+as described in <a
+href="{@docRoot}studio/projects/android-library.html">Create an Android Library</a>.</li>
 </ol>
 
 <h2>Lessons</h2>
diff --git a/docs/html/training/wearables/apps/always-on.jd b/docs/html/training/wearables/apps/always-on.jd
index 9f28b70..7f63ee4 100644
--- a/docs/html/training/wearables/apps/always-on.jd
+++ b/docs/html/training/wearables/apps/always-on.jd
@@ -62,7 +62,7 @@
   <li>Update your SDK to include the Android 5.1 (API 22) or higher platform, which provides the
   APIs to allow activities to go into ambient mode. For more information on how to update your SDK,
   see
-  <a href="{@docRoot}sdk/installing/adding-packages.html#GetTools">Adding SDK Packages</a>.
+  <a href="{@docRoot}studio/intro/update.html#GetTools">Adding SDK Packages</a>.
   </li>
   <li> Create a project or modify an existing project to target Android 5.1 or higher. This means
   you must set the manifest
diff --git a/docs/html/training/wearables/apps/creating.jd b/docs/html/training/wearables/apps/creating.jd
index db91b67..1437423 100644
--- a/docs/html/training/wearables/apps/creating.jd
+++ b/docs/html/training/wearables/apps/creating.jd
@@ -49,7 +49,7 @@
 </ul>
 
 <p>To update your SDK with these components, see
-<a href="{@docRoot}sdk/installing/adding-packages.html#GetTools"> Get the latest SDK tools</a>.</p>
+<a href="{@docRoot}studio/intro/update.html#GetTools"> Get the latest SDK tools</a>.</p>
 
 <p class="note"><strong>Note:</strong> If you plan to make your Wear apps available for China,
   you must use the special release version 7.8.87 of the Google Play services client library to handle
@@ -139,7 +139,7 @@
 <p>To begin development, create an app project that contains
  wearable and handheld app modules. In Android Studio, click <b>File</b> >
  <b>New Project</b> and follow the Project Wizard instructions, as described in
- <a href="{@docRoot}sdk/installing/create-project.html">Creating a
+ <a href="{@docRoot}studio/projects/create-project.html">Creating a
 Project</a>. As you follow the wizard, enter the following information:</p>
 
 <ol>
diff --git a/docs/html/training/wearables/apps/layouts.jd b/docs/html/training/wearables/apps/layouts.jd
index 6480e63..a5f3480 100755
--- a/docs/html/training/wearables/apps/layouts.jd
+++ b/docs/html/training/wearables/apps/layouts.jd
@@ -200,5 +200,5 @@
 reference documentation</a> for the classes above.</p>
 
 <p class="note"><strong>Note:</strong> We recommend using <a
-href="{@docRoot}sdk/index.html">Android Studio</a> for Android Wear development, as
+href="{@docRoot}studio/index.html">Android Studio</a> for Android Wear development, as
 it provides project setup, library inclusion, and packaging conveniences.</p>
diff --git a/docs/html/training/wearables/apps/packaging.jd b/docs/html/training/wearables/apps/packaging.jd
index 9c42978..c342b46 100644
--- a/docs/html/training/wearables/apps/packaging.jd
+++ b/docs/html/training/wearables/apps/packaging.jd
@@ -54,7 +54,7 @@
   handheld app with the wearable app embedded in it automatically into your project's root folder.
 
   <p>Alternatively, you can sign both apps from the command line using the
-  <a href="{@docRoot}sdk/installing/studio-build.html#gradleWrapper">Gradle wrapper</a>. Both apps
+  <a href="{@docRoot}studio/build/index.html#gradleWrapper">Gradle wrapper</a>. Both apps
   must be signed to have the automatic pushing of the wearable app work.</p>
 
   <p>Store your key file location and credentials in environment variables and run the Gradle
diff --git a/docs/html/training/wearables/watch-faces/index.jd b/docs/html/training/wearables/watch-faces/index.jd
index aac49d3..94719fd8 100755
--- a/docs/html/training/wearables/watch-faces/index.jd
+++ b/docs/html/training/wearables/watch-faces/index.jd
@@ -45,7 +45,7 @@
 designs integrate with system UI elements and are power-efficient.</p>
 
 <p class="note"><strong>Note:</strong> We recommend using <a
-href="{@docRoot}sdk/index.html">Android Studio</a> for Android Wear development, as
+href="{@docRoot}studio/index.html">Android Studio</a> for Android Wear development, as
 it provides project setup, library inclusion, and packaging conveniences. This training assumes
 you are using Android Studio.</p>
 
diff --git a/docs/html/training/wearables/watch-faces/service.jd b/docs/html/training/wearables/watch-faces/service.jd
index 4246f60..20eb0c77 100755
--- a/docs/html/training/wearables/watch-faces/service.jd
+++ b/docs/html/training/wearables/watch-faces/service.jd
@@ -64,7 +64,7 @@
 </ol>
 
 <p>Android Studio creates a project with the <code>wear</code> and <code>mobile</code> modules.
-For more information, see <a href="{@docRoot}sdk/installing/create-project.html">Creating a
+For more information, see <a href="{@docRoot}studio/projects/create-project.html">Creating a
 Project</a>.</p>
 
 <h3 id="Dependencies">Dependencies</h3>
@@ -88,7 +88,7 @@
 documentation</a> for the Wearable Support Library.</p>
 
 <p class="note"><strong>Note:</strong> We recommend using <a
-href="{@docRoot}sdk/index.html">Android Studio</a> for Android Wear development, as
+href="{@docRoot}studio/index.html">Android Studio</a> for Android Wear development, as
 it provides project setup, library inclusion, and packaging conveniences.</p>
 
 <h3 id="Permissions">Declare Permissions</h3>
@@ -243,7 +243,7 @@
 defined by the <code>com.google.android.wearable.watchface.preview</code> metadata entry when
 presenting users with all the watch faces installed on the device. To obtain this drawable,
 run the watch face on your Android Wear device or in an emulator instance and <a
-href="{@docRoot}sdk/installing/studio-debug.html#screenCap">take a screenshot</a>. On Android Wear
+href="{@docRoot}studio/debug/am-screenshot.html">take a screenshot</a>. On Android Wear
 devices with hdpi screens, the preview image is typically 320x320 pixels in size.</p>
 
 <p>Watch faces that look substantially different on round devices can provide both round and
diff --git a/docs/html/wear/preview/_book.yaml b/docs/html/wear/preview/_book.yaml
index 285073c..a687294 100644
--- a/docs/html/wear/preview/_book.yaml
+++ b/docs/html/wear/preview/_book.yaml
@@ -8,8 +8,10 @@
 - title: API Overview
   path: /wear/preview/api-overview.html
   section:
-  - title: Expanded Notifications
+  - title: Notification Improvements
     path: /wear/preview/features/notifications.html
+  - title: Input Method Framework 
+    path: /wear/preview/features/ime.html
   - title: Complications
     path: /wear/preview/features/complications.html
   - title: Wear Navigation and Actions
@@ -25,3 +27,6 @@
 
 - title: License Agreement
   path: /wear/preview/license.html
+
+- title: Support and Release Notes
+  path: /wear/preview/support.html
diff --git a/docs/html/wear/preview/downloads.jd b/docs/html/wear/preview/downloads.jd
index 10c1377..eea4f11 100644
--- a/docs/html/wear/preview/downloads.jd
+++ b/docs/html/wear/preview/downloads.jd
@@ -1,10 +1,9 @@
-page.title=Preview Downloads
-meta.tags="wear-preview", "system image", "download"
-page.tags="wear"
-page.image=images/cards/card-n-downloads_2x.png
+page.title=Download and Test with a Device
+meta.keywords="wear-preview"
+page.tags="wear-preview"
+page.image=images/cards/card-n-sdk_2x.png
 
 @jd:body
-
 <div style="position:relative; min-height:600px">
 
   <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
@@ -165,247 +164,395 @@
 
   <div id="landing">
 
-<div id="qv-wrapper">
-  <div id="qv">
-    <h2>In this document</h2>
-      <ol>
-        <li><a href="#device-preview">Set up a hardware device</a>
-          <ol>
-            <li><a href="#flash">Flash a device</a></li>
-            <li><a href="#revertDevice">Uninstalling the Preview</a></li>
-          </ol>
-        </li>
-        <li><a href="#setupAVD">Set up an emulator</a></li>
-      </ol>
-  </div>
-</div>
+    <div id="qv-wrapper">
+      <div id="qv">
+        <ol>
+          <li>
+            <a href="#set_up_a_watch">Set Up a Watch</a>
+          </li>
 
-<p>
-  To run and test your app with the Wear Developer Preview, you need to set up
-  a runtime environment. You can do that in either of these ways:
-</p>
+          <li>
+            <a href="#set_up_an_emulator">Set Up an Emulator</a>
+          </li>
+        </ol>
+      </div>
+    </div>
 
-<ul>
-  <li>Install a Wear Preview system image on a supported hardware device,</li>
-  <li>Set up an Android emulator running the Wear Developer Preview</li>
-</ul>
+    <p>
+      You can run and test your app with the Android Wear 2.0 Developer Preview
+      in either of these ways:
+    </p>
 
-<p>
-  If you want an environment for basic compatibility testing of your app on the
-  new platform, all you need is your current APK and a hardware device or
-  emulator. You don't necessarily need to update your full development
-  environment to do basic testing.
-</p>
+    <ul>
+      <li>Install Android Wear 2.0 on a supported watch, or
+      </li>
 
-<p>
-  If you want to modify your app to target the Wear Preview or use the Wear
-  Preview APIs, you need to set up a development environment that's updated
-  to support the Wear Preview. For more information, see
-  <a href="{@docRoot}wear/preview/start.html">Get Started with Wear Preview</a>.
-</p>
+      <li>Set up an emulator that is running Android Wear 2.0
+      </li>
+    </ul>
 
+    <p>
+      If you want an environment for basic <strong>compatibility
+      testing</strong> of your app, you can use your current APK and a
+      supported watch or an emulator. As described below, you don't necessarily
+      need to update your full development environment to do basic testing.
+    </p>
 
-<h2 id="downloads">Download Files</h2>
+    <p>
+      However, if you want to <strong>modify</strong> your app to target
+      Android Wear 2.0 or use new APIs, you need to update your development
+      environment. See <a href="{@docRoot}wear/preview/start.html">Get Started
+      with the Android Wear 2.0 Preview</a>.
+    </p>
 
+    <h2 id="set_up_a_watch">
+      Set Up a Watch
+    </h2>
 
+    <p>
+      You can download a system image and manually flash it to a matching
+      watch. See the table below to download the system image for your test
+      watch.
+    </p>
 
-<h3 id="docs-dl">Reference documentation</h3>
+    <p>
+      Manually flashing a watch is useful if you need precise control over the
+      test environment or need to reinstall frequently, such as for automated
+      testing.
+    </p>
 
-<p>
-  Detailed information about the Wear Preview APIs is available in the
-  reference documentation, which you can download from the following table.
-  This package contains an abridged, offline version of the Android developer
-  web site, and includes an updated API reference for the Wear Preview APIs
-  and an API difference report.
-</p>
+    <p>
+      Installing a system image on a watch <strong>removes all data from the
+      watch</strong>, so you should back up your data first.
+    </p>
 
-<table>
-  <tr>
-    <th scope="col">Documentation</th>
-    <th scope="col">Checksums</th>
-  </tr>
-  <tr>
-    <td style="white-space: nowrap">
-    <a href="{@docRoot}shareables/preview/n-preview-1-docs.zip"
-      >n-preview-1-docs.zip</a></td>
-    <td width="100%">
-      MD5: 4ab33ccbe698f46f125cc5b807cf9c2f<br>
-      SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5
-    </td>
-  </tr>
-<table>
+    <h3 id="preview_system_images">
+      Preview system images
+    </h3>
 
-<h3 id="images-dl">Device system images</h3>
+    <p>
+      The preview includes system images for testing your app. Based on your
+      device, you can download a preview system image from the following tables
+      and flash it to the corresponding device.
+    </p>
 
-<p>
-  The following device system images can be used to update a compatible device
-  with the Wear Preview for testing. For information on installing these
-  images, see <a href="#device-preview">Set up a Hardware Device</a>.
-</p>
+    <h4 id="preview_image_for_lge_watch_urbane_2nd_edition">
+      Preview image for LGE Watch Urbane 2nd Edition
+    </h4>
 
-<table>
-  <tr>
-    <th scope="col">Device</th>
-    <th scope="col">Download / Checksums</th>
-  </tr>
+    <p>
+      <strong>Please note the following:</strong>
+      Flashing your device will
+      require unlocking the bootloader which may
+      void the device's warranty--proceed at your own risk.
+     </p>
 
-  <tr id="sprat">
-    <td>Gear Live <br>"sprat"</td>
-    <td><a href="#top" onclick="onDownload(this)"
-      >sprat-XXXXX-preview-d86c7559.tgz</a><br>
-      MD5: d84b6c31a7754e505149594887b3481a<br>
-      SHA-1: d86c7559c93724cca6af91040b012c48529f2c94
-    </td>
-  </tr>
+    <table>
+      <tr>
+        <th scope="col">
+          Type of LGE Watch Urbane 2nd Edition image
+        </th>
+        <th scope="col">
+          Download/Checksums
+        </th>
+      </tr>
+      <tr id="download-3-placeholder">
+        <td>
+          Preview image for testing
+        </td>
+        <td><a href="#top" onclick="onDownload(this)">download-3-placeholder.tgz</a><br>
+          MD5: [string]<br>
+          SHA-1: [string]
+        </td>
+      </tr>
+      <tr id="download-4-placeholder">
+        <td>
+          Non-preview image (for after testing)
+        </td>
+        <td><a href="#top" onclick="onDownload(this)">download-4-placeholder.tgz</a><br>
+          MD5: [string]<br>
+          SHA-1: [string]
+        </td>
+      </tr>
+    </table>
 
-</table>
+    <h4 id="preview_image_for_huawei_watch">
+      Preview image for Huawei Watch
+    </h4>
 
+    <p>
+      <strong>Please note the following:</strong>
+      Flashing your device will require unlocking
+      the bootloader which
+      shall void the device's warranty--proceed at your own risk.
+    </p>
 
+    <table>
+      <tr>
+        <th scope="col">
+          Type of Huawei Watch image
+        </th>
+        <th scope="col">
+          Download/Checksums
+        </th>
+      </tr>
+      <tr id="download-1-placeholder">
+        <td>
+          Preview image for testing
+        </td>
+        <td><a href="#top" onclick="onDownload(this)">download-1-placeholder.tgz</a><br>
+          MD5: [string]<br>
+          SHA-1: [string]
+        </td>
+      </tr>
+      <tr id="download-2-placeholder">
+        <td>
+          Non-preview image (for after testing)
+        </td>
+        <td><a href="#top" onclick="onDownload(this)">download-2-placeholder.tgz</a><br>
+          MD5: [string]<br>
+          SHA-1: [string]
+        </td>
+      </tr>
+    </table>
 
-<h2 id="device-preview">Set up a Hardware Device</h2>
+    <h3 id="flash_a_watch">
+      Flash a watch
+    </h3>
 
-<p>
-  The Wear Developer Preview offers system updates for a range of hardware devices
-  that you can use for testing your app, from phones to tablets and TV.
-</p>
+    <p>
+      The steps for flashing an image to a watch are similar to the <a href=
+      "https://developers.google.com/android/nexus/images">steps provided for
+      flashing to a phone</a>. After you <strong>back up your watch
+      data</strong>, use steps in this section to flash the image to the
+      <strong>specific watch</strong> that matches the image (e.g., you must
+      use an LGE Watch Urbane 2nd Edition for the corresponding image).
+    </p>
 
+    <h4 id="set_up_the_watch_to_be_flashed">
+      Set up the watch to be flashed
+    </h4>
 
+    <p>
+      On the watch, enable the Developer Options menu and ADB debugging as
+      follows:
+    </p>
 
-<h3 id="flash">Flash a device</h3>
+    <ol>
+      <li>Open the Settings menu on the watch.
+      </li>
 
-<p>
-  At any time you can download the latest Developer Preview system image and
-  manually flash it to your device. See the table below to download the system
-  image for your test device. Manually flashing a device is useful if you need
-  precise control over the test environment or need to reinstall frequently,
-  such as for automated testing.
-</p>
+      <li>Scroll to the bottom of the menu. If no <strong>Developer
+      Options</strong> item is provided, tap <strong>About</strong>.
+      </li>
 
-<p>
-  Installing a system image on a device <strong>removes all data from the
-  device</strong>, so you should back up your data first.
-</p>
+      <li>Tap the build number 7 times.
+      </li>
 
-<p>
-  After you back up your device data and download the system image below that
-  matches your device, follow the instructions at <a href=
-  "https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
-  to flash the image onto your device.
-</p>
+      <li>From the Settings menu, tap the <strong>Developer Options</strong>
+      item.
+      </li>
 
+      <li>Enable ADB debugging.
+      </li>
+    </ol>
 
-<h3 id="revertDevice">Uninstalling the Preview</h3>
+    <h4 id="confirm_installation_of_the_fastboot_tool">
+      Confirm installation of the fastboot tool
+    </h4>
 
-<p>
-  If you want to uninstall the preview from a device, you can do so in one of
-  these ways: </p>
-  <ul>
-    <li><strong>Obtain a factory spec system image</strong> and then manually
-    flash it to the device.
-      <ul>
-          <li>For <strong>Nexus devices and Pixel C devices</strong>, see
-        the <a href="http://developers.google.com/android/nexus/images">Factory Images
-        for Nexus Devices</a> page for downloads. </li>
-        <li>For <strong>other devices</strong>, please contact the device manufacturer
-        directly. Alternatively, if the device is supported
-        in the Android Beta Program, you can enroll the device in the
-        program and then un-enroll it (see below).</li>
-      </ul>
-    </li>
-    <li><strong>Un-enroll the device from Android Beta Program</strong>. If the
-    device is enrolled in the <a href="https://g.co/androidbeta">Android Beta
-    Program</a>, regardless of device, you can simply un-enroll it from the program.
-  <p>
-    The device will receive an OTA update to the most recent production version
-    of Android available for that device (for example, Android 6.0 Marshmallow).
-    The update requires a full device reset, so user data on the device will be
-    removed. Make sure to <strong>back up important data</strong> before
-    un-enrolling a device.
-  </p>
-  </li>
-</ul>
+    <p>
+      To flash a device using one of the <a href=
+      "#preview_system_images">system images</a>, confirm that you have the
+      <code>fastboot</code> tool in the <code>platform-tools/</code> directory
+      of the <a href="https://developer.android.com/sdk">Android SDK</a>. Be
+      sure that you have the latest version of the <strong>Android SDK
+      Platform-tools</strong> from the <a href=
+      "{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>.
+    </p>
 
-<p class="note"><strong>Note:</strong>
-  Uninstalling a Developer Preview system image prior to
-  the end of the program requires a full device reset and removes all user data
-  on the device.
-</p>
+    <p>
+      After you confirm that you have the <code>fastboot</code> tool, add the
+      tool to your PATH environment variable so the tool can be found when you
+      flash the watch.
+    </p>
 
+    <h4 id="transfer_the_image_to_the_watch">
+      Transfer the image to the watch
+    </h4>
 
-<h2 id="setupAVD">Set up an emulator</h2>
+    <p>
+      To download a preview image and flash it to the watch:
+    </p>
 
-<p>To use the Android Emulator to run the Wear Preview, you need to
-download the Wear Preview SDK and create a virtual device for the
-emulator.</p>
+    <ol>
+      <li>Download and unzip the appropriate system image from the "Preview
+      system image" column in the <a href="#preview_system_images">table
+      above</a>.
+      </li>
 
-<p>First, download the Wear Preview SDK as follows (if you
-already got it while <a href="{@docRoot}preview/setup-sdk.html">setting up
-to develop for Android N</a>, you can skip this part):
+      <li>Attach the watch charger to the watch and plug the USB cord (from the
+      charger) into your computer.
+      </li>
 
-<ol>
-  <li>In Android Studio, open the Settings dialog
-    (<strong>File &gt; Settings</strong> on Windows/Linux, or
-    <strong>Android Studio &gt; Preferences</strong> on Mac). In the left
-    panel, select <strong>Appearance &amp; Behavior &gt;
-  System Settings &gt; Android SDK</strong>.
+      <li>Use the following <a href="{@docRoot}tools/help/adb.html">adb
+      command</a> to confirm that the watch is available for flashing:
+      <code>adb devices</code>
+      </li>
 
-  <li>Click the <strong>SDK Platforms</strong> tab, then select the
-  <strong>Wear Preview</strong> check box.</li>
+      <li>Use the following adb command to start the device in fastboot mode:
+      <code>adb reboot bootloader</code>
+      </li>
 
-  <li>Click the <strong>SDK Tools</strong> tab, then select the
-    <strong>Android SDK Build Tools</strong>, <strong>Android SDK
-    Platform-Tools</strong>, and <strong>Android SDK Tools</strong> check
-    boxes.
-  </li>
+      <li>If necessary, use <strong>one</strong> of following two commands to
+      unlock the device's bootloader. This step <strong>erases all data on the
+      device</strong>: <code>fastboot flashing unlock</code> or, for some
+      devices, <code>fastboot oem unlock</code>
+      </li>
 
-  <li>Click <strong>OK</strong> and accept the license
-    agreements for any packages to be installed.
-  </li>
-</ol>
+      <li>Navigate to the directory where you unzipped the system image in Step
+      1.
+      </li>
 
-<p>You should now have <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
-<strong>Platform-Tools 24.0.0 rc1</strong>, and <strong>SDK Tools
-25.0.9</strong>. If you do not update the SDK Tools to 25.0.9, then you won't
-be able to run the x86_64 system images for Android N.</p>
+      <li>Execute the <code>flash-all</code> script by typing
+      <code>flash-all.sh</code> or, in the case of Windows,
+      <code>flash-all.bat</code>.
+      </li>
+    </ol>
 
+    <p>
+      After the script finishes, your watch reboots. Pair the watch with a
+      phone or tablet. The preview now is available for testing on the watch.
+      Before installing an app, enable the Developer Options menu, and ADB
+      debugging, on the watch as follows:
+    </p>
 
-<p>Now create a virtual device with the Wear Preview system image:</p>
+    <ol>
+      <li>Open the Settings menu (on the watch).
+      </li>
 
-<ol>
-  <li>Open the AVD Manager by selecting <strong>Tools > Android >
-    AVD Manager</strong>.</li>
-  <li>Click <strong>Create Virtual Device</strong>.</li>
-  <li>Select a device such as Nexus 5X, Nexus 6P, Nexus 9, or Android TV,
-    then click <strong>Next</strong>.</li>
-  <li>Select the <strong>N</strong> system image (with the
-    <strong>x86</strong> ABI), then click <strong>Next</strong>.
-    (Only x86 system images are currently supported with the Android Emulator
-for the Wear Preview.)
-  <li>Complete the rest of the AVD configuration and click
-    <strong>Finish</strong>.</li>
-</ol>
+      <li>Scroll to the bottom of the menu and tap <strong>About</strong>.
+      </li>
 
-<p>You can now launch the Android Emulator with the Wear Preview AVD.</p>
+      <li>Tap the build number 7 times.
+      </li>
 
-<p>
-For the best experience in the Android Emulator, install
-Android Studio 2.2 Preview, which supports the <a
-href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0 Beta</a>
-with much faster performance compared to the Emulator in
-Android Studio 1.5.</p>
+      <li>From the Settings menu, tap the <strong>Developer Options</strong>
+      item.
+      </li>
 
-<p>For more information about creating virtual devices, see <a href=
-  "{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>.
-</p>
+      <li>Enable ADB debugging.
+      </li>
 
+      <li>Connect the watch to your computer and tap <strong>Always allow from
+      this computer</strong>.
+      </li>
+    </ol>
 
+    <p>
+      Your watch is ready for you to <a href=
+      "{@docRoot}training/wearables/apps/creating.html#Install">install and run
+      your app</a>:
+    </p>
 
-  </div><!-- landing -->
+    <ol>
+      <li>Open your app in Android Studio.
+      </li>
+
+      <li>Select <strong>wear</strong> from the Run/Debug configuration
+      drop-down menu.
+      </li>
+
+      <li>Click the Play button.
+      </li>
+
+      <li>In the Select Deployment Target box, click your device.
+      </li>
+    </ol>
+
+    <p>
+      After your app is installed on the watch, you are prompted to start the
+      app on the watch.
+    </p>
+
+    <p>
+      When testing is completed, follow the steps for <a href=
+      "#uninstall_the_preview_from_a_watch">uninstalling the preview</a>.
+    </p>
+
+    <h3 id="uninstall_the_preview_from_a_watch">
+      Uninstall the preview from a watch
+    </h3>
+
+    <p>
+      When testing with the preview is done, restore the watch as follows:
+    </p>
+
+    <ol>
+      <li>Download and unzip the appropriate system image from the "Non-preview
+      system image" column in the <a href="#preview_system_images">table
+      above</a>.
+      </li>
+
+      <li>Manually flash the image to the watch using steps similar to those in
+      <a href="#transfer_the_image_to_the_watch">Transfer the image to the
+      watch</a>, except that you flash the <strong>non-preview</strong> image
+      to the watch.
+      </li>
+    </ol>
+
+    <p>
+      <strong>Note</strong>: Removing a preview system image requires a full
+      device reset and removes all user data on the device.
+    </p>
+
+    <h2 id="set_up_an_emulator">
+      Set Up an Emulator
+    </h2>
+
+    <p>
+      To test with the Android Emulator, create a virtual device in Android
+      Studio as follows:
+    </p>
+
+    <ol>
+      <li>Open the AVD Manager by selecting <strong>Tools &gt; Android &gt; AVD
+      Manager</strong>.
+      </li>
+
+      <li>Click <strong>Create Virtual Device</strong>.
+      </li>
+
+      <li>In the <strong>Category</strong> pane, select Wear, choose a name
+      (such as Android Wear Round), and click <strong>Next</strong>.
+      </li>
+
+      <li>Select an <strong>N</strong> image to download. The images may be on
+      the <strong>x86</strong> tab instead of the <strong>Recommended</strong>
+      tab, until installed. For example, select the image with the
+      <strong>Release Name</strong> of N, the <strong>API Level</strong> of N,
+      and the <strong>Target</strong> of "Android 6.X (with Android Wear)".
+      When the download and installation are complete, click
+      <strong>Finish</strong> and then click <strong>Next</strong>.
+      </li>
+
+      <li>Verify the configuration of the Android Virtual Device (AVD) and
+      click <strong>Finish</strong>.
+      </li>
+    </ol>
+
+    <p>
+      You can now test an application in the <a href=
+      "{@docRoot}tools/devices/emulator.html">Android Emulator</a>. For more
+      information about using virtual devices, see <a href=
+      "{@docRoot}tools/devices/managing-avds.html">Managing AVDs with the AVD
+      Manager</a>.
+    </p>
+ </div><!-- landing -->
 
 </div><!-- relative wrapper -->
 
 
-
 <script>
   var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/wear/preview/";
   function onDownload(link) {
@@ -454,4 +601,4 @@
     }
   });
 
-</script>
+</script>
\ No newline at end of file
diff --git a/docs/html/wear/preview/features/bridger.jd b/docs/html/wear/preview/features/bridger.jd
new file mode 100644
index 0000000..4f0d76b
--- /dev/null
+++ b/docs/html/wear/preview/features/bridger.jd
@@ -0,0 +1,147 @@
+page.title=Bridging Mode for Notifications
+meta.keywords="wear-preview"
+page.tags="wear-preview"
+page.image=images/cards/card-n-sdk_2x.png
+@jd:body
+
+    <div id="qv-wrapper">
+      <div id="qv">
+        <ol>
+          <li>
+            <a href=
+            "#preventing_bridging_with_the_bridging_mode_feature">Preventing
+            Bridging with the Bridging Mode Feature</a>
+          </li>
+
+          <li>
+            <a href=
+            "#using_a_dismissal_id_to_sync_notification_dismissals">Using a
+            Dismissal ID to Sync Notification Dismissals</a>
+          </li>
+        </ol>
+      </div>
+    </div>
+
+    <p>
+      By default, notifications <a href=
+      "{@docRoot}training/wearables/notifications/index.html">are bridged
+      (shared)</a> from an app on a companion phone to the watch. Standalone
+      Android Wear apps are planned for Android Wear 2.0. Therefore, a phone
+      app and a standalone watch app may be sources of the same notifications.
+      The Android Wear 2.0 Preview includes a Bridging mode feature to handle
+      this problem of duplicate notifications.
+    </p>
+
+    <p>
+      With the Android Wear 2.0 Preview, developers can plan to change the
+      behavior of notifications with the following:
+    </p>
+
+    <ul>
+      <li>Specifying in the standalone app's Android manifest file that
+      notifications from the corresponding phone app should <strong>not be
+      bridged</strong> to the watch
+      </li>
+
+      <li>Setting a dismissal ID so notification dismissals are synced across
+      devices
+      </li>
+    </ul>
+
+    <h2 id="preventing_bridging_with_the_bridging_mode_feature">
+      Preventing Bridging with the Bridging Mode Feature
+    </h2>
+
+    <p>
+      To prevent bridging of notifications from a phone app, you can use a
+      entry in the manifest file of the watch app (e.g. the standalone watch
+      app), as follows:
+    </p>
+
+    <pre>
+com.google.android.wearable.notificationBridgeMode
+</pre>
+    <p>
+      Setting that entry to <code>NO_BRIDGING</code> will prevent bridging:
+    </p>
+
+    <pre>
+&lt;meta-data android:name="com.google.android.wearable.notificationBridgeMode"
+                   android:value="NO_BRIDGING" /&gt;
+</pre>
+    <p>
+      The default bridging behavior occurs if you do not include the entry or
+      if you specify a value of <code>BRIDGING</code> instead of
+      <code>NO_BRIDGING</code>.
+    </p>
+
+    <h3 id="existing_method_of_preventing_bridging">
+      Existing method of preventing bridging
+    </h3>
+
+    <p>
+      An existing way to prevent bridging is with the
+      <code>Notification.Builder</code> class; specify <code>true</code> in the
+      <a href=
+      "{@docRoot}reference/android/app/Notification.Builder.html#setLocalOnly(boolean)">
+      setLocalOnly</a> method.
+    </p>
+
+    <p>
+      However, this way to prevent bridging may not be preferable. For example,
+      if a user installs a phone app but not the corresponding watch app, the
+      <code>setLocalOnly</code> method could prevent the bridging of helpful
+      notifications. Additionally, users may have multiple paired watches and
+      the watch app may not be installed on all of them.
+    </p>
+
+    <p>
+      Thus, if bridging should be prevented <strong>when</strong> the watch app
+      is installed, use the <a href=
+      "#preventing_bridging_with_the_bridging_mode_feature">Bridging mode
+      feature</a>.
+    </p>
+
+    <h2 id="using_a_dismissal_id_to_sync_notification_dismissals">
+      Using a Dismissal ID to Sync Notification Dismissals
+    </h2>
+
+    <p>
+      If you prevent bridging with the Bridging mode feature, dismissals
+      (cancellations) of notifications are not synced across a user's devices.
+      However, the following methods of the <a href=
+      "{@docRoot}reference/android/support/v4/app/NotificationCompat.WearableExtender.html">
+      NotificationCompat.WearableExtender</a> class enable you to use dismissal
+      IDs:
+    </p>
+
+    <pre>
+public WearableExtender setDismissalId(String dismissalId)
+public String getDismissalId()
+</pre>
+    <p>
+      To enable a dismissal to be synced, use the <code>setDismissalId()</code>
+      method. For each notification, pass a globally unique ID, as a string,
+      when you call the <code>setDismissalId()</code> method. When the
+      notification is dismissed, all other notifications with the same
+      dismissal ID are dismissed on the watch(es) and on the companion phone.
+      To retrieve a dismissal ID, use <code>getDismissalId()</code>.
+    </p>
+
+    <p>
+      In the following example, syncing of dismissals is enabled because a
+      globally unique ID is specified for a new notification:
+    </p>
+
+    <pre>
+NotificationCompat.WearableExtender wearableExtender =
+new NotificationCompat.WearableExtender().setDismissalId(“abc123”);
+Notification notification = new NotificationCompat.Builder(context)
+&lt;set other fields&gt;
+.extend(wearableExtender)
+.build();
+</pre>
+    <p>
+      Dismissal IDs work if a watch is paired to an Android phone, but not if a
+      watch is paired to an iPhone.
+    </p>
diff --git a/docs/html/wear/preview/features/complications.jd b/docs/html/wear/preview/features/complications.jd
index 3d88f3a..155f733 100644
--- a/docs/html/wear/preview/features/complications.jd
+++ b/docs/html/wear/preview/features/complications.jd
@@ -1,7 +1,797 @@
 page.title=Watch Face Complications
-meta.tags="wear", "wear-preview", "complications"
-page.tags="wear"
+meta.keywords="wear-preview"
+page.tags="wear-preview"
+page.image=images/cards/card-n-sdk_2x.png
 
 @jd:body
 
-<p>stub</p>
\ No newline at end of file
+    <div id="qv-wrapper">
+      <div id="qv">
+        <ol>
+          <li>
+            <a href=
+            "#adding_complications_to_a_watch_face">Adding Complications to a Watch Face</a>
+          </li>
+          <li>
+            <a href=
+            "#exposing_data_to_complications">Exposing Data to Complications</a>
+          </li>
+          <li>
+            <a href=
+            "#using_complication_types">Using Complication Types</a>
+          </li>
+          <li>
+            <a href=
+            "#using_fields_for_complication_data">Using Fields for Complication Data</a>
+          </li>
+          <li>
+            <a href=
+            "#api_additions">API Additions</a>
+          </li>
+        </ol>
+      </div>
+    </div>
+
+    <p>
+      A complication is a feature of a watch face <a href=
+      "https://en.wikipedia.org/wiki/Complication_(horology)">beyond hours and
+      minutes</a>. For example, a battery indicator is a complication.
+    </p>
+
+    <p>
+      The Complications API is for both watch faces and data provider apps.
+    </p>
+
+    <p>
+      Watch faces can display extra information without needing code for
+      getting the underlying data. Data providers can supply data (such as
+      battery level, weather, or step-count data) to any watch face using the
+      API.
+    </p>
+
+    <p>
+      For creating or modifying watch faces, see <a href=
+      "#adding_complications_to_a_watch_face">Adding complications to a watch
+      face</a>.
+    </p>
+
+    <p>
+      For writing apps that provide data to watch faces, see <a href=
+      "#exposing_data_to_complications">Exposing data to complications</a>.
+    </p>
+
+    <p>
+      Along with reviewing this page, download the Android Wear 2.0 Preview
+      Reference and review the <a href="#api_additions">API additions</a> in
+      the Javadoc for complications.
+    </p>
+
+    <p>
+      Apps that provide data to watch faces for complications are called
+      "complication data providers." These apps lack control over how their
+      data is rendered. The consuming watch faces are responsible for drawing
+      the complications.
+    </p>
+
+    <p>
+      As indicated in the diagram below, Android Wear mediates the flow of data
+      from providers to watch faces.
+    </p>
+
+    <img src="../images/complications-data-flow.png" width="" alt="Complications data flow" title=
+    "Complications data flow">
+
+    <p>
+      Through this process, watch faces can receive complication data of
+      <a href="#using_complication_types">various types</a> (e.g. small text
+      data or icon data) and then display it.
+    </p>
+
+    <h2 id="adding_complications_to_a_watch_face">
+      Adding Complications to a Watch Face
+    </h2>
+
+    <p>
+      Watch face developers can receive complication data and enable users to
+      select providers for that data. Additionally, Android Wear provides a
+      <a href="#allowing_users_to_choose_data_providers">user interface for
+      data source selection</a>.
+    </p>
+
+    <h3 id="receiving_data_and_rendering_complications">
+      Receiving data and rendering complications
+    </h3>
+
+    <p>
+      To start receiving complication data, a watch face calls
+      <code>setActiveComplications</code> within the
+      <code>WatchFaceService.Engine</code> class with a list of watch face
+      complication IDs. A watch face creates these IDs to uniquely identify
+      slots on the watch face where complications can appear, and passes them
+      to the <code>createProviderChooserIntent</code> method (of the
+      <code>ProviderChooserIntent</code> class) to allow the user to decide
+      which complication should go in which slot.
+    </p>
+
+    <p>
+      Complication data is delivered via the
+      <code>onComplicationDataUpdate</code> (of
+      <code>WatchFaceService.Engine</code>) callback.
+    </p>
+
+    <p>
+      The watch face may render the data as desired as long as the expected
+      fields are represented; the required fields should always be included and
+      the data should be represented in some way. Depending on the type, some
+      of the optional fields should also be included (see the Notes column in
+      the <a href="#types_and_fields">table</a> below).
+    </p>
+
+    <p>
+      We provide design guidelines for our style, as a suggestion for standard
+      complications, but developers can use their own styles or incorporate the
+      data into the watch face in different ways.
+    </p>
+
+    <h3 id="allowing_users_to_choose_data_providers">
+      Allowing users to choose data providers
+    </h3>
+
+    <p>
+      Android Wear provides a user interface (via an Activity) that enables
+      users to choose providers for a particular complication. Watch faces can
+      call the <code>createProviderChooserIntent</code> method to obtain an
+      intent that can be used to show the chooser interface.
+    </p>
+
+    <p>
+      This intent must be used with <code>startActivityForResult</code>. When a
+      watch face calls <code>createProviderChooserIntent</code>, the watch face
+      supplies a watch face complication ID and a list of supported types. The
+      types should be listed in order of preference, usually with types
+      offering more information, such as ranged value, given higher preference.
+    </p>
+
+    <p>
+      When the user selects a data provider, the configuration is saved
+      automatically; nothing more is required from the watch face.
+    </p>
+
+    <h3 id="user_interactions_with_complications">
+      User interactions with complications
+    </h3>
+
+    <p>
+      Providers can specify an action that occurs if the user taps on a
+      complication, so it should be possible for most complications to be
+      tappable. This action will be specified as a <code>PendingIntent</code>
+      included in the <code>ComplicationData</code> object. The watch face is
+      responsible for detecting taps on complications, and should fire the
+      pending intent when a tap occurs.
+    </p>
+
+    <p>
+      It may be infeasible to make some complications tappable (e.g., in the
+      case of a complication that fills the entire background of the watch
+      face), but it is expected that watch faces accept taps on complications
+      where possible.
+    </p>
+
+    <h2 id="exposing_data_to_complications">
+      Exposing Data to Complications
+    </h2>
+
+    <p>
+      A complication data provider is a service that extends
+      <code>ComplicationProviderService</code>. To respond to update requests
+      from the system, your data provider must implement the
+      <code>onComplicationUpdate</code> method of the
+      <code>ComplicationProviderService</code> class. This method will be
+      called when the system wants data from your provider - this could be when
+      a complication using your provider becomes active, or when a fixed amount
+      of time has passed. A <code>ComplicationManager</code> object is passed
+      as a parameter to the <code>onComplicationUpdate</code> method, and can
+      be used to send data back to the system.
+    </p>
+
+    <p>
+      In your app's manifest, declare the service and add an intent filter for
+      the following:
+    </p>
+
+    <pre>
+android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST
+</pre>
+    <p>
+      The service's manifest entry should also include an
+      <code>android:icon</code> attribute. The provided icon should be a
+      single-color white icon. This icon should represent the provider and will
+      be shown in the provider chooser.
+    </p>
+
+    <p>
+      Include metadata to specify the supported types, update period, and
+      configuration action, if required; for details, download the Android Wear
+      2.0 Preview Reference and see the keys listed for the
+      <code>ComplicationProviderService</code> class (in the Javadoc).
+    </p>
+
+    <h3 id="update_period">
+      Update period
+    </h3>
+
+    <p>
+      Your provider can specify an update period using the following metadata
+      key in the manifest:
+    </p>
+
+    <pre>
+android.support.wearable.complications.UPDATE_PERIOD_SECONDS
+</pre>
+    <p>
+      This should be set to as long a time as possible, as updating too
+      frequently may impact battery life. Note that update requests are not
+      guaranteed to be sent with this frequency. The system does apply a
+      minimum update period, and in particular, updates requests may come less
+      often when the device is in ambient mode or is not being worn.
+    </p>
+
+    <p>
+      You can alternatively use a "push style" to send updates, rather than
+      requesting updates on a fixed schedule. To do so, you can set the update
+      period to 0 so scheduled update requests do not occur (or set it to a
+      non-zero value) and use a <code>ProviderUpdateRequester</code> to trigger
+      calls to <code>onComplicationUpdate</code> as required.
+    </p>
+
+    <h3 id="provider_configuration">
+      Provider configuration
+    </h3>
+
+    <p>
+      If required, a provider can include a configuration activity that is
+      shown to the user when the user chooses a data provider. To include the
+      configuration activity, include a metadata item in the provider service
+      declaration in the manifest with a key of the following:
+    </p>
+
+    <p>
+      <code>android.support.wearable.complications.PROVIDER_CONFIG_ACTION</code>
+    </p>
+
+    <p>
+      The value can be an action of your choice.
+    </p>
+
+    <p>
+      Then create the configuration activity with an intent filter for that
+      action. The configuration activity must reside in the same package as the
+      provider.
+    </p>
+
+    <p>
+      The configuration activity must return <code>RESULT_OK</code> or
+      <code>RESULT_CANCELED</code>, to tell the system whether the provider
+      should be set.
+    </p>
+
+    <p>
+      The configuration activity may also be used as an opportunity to request
+      any permissions required by the provider.
+    </p>
+
+    <p>
+      For details, download the Android Wear 2.0 Preview Reference, containing
+      the Javadoc, and see the following in the
+      <code>ComplicationProviderService</code> class:
+    </p>
+
+    <pre>
+METADATA_KEY_PROVIDER_CONFIG_ACTION
+</pre>
+    <h2 id="using_complication_types">
+      Using Complication Types
+    </h2>
+
+    <p>
+      Complication types determine the kinds of data shown in a complication.
+      For example, the <code>SHORT_TEXT</code> type is available when the key
+      data is a short string. In the example of the <code>SHORT_TEXT</code>
+      type, optional data are an icon and a short title.
+    </p>
+
+    <p>
+      Data providers use these complication types differently from the way
+      watch face providers use these types:
+    </p>
+
+    <ul>
+      <li>A data provider chooses the types of complication data to supply. For
+      example, a step count provider might support the
+      <code>RANGED_VALUE</code> and <code>SHORT_TEXT</code> types, whereas a
+      "next meeting" provider might support the <code>SHORT_TEXT</code> and
+      <code>LONG_TEXT</code> types. The data provider also chooses which
+      optional fields of those types to include.
+      </li>
+
+      <li>A watch face provider chooses how many complication types to support.
+      For example, a round complication on a watch face might support the
+      <code>SHORT_TEXT</code>, <code>ICON</code> and <code>RANGED_VALUE</code>
+      types, whereas a gauge on the watch face might support only the
+      <code>RANGED_VALUE</code> type.
+      </li>
+    </ul>
+
+    <p>
+      A <code>ComplicationData</code> object will always have a single
+      complication type. Each complication type has required and optional
+      fields. Generally, a required field represents the primary piece of data;
+      most types take their name from the required field.
+    </p>
+
+    <p>
+      A given type may include different sets of fields. For example,
+      <code>SHORT_TEXT</code> may be just a single piece of text, or a title
+      and text, or an icon and text. A complication that supports a given type
+      must be able to display all the expected variants. However, some optional
+      fields do not need to be displayed (see the <em>Notes</em> column of the
+      table below). For example, the Short title field of the
+      <code>RANGED_VALUE</code> type is not required so that, for example,
+      gauges can be shown without including text.
+    </p>
+
+
+    <h3 id="types_and_fields">
+      Types and fields
+    </h3>
+
+    <p>
+      The following table describes the types and fields of the
+      <code>ComplicationData</code> object.
+    </p>
+
+    <table>
+      <tr>
+        <th scope="col">
+          Type
+        </th>
+        <th scope="col">
+          Required fields
+        </th>
+        <th scope="col">
+          Optional fields
+        </th>
+        <th scope="col">
+          Notes
+        </th>
+      </tr>
+
+      <tr>
+        <td>
+          SHORT_TEXT
+        </td>
+        <td>
+          Short text
+        </td>
+        <td>
+          IconShort title
+        </td>
+        <td>
+          Exactly one of Icon/Short title is expected to be shown if either or
+          both are provided.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          LONG_TEXT
+        </td>
+        <td>
+          Long text
+        </td>
+        <td>
+          Long titleIcon*Small image
+        </td>
+        <td>
+          Title is expected to be shown if provided.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          RANGED_VALUE
+        </td>
+        <td>
+          ValueMin valueMax value
+        </td>
+        <td>
+          IconShort textShort title
+        </td>
+        <td>
+          Optional fields are not guaranteed to be displayed. Uses include for
+          numerical data within bounds, such as for a percentage.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          ICON
+        </td>
+        <td>
+          Icon
+        </td>
+        <td>
+        </td>
+        <td>
+          Used when text is not needed.The icon is expected to be single-color,
+          and may be tinted by the watch face.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          SMALL_IMAGE
+        </td>
+        <td>
+          Small image
+        </td>
+        <td>
+        </td>
+        <td>
+          A small image has one of two styles: <em>photo style</em> or <em>icon
+          style</em>. Photo style means it should fill the space and can be
+          cropped; icon style means it should not be cropped and may be padded.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          LARGE_IMAGE
+        </td>
+        <td>
+          Large image
+        </td>
+        <td>
+        </td>
+        <td>
+          This image is expected to be large enough to fill the watch face.
+        </td>
+      </tr>
+    </table>
+
+    <p>
+      In addition, the following two types have no fields. These two types may
+      be sent for any complication slot and do not need to be included in a
+      list of supported types:
+    </p>
+
+    <table>
+      <tr>
+        <th scope="col">
+          Type
+        </th>
+        <th scope="col">
+          Required fields
+        </th>
+        <th scope="col">
+          Optional fields
+        </th>
+        <th scope="col">
+          Notes
+        </th>
+      </tr>
+
+      <tr>
+        <td>
+          NOT_CONFIGURED
+        </td>
+        <td>
+          None
+        </td>
+        <td>
+          None
+        </td>
+        <td>
+          Sent when a provider has not yet been chosen for a complication.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          EMPTY
+        </td>
+        <td>
+          None
+        </td>
+        <td>
+          None
+        </td>
+        <td>
+          Sent by a provider when there is no data to display in a
+          complication, or sent by the system when nothing should be shown in a
+          complication.
+        </td>
+      </tr>
+    </table>
+
+    <h3 id="examples_of_complication_types">
+      Examples of Complication Types
+    </h3>
+    <p>
+      The following shows examples of complication types:
+    </p>
+
+    <img src="../images/complication-type-exs.png" width=""
+    alt="Complication types" title="Complications types - examples">
+
+    <h2 id="using_fields_for_complication_data">
+      Using Fields for Complication Data
+    </h2>
+
+    <p>
+      The fields of a <code>ComplicationData</code> object have different
+      functions. For example, a text field contains the primary data while a
+      title field is descriptive; a step count complication might have a text
+      field value of "2,543" with a title field value of "steps."
+    </p>
+
+    <p>
+      The following table contains descriptions of the fields in a
+      <code>ComplicationData</code> object. The fields may or may not be
+      populated, depending on the complication type.
+    </p>
+
+    <table>
+      <tr>
+        <th scope="col">
+          Field
+        </th>
+        <th scope="col">
+          Description
+        </th>
+      </tr>
+
+      <tr>
+        <td>
+          Short text
+        </td>
+        <td>
+          Primary text field for small complications. Should not exceed 7
+          characters.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Short title
+        </td>
+        <td>
+          Descriptive field for small complications.Should not exceed 7
+          characters.May only be meaningful in combination with <em>Short
+          text</em>.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Long text
+        </td>
+        <td>
+          Primary data field for large, text-based complications.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Long title
+        </td>
+        <td>
+          Descriptive field for large, text-based complications.May only be
+          meaningful in combination with <em>Long text</em>.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Value
+        </td>
+        <td>
+          A numerical (float) representation of the data.Expected to be
+          depicted relative to the bounds the <em>Min value</em> and <em>Max
+          value</em> fields (but not required to be between those bounds).
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Min value
+        </td>
+        <td>
+          The lower bound for the range within which <em>Value</em> should be
+          depicted.Only meaningful in combination with <em>Value</em> and
+          <em>Max value</em>.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Max value
+        </td>
+        <td>
+          The upper bound for the range within which <em>value</em> should be
+          depicted.Only meaningful in combination with <em>Value</em> and
+          <em>Min value</em>.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Icon
+        </td>
+        <td>
+          A single-color image representing the data or the source of the
+          data.Must be tintable.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Small image
+        </td>
+        <td>
+          A small image to represent the data or the source of the data.May be
+          full color.Not expected to fill the entire watch face.
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          Large image
+        </td>
+        <td>
+          An image with sufficient resolution to fill the watch face.May be
+          full color.
+        </td>
+      </tr>
+    </table>
+
+    <h3 id="providing_time-dependent_values">
+      Providing time-dependent values
+    </h3>
+
+    <p>
+      Some complications need to display a value that relates to the current
+      time. Examples include the current date, the time until the next meeting,
+      or the time in another time zone.
+    </p>
+
+    <p>
+      Providers of such data should not need to update a complication every
+      second/minute to keep those values up to date. Instead, they can specify
+      the values as relative to the current date or time.
+    </p>
+
+    <p>
+      Providers can use the builders in the <code>ComplicationText</code> class
+      to create these time-dependent values.
+    </p>
+
+    <h2 id="api_additions">
+      API Additions
+    </h2>
+
+    <p>
+      The Complications API includes the following new classes in the Wearable
+      Support Library:
+    </p>
+
+    <ul>
+      <li>
+        <code>ComplicationData</code>
+        <ul>
+          <li>Parcelable (using a Bundle internally); immutable
+          </li>
+
+          <li>Represents all types of complication data
+          </li>
+
+          <li>Includes a Builder for instance creation
+          </li>
+        </ul>
+      </li>
+
+      <li>
+        <code>ComplicationText</code>
+        <ul>
+          <li>Used to supply text-based values in a
+          <code>ComplicationData</code> object
+          </li>
+
+          <li>Includes options for time-dependent values, whose text value
+          depends on the current time
+          </li>
+        </ul>
+      </li>
+
+      <li>
+        <code>ComplicationProviderService</code>
+        <ul>
+          <li>Extends <code>Service</code> and includes callback methods to
+          respond to the complication system
+          </li>
+
+          <li>Callback methods are all called on the main thread
+          </li>
+        </ul>
+      </li>
+
+      <li>
+        <code>ComplicationManager</code>
+        <ul>
+          <li>A wrapper for the complication manager service, for use by
+          providers
+          </li>
+
+          <li>Allows providers to send complication data to the system
+          </li>
+        </ul>
+      </li>
+
+      <li>
+        <code>ProviderChooserIntent</code>
+        <ul>
+          <li>Non-instantiable utility class
+          </li>
+
+          <li>Includes a method that a watch face can call for starting a
+          provider chooser (to allow a user to configure complications)
+          </li>
+        </ul>
+      </li>
+
+      <li>
+        <code>ProviderInfoRetriever</code>
+        <ul>
+          <li>Can be used (by watch face configuration activities) to retrieve
+          the current data provider information (app, provider name, icon) for
+          all complications belonging to a watch face
+          </li>
+        </ul>
+      </li>
+
+      <li>
+        <code>ProviderUpdateRequester</code>
+        <ul>
+          <li>Can be used by data provider apps to trigger calls to
+          <code>onComplicationUpdated</code> in their provider service, to
+          enable the push of updates
+          </li>
+        </ul>
+      </li>
+    </ul>
+
+    <p>
+      Additionally, the <code>WatchFaceService.Engine</code> class contains the
+      following new methods:
+    </p>
+
+    <ul>
+      <li>
+        <code>setActiveComplications</code>
+        <ul>
+          <li>Should be called by the watch face to tell the
+          <code>ComplicationManager</code> object what complication slots are
+          available and what types are supported
+          </li>
+        </ul>
+      </li>
+
+      <li>
+        <code>onComplicationDataUpdate</code>
+        <ul>
+          <li>Called by the <code>ComplicationManager</code> object to send
+          complication data to the watch face
+          </li>
+        </ul>
+      </li>
+    </ul>
diff --git a/docs/html/wear/preview/features/ime.jd b/docs/html/wear/preview/features/ime.jd
index dc4adf1..4ee507c 100644
--- a/docs/html/wear/preview/features/ime.jd
+++ b/docs/html/wear/preview/features/ime.jd
@@ -4,4 +4,133 @@
 
 @jd:body
 
-<p>stub</p>
\ No newline at end of file
+
+<div id="qv-wrapper">
+<div id="qv">
+
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#creating">Creating an Input Method for Wear</a></li>
+      <li><a href="#invoking">Invoking IME</a></li>
+      <li><a href="#considerations">General IME Considerations</a></li>
+      <li><a href="#test">Testing your IME</a></li>
+    </ol>
+
+</div>
+</div>
+
+
+<p>Wear 2.0 supports input methods beyond voice by extending the Android 
+Input Method Framework (IMF) to Android Wear. IMF allows for virtual, on-screen
+ keyboards and other input methods to be used for text entry. The IMF APIs used 
+ for Wear devices are the same as other form factors, though usage is slightly 
+ different due to limited screen real estate.</p>
+
+<p>Wear 2.0 comes with the system default Input Method Editor (IME) 
+and opens up the IMF APIs for third-party developers to create custom input 
+methods for Wear.
+</p>
+
+
+<h2 id="creating">Creating an Input Method for Wear</h2>
+
+<p>To create an input method for Wear, 
+see <a href="http://developer.android.com/guide/topics/text/creating-input-method.html">Creating an Input Method</a>.
+</p>
+
+<h2 id="invoking">Invoking IME</h2>
+If you are developing an IME for Wear, remember that the 
+feature is supported only on Android 6.0 (API level 23) and higher versions of 
+the platform. 
+To ensure that your IME can only be installed on Wearables that support input 
+methods beyond voice, add the following to your application's manifest:
+<pre>
+&lt;uses-sdk android:minSdkVersion="23" />
+</pre>
+This indicates that your application requires Android 6.0 or higher. 
+For more information, see <a href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a>
+ and the documentation for the <a href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk></a> 
+element.
+<p>
+To control how your application is filtered from devices that do not support Wear
+IMEs (for example, on Phone), add the following to your application's manifest:
+</p>
+<pre>
+&lt;uses-feature android:required="true" android:name="android.hardware.type.watch" />
+</pre>
+
+<p>Wear provides user settings on the watch that lets the user to enable multiple
+ IMEs from the list of installed IMEs. Once the users enable your IME, they 
+ can invoke your IME from:</p>
+<ul>
+<li>A notification or an app using the 
+<a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">RemoteInput</a></code> API.</li>
+<li>Wear apps with an 
+<a href="http://developer.android.com/reference/android/widget/EditText.html">EditText</a>
+ field. Touching a text field places the cursor in the field and automatically 
+ displays the IME on focus.</li>
+</ul>
+
+
+<h2 id="considerations">General IME Considerations</h2>
+
+<p>Here are some things to consider when implementing IME for wear:</p>
+
+<ul>
+<li><strong>Set Default Action</strong>
+<p>
+<a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a> 
+and Wear apps expect only single-line text entry. The ENTER key should always trigger
+ a call to <a href="http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html#sendDefaultEditorAction(boolean)">sendDefaultEditorAction</a>,
+  which causes the app to dismiss the keyboard and continue on to the next step 
+  or action.</p>
+</li>
+
+<li><Strong>Use full screen mode IME</strong>
+<p>
+Most on-screen input methods will consume most of the screen, leaving very little
+ of the app visible; hence, we discourage Android Wear apps from presenting a 
+ visible {@code EditTextView}. Instead, a full-screen IME uses 
+ <a href="http://developer.android.com/reference/android/inputmethodservice/ExtractEditText.html">ExtractEditText</a>
+  to render its own view of the attached editor, also providing control over the
+   styling of this view. You can ignore all editor-related events that the IME 
+   doesn't generate.
+For more details on full-screen mode, see 
+<a href="http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html">InputMethodService</a>.
+</p>
+</li>
+
+<li><strong>Handle inputType flags</strong>
+<p>
+For privacy reasons, at a minimum you should handle the {@code inputType} 
+flag {@code TYPE_TEXT_VARIATION_PASSWORD} in your IME. When your IME is in 
+password mode, make sure that your keyboard is optimized for single key press 
+(auto spelling correction, auto completion and gesture input are disabled). 
+Most importantly, keyboard in password mode should support ASCII symbols 
+regardless of the input language.  For more details, see 
+<a href="http://developer.android.com/training/keyboard-input/style.html">Specifying The Input Method Type</a>.
+</p>
+</li>
+
+<li><strong>Provide a key for switching to the next input method</strong>
+<p>
+Android allows users to easily switch between all IMEs supported by the platform.
+ In your IME implementation, set the boolean 
+ <a href="http://developer.android.com/guide/topics/text/creating-input-method.html#Switching">supportsSwitchingToNextInputMethod = true</a>
+ to enable your IME to support switching mechanism 
+ (so that apps can switch to the next platform-supported IME).
+</p>
+</li>
+</ul>
+
+
+<h2 id="test">Test your IME</h2>
+
+<p>To test your IME, install the 
+<a href="https://drive.google.com/a/google.com/file/d/0ByOeMdiY1arvWUk5QXU1V0E3cFU/view?usp=sharing">Input Box</a>
+ app which has a simple <i><code>EditText</i></code> field. 
+ When responding to messages from chat apps, you can also use the IME on the 
+ watch.</p>
+
+
+
diff --git a/docs/html/wear/preview/features/ui-nav-actions.jd b/docs/html/wear/preview/features/ui-nav-actions.jd
index ad61b98..587f88f 100644
--- a/docs/html/wear/preview/features/ui-nav-actions.jd
+++ b/docs/html/wear/preview/features/ui-nav-actions.jd
@@ -4,4 +4,183 @@
 
 @jd:body
 
-<p>stub</p>
\ No newline at end of file
+<div id="qv-wrapper">
+<div id="qv">
+
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#create a drawer">Create a Drawer Layout</a></li>
+      <li><a href="#initialize">Initialize the Drawer List</a></li>
+      <li><a href="#creating">Create a Custom View Drawer</a></li>
+      <li><a href="#listen to events">Listen for Drawer Events</a></li>
+      <li><a href=#peeking">Peeking Drawers</a></li>
+    </ol>
+
+   <h2>You should also read</h2>
+   <ul>
+   <li><a href="https://spec.googleplex.com/wear/components/navigation-drawer.html">
+   Navigation Drawer Design</a> </li>
+   <li>
+   <a href="https://spec.googleplex.com/wear/components/action-drawer.html">
+   Action Drawer Design</a>
+   </ul>
+
+  <h2>Samples</h2>
+  <ol>
+
+  </ol>
+
+</div>
+</div>
+<p>Wear 2.0 adds interactive navigation and action drawers that users can pull
+from the top or bottom edge of the window, respectively. The navigation drawer
+appears at the top of the screen and lets users jump to different views within
+the app, similar to the navigation drawer on a phone. The action drawer appears
+at the bottom of the screen and provides context-specific actions for the user,
+similar to the action bar on a phone. These drawers are accessible when the user
+swipes from the top or bottom of the screen, and they peek when users scroll in
+the opposite direction. </p>
+<div class="cols">
+<div class="col-2of6">
+  <img src="{@docRoot}wear/preview/images/nav_drawer.gif" alt="" style="padding:.5em">
+  <p class="img-caption">
+      <strong>Figure 1.</strong> Navigation and Action Drawers.
+    </p>
+</div>
+<div class="col-2of6">
+  <img src="{@docRoot}wear/preview/images/action_drawer.gif" alt="" style="padding:.5em;"">
+</div>
+</div>
+<div class="cols">
+
+<p>This lesson describes how to implement action and navigation drawers in your
+app using the {@code WearableDrawerLayout} APIs.
+</p>
+
+<h2 id="create a drawer">Create a Drawer Layout</h2>
+To add an action or a navigation drawer, declare your user interface with a
+<code>WearableDrawerLayout</code> object as the root view of your layout.  Inside
+ the <code>WearableDrawerLayout</code>, add one view that contains the main content
+  for the screen (your primary layout when the drawer is hidden) and additional
+  child views that contain the contents of the drawer.</h2>
+<p>For example, the following layout uses a <code>WearableDrawerLayout</code> with
+ three child views: a <code>FrameLayout</code> to contain the main content, a
+ navigation drawer, and an action drawer.</p>
+
+<pre>
+&lt;android.support.wearable.view.drawer.WearableDrawerLayout
+    android:id="@+id/drawer_layout"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:deviceIds="wear">
+
+    &lt;FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:id="@+id/content_frame"/>
+
+    &lt;android.support.wearable.view.drawer.WearableNavigationDrawer
+        android:id="@+id/top_navigation_drawer"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+    &lt;android.support.wearable.view.drawer.WearableActionDrawer
+        android:id="@+id/bottom_action_drawer"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+&lt;/android.support.wearable.view.drawer.WearableDrawerLayout>
+
+</pre>
+<h2 id="initialize">Initialize the Drawer List</h2>
+<p>One of the first things you need to do in your activity is to initialize the
+drawers list of items. You should implement {@code WearableNavigationDrawerAdapter}
+to populate the navigation drawer contents. To populate the action drawer with
+a list of actions, inflate an XML file into the Menu (via MenuInflater).</p>
+
+<p>The following code snippet shows how to initialize the contents of your drawers:
+</p>
+<pre>
+public class MainActivity extends  WearableActivity implements
+WearableActionDrawer.OnMenuItemClickListener{
+    private WearableDrawerLayout mwearableDrawerLayout;
+    private WearableNavigationDrawer mWearableNavigationDrawer;
+    private WearableActionDrawer mWearableActionDrawer;
+    
+    ...
+    
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+        
+        ......
+        
+        
+        // Main Wearable Drawer Layout that wraps all content
+        mWearableDrawerLayout = (WearableDrawerLayout) findViewById(R.id.drawer_layout);
+        
+        // Top Navigation Drawer
+        mWearableNavigationDrawer = (WearableNavigationDrawer) findViewById(R.id.top_navigation_drawer);
+        mWearableNavigationDrawer.setAdapter(new YourImplementationNavigationAdapter(this));
+
+        // Peeks Navigation drawer on the top.
+        mWearableDrawerLayout.peekDrawer(Gravity.TOP);
+        
+        // Bottom Action Drawer
+        mWearableActionDrawer = (WearableActionDrawer) findViewById(R.id.bottom_action_drawer);
+
+        // Populate Action Drawer Menu
+        Menu menu = mWearableActionDrawer.getMenu();
+        MenuInflater inflater = getMenuInflater();
+        inflater.inflate(R.menu.action_drawer_menu, menu);
+        mWearableActionDrawer.setOnMenuItemClickListener(this);
+
+        // Peeks action drawer on the bottom.
+        mWearableDrawerLayout.peekDrawer(Gravity.BOTTOM);
+    }
+}
+
+</pre>
+<h2 id="creating">Create a Custom View Drawer</h2>
+
+<p>To use custom views in drawers,  add  <code>WearableDrawerView</code> to  the
+<code>WearableDrawerLayout</code>. To set the contents of the drawer, call <code>
+<a href="https://x20web.corp.google.com/~psoulos/docs/reference/android/support/wearable/view/drawer/WearableDrawerView.html#setDrawerContent(android.view.View)">setDrawerContent(View)</a></code>
+ instead of manually adding the view to the hierarchy. You must also specify the
+  drawer position with the <code>android:layout_gravity</code> attribute. </p>
+<p> The following example specifies a top drawer:</p>
+<pre>
+&lt;android.support.wearable.view.drawer.WearableDrawerLayout&gt;
+    &lt;FrameLayout 
+    android:id=”@+id/content” /&gt;
+
+    &lt;WearableDrawerView
+        android:layout_width=”match_parent”
+        andndroid:layout_height=”match_parent”
+        android:layout_gravity=”top”&gt;
+        &lt;FrameLayout 
+            android:id=”@+id/top_drawer_content” /&gt;
+    &lt;/WearableDrawerView&gt;
+&lt;/android.support.wearable.view.drawer.WearableDrawerView&gt;
+
+</pre>
+
+<h2 id="listen to events">Listen for Drawer Events</h2>
+<p>To listen for drawer events, call {@code setDrawerStateCallback()}on your
+{@code WearableDrawerLayout} and pass it an implementation of
+{@code WearableDrawerLayout.DrawerStateCallback}. This interface provides callbacks
+ for drawer events such as <code>onDrawerOpened()</code>,
+ <code>onDrawerClosed(),</code> and <code>onDrawerStatechanged()</code>.</p>
+
+<h2 id="peeking">Peeking Drawers</h2>
+<p>To  set the drawers to temporarily appear, call  <code>peekDrawer()</code> on
+your {@code WearableDrawerLayout} and pass it the {@code Gravity} of the drawer.
+ This feature is especially useful because it allows immediate access to the
+ alternate drawer views or actions associated with it. </p>
+
+<pre>{@code mWearableDrawerLayout.peekDrawer</code>(<code>Gravity.BOTTOM);}</pre>
+
+<p>You can also call {@code setPeekContent()} on your drawer to display a custom
+ view when the drawer is peeking.</p>
diff --git a/docs/html/wear/preview/images/action_drawer.gif b/docs/html/wear/preview/images/action_drawer.gif
new file mode 100644
index 0000000..b823137
--- /dev/null
+++ b/docs/html/wear/preview/images/action_drawer.gif
Binary files differ
diff --git a/docs/html/wear/preview/images/complication-type-exs.png b/docs/html/wear/preview/images/complication-type-exs.png
new file mode 100644
index 0000000..d6fe890
--- /dev/null
+++ b/docs/html/wear/preview/images/complication-type-exs.png
Binary files differ
diff --git a/docs/html/wear/preview/images/complications-data-flow.png b/docs/html/wear/preview/images/complications-data-flow.png
new file mode 100644
index 0000000..7fa43f2
--- /dev/null
+++ b/docs/html/wear/preview/images/complications-data-flow.png
Binary files differ
diff --git a/docs/html/wear/preview/images/nav_drawer.gif b/docs/html/wear/preview/images/nav_drawer.gif
new file mode 100644
index 0000000..1c3b1dc
--- /dev/null
+++ b/docs/html/wear/preview/images/nav_drawer.gif
Binary files differ
diff --git a/docs/html/wear/preview/index.jd b/docs/html/wear/preview/index.jd
index 3f3a30a..3024654 100644
--- a/docs/html/wear/preview/index.jd
+++ b/docs/html/wear/preview/index.jd
@@ -17,7 +17,7 @@
   })
 </script>
 
-<section class="dac-expand dac-hero dac-light" style="background-color:#DCEDC8">
+<section class="dac-expand dac-hero dac-light" style="background-color:#FFFFFF">
   <div class="wrap" style="max-width:1100px;margin-top:0">
     <div class="cols dac-hero-content" style="padding-bottom:1em;">
 
diff --git a/docs/html/wear/preview/program.jd b/docs/html/wear/preview/program.jd
index 17df757..802e8a8 100644
--- a/docs/html/wear/preview/program.jd
+++ b/docs/html/wear/preview/program.jd
@@ -1,62 +1,255 @@
-page.title=Preview Program Overview
-page.metaDescription=Get your apps ready for the next version of Android.
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="wear", "wear-preview"
-page.tags="wear"
+page.title=Android Wear Preview Program Overview
+meta.keywords="wear-preview"
+page.tags="wear-preview"
+page.image=images/cards/card-n-sdk_2x.png
 
 @jd:body
 
+    <p>
+      Welcome to the Android Wear 2.0 Developer Preview! This program gives you
+      everything you need to get started with the next version of Android Wear.
+      It’s free, and you can get started right away by downloading the
+      Developer Preview resources.
+    </p>
 
-<p>
-  Welcome to the <strong>Wear Developer Preview</strong>, a program that
-  gives you everything you need to test and optimize your apps for the next
-  version of Android Wear. It's free, and you can get started right away just by
-  downloading the Wear Developer Preview tools.
-</p>
+    <h3 id="program_highlights">
+      Program Highlights
+    </h3>
 
+    <div style="background-color:#eceff1;padding:1em;">
+      <div class="wrap">
+        <div class="cols">
+          <div class="col-4of12">
+            <h5>
+              Hardware and emulator images
+            </h5>
 
+            <p>
+              Run and test your apps on a range of devices or on an emulator.
+            </p>
+          </div>
 
-<h2 id="timeline">Timeline and updates</h2>
+          <div class="col-4of12">
+            <h5>
+              Latest platform code
+            </h5>
 
-<p>
-  Lorem ipsum dolor sit amet, consul graecis gloriatur in cum. Porro noster ea
-  nam, omnes tollit facete ut vix. Ut nibh ancillae mei, unum mollis aliquid an
-  pri. No melius dignissim mel. An eum erant dicit volumus, ut eum animal
-  convenire.
-</p>
+            <p>
+              We’ll provide monthly updates during the preview, so you'll be
+              testing against the latest platform changes.
+            </p>
+          </div>
 
+          <div class="col-4of12">
+            <h5>
+              Priority for developer issues
+            </h5>
 
-<h2 id="preview_tools">What's in the Wear Developer Preview?</h2>
+            <p>
+              During the first several weeks, we'll give priority to
+              developer-reported issues, so test and give feedback as soon as
+              possible.
+            </p>
+          </div>
+        </div>
 
-<p>
-  Lorem ipsum dolor sit amet, consul graecis gloriatur in cum. Porro noster ea
-  nam, omnes tollit facete ut vix. Ut nibh ancillae mei, unum mollis aliquid an
-  pri. No melius dignissim mel. An eum erant dicit volumus, ut eum animal
-  convenire.
-</p>
+        <div class="cols">
+          <div class="col-4of12">
+            <h5>
+              New behaviors and capabilities
+            </h5>
 
+            <p>
+              Start work early to support new platform behaviors such as
+              complications and Material Design for Wear.
+            </p>
+          </div>
 
-<h2 id="how_to_get_started">How to get started</h2>
+          <div class="col-4of12">
+            <h5>
+              Feedback and support
+            </h5>
 
-<p>
-  To get started testing your app with the Wear Developer Preview:
-</p>
+            <p>
+              Report issues and give us feedback using our issue tracker.
+              Connect with other developers in the Wear Developer Community.
+            </p>
+          </div>
 
-<ol>
-  <li> Review the <a href="{@docRoot}wear/preview/api-overview.html">API
-  Overview</a> to
-  get an idea of what's new and how it affects your apps.</li>
-  <li>Download the preview API documentation and system images from the
-    <a href="{@docRoot}wear/preview/downloads.html">Preview Downloads</a>
-  </li>
-  <li> Set up your environment by following the instructions for <a
-  href="{@docRoot}wear/preview/start.html">Get Started with Wear Preview</a>
-  and configuring test devices.</li>
-  <li> Join the <a href="http://g.co/androidweardev">Android Wear
-  Developer Community</a> to get the latest news and connect with other
-  developers working with the new platform.</li>
-</ol>
+          <div class="col-4of12">
+          </div>
+        </div>
+      </div>
+    </div>
 
-<p>
-  Thank you for participating in the Android Wear Developer Preview program!
-</p>
+    <h2 id="timeline_and_updates">
+      Timeline and Updates
+    </h2>
+
+    <p>
+      The Android Wear 2.0 Developer Preview runs from 18 May 2016 until the
+      final Android Wear public release to OEMs, planned for Q4 2016.
+    </p>
+
+    <p>
+      At key development milestones, we'll deliver updates for your development
+      and testing environment. In general you can expect updates in
+      approximately 6-week intervals. The release milestones are:
+    </p>
+
+    <ul>
+      <li>Milestone 1 (initial release, alpha)
+      </li>
+
+      <li>Milestone 2 (incremental update, beta)
+      </li>
+
+      <li>Milestone 3 (incremental update, beta)
+      </li>
+
+      <li>Milestone 4 (final APIs and official SDK, Play publishing)
+      </li>
+
+      <li>Near-final system image
+      </li>
+
+      <li>Final release to OEMs
+      </li>
+    </ul>
+
+    <p>
+      Each update includes an updated support library, preview system images,
+      emulator, reference documentation, and API diffs.
+    </p>
+
+    <p>
+      The first three milestones provide an early test and development
+      environment to helps you identify compatibility issues in your current
+      apps and plan migration or feature work needed to target the new
+      platform. This is the priority period in which to give us your feedback
+      on features and APIs and file compatibility issues — for all of these,
+      please use the issue tracker. You can expect some API changes across
+      these updates.
+    </p>
+
+    <p>
+      At milestones 4 and 5 you'll have access to the final Android Wear 2.0
+      APIs and SDK to develop with, as well as near-final system images to test
+      system behaviors and features. Android Wear 2.0 will use the Android N
+      API level at this time. You can begin final compatibility testing of your
+      legacy apps and refine any new code that is using the Android Wear 2.0
+      APIs or features.
+    </p>
+
+    <p>
+      As you test and develop on Android Wear 2.0, we strongly recommend
+      keeping your development environment up-to-date as updates are released.
+      Updated preview images will be available that you can download and flash
+      manually.
+    </p>
+
+    <p>
+      We'll notify you when updates are available via the Android Developers
+      Blog, as well as via this site and the <a href=
+      "http://g.co/androidweardev">Android Wear Developer Community on G+</a>.
+    </p>
+
+    <h2 id="what's_in_the_android_wear_2_0_developer_preview">
+      What's in the Android Wear 2.0 Developer Preview
+    </h2>
+
+    <p>
+      The preview includes everything you need to test your existing apps on a
+      variety of hardware configurations.
+    </p>
+
+    <h3 id="developer_resources">
+      Developer resources
+    </h3>
+
+    <p>
+      You can download these components through the SDK Manager in <a href=
+      "{@docRoot}sdk/installing/adding-packages.html">Android Studio</a>. For
+      more information, see <a href=
+      "{@docRoot}wear/preview/downloads.html">Download and Test with a
+      Device</a>.
+    </p>
+
+    <ul>
+      <li>Android Wear 2.0 Developer Preview <strong>SDK/support
+      library</strong>
+      </li>
+
+      <li>Android Wear 2.0 Developer Preview <strong>emulator system
+      image</strong>
+      </li>
+    </ul>
+
+    <p>
+      We'll provide updates to these development tools at each milestone as
+      needed.
+    </p>
+
+    <h3 id="hardware_system_images">
+      Hardware system images
+    </h3>
+
+    <p>
+      You can download these hardware system images for Nexus devices from the
+      Downloads page:
+    </p>
+
+    <ul>
+      <li>LG Watch Urbane 2nd Edition “nemo”
+      </li>
+
+      <li>Huawei Watch “sturgeon”
+      </li>
+    </ul>
+
+    <h3 id="documentation_and_sample_code">
+      Documentation and sample code
+    </h3>
+
+    <p>
+      These documentation resources help you learn about the preview:
+    </p>
+
+    <ul>
+      <li>[comment placeholder] Get Started has step-by-step instructions for
+      setting up the SDK.
+      </li>
+
+      <li>Documentation of new APIs, including an API Overview, downloadable
+      API Reference, and developer guides on key features such as
+      complications, design patterns for Wear, and building standalone Android
+      Wear apps.
+      </li>
+
+      <li>Sample code that demonstrates how to implement [comment placeholder]
+      complications and other new features.
+      </li>
+    </ul>
+
+    <h3 id="support_resources">
+      Support Resources
+    </h3>
+
+    <p>
+      Use these support resources as you test and develop on the Android Wear
+      2.0 Developer Preview:
+    </p>
+
+    <ul>
+      <li>Wear Developer Preview Issue Tracker is your primary feedback
+      channel. You can report bugs, performance issues, and general feedback
+      through the issue tracker. You can also check for known issues and find
+      workaround steps.
+      </li>
+
+      <li>The <a href="http://g.co/androidweardev">Wear Developer Community</a>
+      is a Google+ community where you can connect with other developers
+      working with Android Wear. You can share observations or ideas or find
+      answers to questions about Android Wear.
+      </li>
+    </ul>
diff --git a/docs/html/wear/preview/start.jd b/docs/html/wear/preview/start.jd
index ff11700..04b9fe6 100644
--- a/docs/html/wear/preview/start.jd
+++ b/docs/html/wear/preview/start.jd
@@ -1,4 +1,4 @@
-page.title=Get Started with Wear Preview
+page.title=Get Started with the Android Wear 2.0 Developer Preview
 meta.keywords="wear-preview"
 page.tags="wear-preview"
 page.image=images/cards/card-n-sdk_2x.png
@@ -6,134 +6,205 @@
 @jd:body
 
 
-<div id="qv-wrapper">
-  <div id="qv">
-<ol>
-  <li><a href="#get-as22">Get Android Studio 2.2</a></li>
-  <li><a href="#get-sdk">Get the Wear Preview SDK</a></li>
-  <li><a href="#create-update">Update or Create a Project</a></li>
-</ol>
-  </div>
-</div>
+    <div id="qv-wrapper">
+      <div id="qv">
+        <ol>
+          <li>
+            <a href="#install_android_studio_and_the_latest_packages">Install
+            Android Studio and the Latest Packages</a>
+          </li>
 
-<p>
-  To develop apps for the Wear Developer Preview, you need to make some updates
-  to your developer environment. This page describes how to setup for testing
-  the Wear Preview APIs with your app.
-</p>
+          <li>
+            <a href="#get_the_preview_reference_documentation">Get the Preview
+            Reference Documentation</a>
+          </li>
 
+          <li>
+            <a href="#update_or_create_a_project">Update or Create a
+            Project</a>
+          </li>
+        </ol>
+      </div>
+    </div>
 
-<h2 id="get-as22">Get Android Studio 2.2 (preview)</h2>
+    <p>
+      If you want an environment for basic <strong>compatibility
+      testing</strong> of your app, you can use your current APK and a
+      supported watch or an emulator. You don't necessarily need to update your
+      full development environment to do basic testing. To simply test your
+      app's compatibility with a preview system image, see <a href=
+      "{@docRoot}wear/preview/downloads.html">Download and Test with a
+      Device</a>.
+    </p>
 
-<p>
-  Android Studio 2.2 is currently available as a preview in the canary release
-  channel. If you already have Android Studio and don't want to update to the
-  canary channel, you can download Android Studio 2.2 as a separate
-  installation and use it for development with the Wear Developer Preview,
-  leaving your primary Android Studio environment unaffected.
-</p>
+    <p>
+      However, to develop apps for the Android Wear 2.0 Developer Preview, you
+      need to make some updates to your development environment, as described
+      below.
+    </p>
 
-<p>
-  To download Android Studio 2.2 as a separate installation, follow these steps
-  (or if you want to receive Android Studio 2.1 as an update to your existing
-  installation, skip to step 4):
-</p>
+    <h2 id="install_android_studio_and_the_latest_packages">
+      Install Android Studio and the Latest Packages
+    </h2>
 
-<ol>
-  <li>Edit the name of your
-  existing Android Studio installation and append the version number. This way,
-  when you install the new version, it will not override the existing one.</li>
-  <li>Download the appropriate ZIP file for your operating system from the
-    <a href="http://tools.android.com/download/studio/canary/latest"
-    >canary channel download page</a>.
-  </li>
-  <li>Unzip the package and move the Android Studio 2.1 contents to the
-    appropriate location for applications on your system, then launch it.</li>
-  <li>Open the Settings dialog
-    (<strong>File &gt; Settings</strong> on Windows/Linux, or
-    <strong>Android Studio &gt; Preferences</strong> on Mac). In the left
-    panel, select <strong>Appearance &amp; Behavior &gt; System Settings &gt;
-    Updates</strong>.
-  </li>
-  <li>On the Updates panel, select the <strong>Automatically
-    check updates for</strong> check box and select
-    <strong>Canary Channel</strong> from the drop-down list.
-  </li>
-</ol>
+    <p>
+      1. For compatibility with the <a href="{@docRoot}preview/overview.html">N
+      Developer Preview</a>, follow the <a href=
+      "{@docRoot}preview/setup-sdk.html">setup instructions</a> for installing
+      the latest version of Android Studio.
+    </p>
 
-<p>Keep this settings window open for the next step.</p>
+    <p>
+      2. Use the <a href="{@docRoot}tools/help/sdk-manager.html">SDK
+      manager</a> to install or confirm that you have the latest installations
+      of the following packages:
+    </p>
 
+    <ul>
+      <li>Under the <strong>SDK Platforms tab</strong>:
+        <ul>
+          <li>Android N Preview
+          </li>
+        </ul>
+      </li>
 
-<h2 id="get-sdk">Get the Wear Preview SDK</h2>
+      <li>Under the <strong>SDK Tools tab</strong>:
+        <ul>
+          <li>Android Support Library
+          </li>
 
-<p>To start developing with Wear Preview APIs, you need to install the
-Wear Preview SDK in Android Studio as follows:</p>
+          <li>Google Play services
+          </li>
 
-<ol>
-  <li>While still viewing the Updates panel (step 4 from above),
-  select the <strong>Automatically
-    check updates for Android SDK</strong> check box and select
-    <strong>Preview Channel</strong> from the drop-down list.
-  </li>
-  <li>Click <strong>Check Now</strong>.</li>
+          <li>Google Repository
+          </li>
 
-  <li>In the left panel, select <strong>Appearance &amp; Behavior &gt;
-  System Settings &gt; Android SDK</strong>.
+          <li>Android Support Repository
+          </li>
+        </ul>
+      </li>
+    </ul>
 
-  <li>Click the <strong>SDK Platforms</strong> tab, then select the
-  <strong>Wear Preview</strong> check box.</li>
+    <h2 id="get_the_preview_reference_documentation">
+      Get the Preview Reference Documentation
+    </h2>
 
-  <li>Click the <strong>SDK Tools</strong> tab, then select the
-    <strong>Android SDK Build Tools</strong>, <strong>Android SDK
-    Platform-Tools</strong>, and <strong>Android SDK Tools</strong> check
-    boxes.
-  </li>
+    <p>
+      Detailed information about the preview is available in the preview
+      reference documentation, which you can download from the following table.
+      The zip file includes an updated API reference for the preview.
+    </p>
 
-  <li>Click <strong>OK</strong>, then accept the licensing
-    agreements for any packages that need to be installed.
-  </li>
-</ol>
+    <table>
+      <tr>
+        <th scope="col">
+          Reference documentation
+        </th>
+        <th scope="col">
+          Notes
+        </th>
+      </tr>
 
+      <tr>
+        <td>
+          [zip file name]
+        </td>
+        <td>
+        </td>
+      </tr>
+    </table>
 
-<h2 id="create-update">Update or Create a Project</h2>
+    <h2 id="update_or_create_a_project">
+      Update or Create a Project
+    </h2>
 
-<p>
-  To use the Wear Preview APIs, your project must be configured appropriately.
-</p>
+    <p>
+      To use the APIs, your project must be configured appropriately in Android
+      Studio.
+    </p>
 
+    <h3 id="update_an_existing_project">
+      Update an existing project
+    </h3>
 
-<h3 id="update">Update an existing project</h3>
+    <p>
+      To update an existing project for development:
+    </p>
 
-<p>Open the
-  <code>build.gradle</code> file for your module and update the values as
-  follows:
-</p>
+    <ol>
+      <li>Start Android Studio, click <strong>Open an existing Android Studio
+      Project</strong>, and select a project.
+      </li>
 
-<pre>
-android {
-  compileSdkVersion <strong>'23'</strong>
-  buildToolsVersion <strong>'24.0.1-rc1'</strong>
-  ...
+      <li>If prompted by the Android SDK Manager for the SDK version to use for
+      the project, select <strong>Use</strong> <strong>Android Studio's
+      SDK</strong>. &lt;//li&gt;
+      </li>
 
-  defaultConfig {
-     minSdkVersion <strong>'23'</strong>
-     targetSdkVersion <strong>'23'</strong>
-     ...
-  }
-  ...
-}</pre>
+      <li>If prompted to update the Gradle plugin, update the version of the
+      plugin.
+      </li>
 
+      <li>In the <code>build.gradle</code> file for the Wear module, in the
+      <code>dependencies</code> section, update the existing reference to the
+      Wearable Support Library (for example, <code>compile
+      'com.google.android.support:wearable:1.4.0'</code>) by changing it to the
+      following, which requires that your the Google Repository <a href=
+      "#install_android_studio_and_the_latest_packages">is the latest
+      version</a>::
 
-<h3 id="create">Create a new project</h3>
+        <pre>
+        compile 'com.google.android.support:wearable:2.0.0-alpha1'
 
-<p>To create a new project for development with the Wear Preview SDK:</p>
+</pre>
+      </li>
 
-<ol>
-  <li>Click <strong>File > New Project</strong>. and follow the steps until
-  you reach the Target Android Devices page.
-  </li>
-  <li>On this page, select <strong>Wear</strong> option.</li>
-  <li>Under <strong>Wear</strong> option, in the <strong>Minimum
-    SDK</strong> option list, select
-    <strong>API 23: Android API 6.0 (Wear Preview)</strong>.</li>
-</ol>
+      <li>See the following page for setting up a watch or emulator with a
+      preview system image, in order to begin testing your app: <a href=
+      "{@docRoot}wear/preview/downloads.html">Download and Test with a
+      Device</a>
+      </li>
+    </ol>
+
+    <h3 id="create_a_new_project">
+      Create a new project
+    </h3>
+
+    <p>
+      To create a new project for development:
+    </p>
+
+    <ol>
+      <li>Click <strong>File &gt; New Project</strong> and follow the steps in
+      the Create New Project wizard until you reach the Target Android Devices
+      page.
+      </li>
+
+      <li>Optionally, select the <strong>Phone and Tablet</strong> option. If
+      you plan to use N Preview APIs in a phone app, then the Minimum SDK
+      option list, select <strong>API N: Android 6.x (N Preview)</strong>.
+      </li>
+
+      <li>Select the <strong>Wear</strong> option, and in the Minimum SDK
+      option list, select the latest available (<strong>N Preview</strong>)
+      option. Click <strong>Next</strong> until you exit the Create New Project
+      wizard.
+      </li>
+
+      <li>In the <code>build.gradle</code> file for the Wear module, in the
+      <code>dependencies</code> section, update the existing reference to the
+      Wearable Support Library (perhaps <code>compile
+      'com.google.android.support:wearable:1.4.0'</code>) to:
+
+        <pre>
+      compile 'com.google.android.support:wearable:2.0.0-alpha1'
+
+</pre>
+      </li>
+
+      <li>See the following page for setting up a watch or emulator with a
+      preview system image, in order to begin testing your app: <a href=
+      "{@docRoot}wear/preview/downloads.html">Download and Test with a
+      Device</a>
+      </li>
+    </ol>
diff --git a/docs/html/work/_book.yaml b/docs/html/work/_book.yaml
new file mode 100644
index 0000000..82571f3
--- /dev/null
+++ b/docs/html/work/_book.yaml
@@ -0,0 +1,18 @@
+toc:
+- title: Android for Work Home
+  path: /work/index.html
+
+- title: Overview
+  path: /work/overview.html
+
+- title: Developer Guide
+  path: /work/guide.html
+
+- title: Set up Managed Profiles
+  path: /work/managed-profiles.html
+
+- title: Set up App Restrictions
+  path: /work/app-restrictions.html
+
+- title: Set up Single-Purpose Devices
+  path: /work/cosu.html
diff --git a/docs/html/training/enterprise/app-restrictions.jd b/docs/html/work/app-restrictions.jd
similarity index 78%
rename from docs/html/training/enterprise/app-restrictions.jd
rename to docs/html/work/app-restrictions.jd
index 07b1de7..4122988b 100644
--- a/docs/html/training/enterprise/app-restrictions.jd
+++ b/docs/html/work/app-restrictions.jd
@@ -1,27 +1,18 @@
-page.title=Implementing App Restrictions
+page.title=Set up App Restrictions
 page.metaDescription=Learn how to implement app restrictions and configuration settings that can be changed by other apps on the same device.
+page.image=images/work/cards/briefcase_600px.png
+
 @jd:body
 
-<div id="tb-wrapper">
-<div id="tb">
-
-<h2>This lesson teaches you to</h2>
-<ol>
- <li><a href="#define_restrictions">Define App Restrictions</a></li>
- <li><a href="#check_restrictions">Check App Restrictions</a></li>
- <li><a href="#listen">Listen for App Restriction Changes</a></li>
-</ol>
-
-<!-- related docs (NOT javadocs) -->
-<h2>Resources</h2>
-<ul>
-  <li><a href="{@docRoot}samples/AppRestrictionSchema/index.html">AppRestrictionSchema</a>
-    sample app</li>
-  <li><a href="{@docRoot}samples/AppRestrictionEnforcer/index.html">AppRestrictionEnforcer</a>
-    sample app</li>
-</ul>
-
-</div>
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#define_restrictions">Define App Restrictions</a></li>
+      <li><a href="#check_restrictions">Check App Restrictions</a></li>
+      <li><a href="#listen">Listen for App Restriction Changes</a></li>
+    </ol>
+  </div>
 </div>
 
 <p>If you are developing apps for the enterprise market, you may need to satisfy
@@ -152,10 +143,10 @@
 &lt;restrictions xmlns:android="http://schemas.android.com/apk/res/android" &gt;
 
   &lt;restriction
-    android:key="download_on_cell"
-    android:title="@string/download_on_cell_title"
+    android:key="downloadOnCellular"
+    android:title="App is allowed to download data via cellular"
     android:restrictionType="bool"
-    android:description="@string/download_on_cell_description"
+    android:description="If 'false', app can only download data via Wi-Fi"
     android:defaultValue="true" /&gt;
 
 &lt;/restrictions&gt;
@@ -166,12 +157,6 @@
   documented in the reference for {@link android.content.RestrictionsManager}.
 </p>
 
-<p class="note">
-  <strong>Note:</strong> <code>bundle</code> and
-  <code>bundle_array</code> restriction types are not supported by Google Play
-  for Work.
-</p>
-
 <p>
   You use each restriction's <code>android:key</code> attribute to read its
   value from a restrictions bundle. For this reason, each restriction must have
@@ -217,7 +202,7 @@
   </li>
 
   <li>When the app is notified of a restriction change, as described in
-    <a href="#listen">Listen for App Configuration
+    <a href="#listen">Listen for Device Configuration
     Changes</a>
   </li>
 </ul>
@@ -260,30 +245,9 @@
   the {@link android.content.Intent#ACTION_APPLICATION_RESTRICTIONS_CHANGED
   ACTION_APPLICATION_RESTRICTIONS_CHANGED} intent to find out if restrictions
   change while your app is active, as described in <a href="#listen">Listen for
-  App Restriction Changes</a>.
+  Device Configuration Changes</a>.
 </p>
 
-<p>
-  When your app checks for restrictions using
- {@link android.content.RestrictionsManager#getApplicationRestrictions
- RestrictionsManager.getApplicationRestrictions()}, we recommend that you
- check to see if the enterprise administrator has set the key-value pair
- {@link android.os.UserManager#KEY_RESTRICTIONS_PENDING} to true. If so, you
- should block the user from using the app, and prompt them to contact their
- enterprise administrator. The app should then proceed as normal, registering
- for the {@link android.content.Intent#ACTION_APPLICATION_RESTRICTIONS_CHANGED
- ACTION_APPLICATION_RESTRICTIONS_CHANGED} broadcast.
-</p>
-
-<img src="{@docRoot}images/training/enterprise/app_restrictions_diagram.png"
-width="620" srcset="{@docRoot}images/training/enterprise/app_restrictions_diagram.png 1x,
-{@docRoot}images/training/enterprise/app_restrictions_diagram_2x.png 2x" />
-
- <p class="img-caption">
-   <strong>Figure 1.</strong> Checking whether restrictions are pending before
-   registering for the broadcast.
- </p>
-
 <h3 id="read_restrictions">
   Reading and applying restrictions
 </h3>
@@ -293,11 +257,11 @@
   getApplicationRestrictions()} method returns a {@link android.os.Bundle}
   containing a key-value pair for each restriction that has been set. The
   values are all of type <code>Boolean</code>, <code>int</code>,
-  <code>String</code>, <code>String[]</code>, <code>Bundle</code>, and
-  <code>Bundle[]</code>. Once you have the restrictions {@link android.os.Bundle},
-  you can check the current restrictions settings with the standard
-  {@link android.os.Bundle} methods for those data types, such as
-  {@link android.os.Bundle#getBoolean getBoolean()} or
+  <code>String</code>, and <code>String[]</code>. Once you have the
+  restrictions {@link android.os.Bundle}, you can check the current
+  restrictions settings with the standard {@link android.os.Bundle} methods for
+  those data types, such as {@link android.os.Bundle#getBoolean getBoolean()}
+  or
   {@link android.os.Bundle#getString getString()}.
 </p>
 
@@ -311,11 +275,10 @@
 
 <p>
   It is up to your app to take appropriate action based on the current
-  restrictions settings. For example, if your app has a restriction schema
-  to specify whether it can download over a cellular connection (like the
-  example in <a href="#define_restrictions">Define App Restrictions</a>),
-  and you find that the restriction is set to false, you would have to disable
-  data download except when the device has a Wi-Fi connection, as shown in the
+  restrictions settings. For example, if your app has a restriction specifying
+  whether it can download data over a cellular connection, and you find that
+  the restriction is set to <code>false</code>, you would have to disable data
+  download except when the device has a Wi-Fi connection, as shown in the
   following example code:
 </p>
 
@@ -335,13 +298,6 @@
     // ...show appropriate notices to user
 }</pre>
 
-<p class="note">
-   <strong>Note:</strong> The restrictions schema should be
-   backward and forward compatible, since Google Play for Work
-   gives the EMM only one version of the App Restrictions
-   Schema per app.
- </p>
-
 <h2 id="listen">
   Listen for App Restriction Changes
 </h2>
@@ -389,8 +345,8 @@
   <strong>Note:</strong> Ordinarily, your app does not need to be notified
   about restriction changes when it is paused. Instead, you should unregister
   your broadcast receiver when the app is paused. When the app resumes, you
-  first check for the current restrictions (as discussed in
-  <a href="#check_restrictions">Check App Restrictions</a>), then register
-  your broadcast receiver to make sure you're notified about restriction changes
+  first check for the current restrictions (as discussed in <a href=
+  "#check_restrictions">Check Device Restrictions</a>), then register your
+  broadcast receiver to make sure you're notified about restriction changes
   that happen while the app is active.
 </p>
diff --git a/docs/html/training/enterprise/cosu.jd b/docs/html/work/cosu.jd
similarity index 90%
rename from docs/html/training/enterprise/cosu.jd
rename to docs/html/work/cosu.jd
index 1d6388b..3058365 100644
--- a/docs/html/training/enterprise/cosu.jd
+++ b/docs/html/work/cosu.jd
@@ -1,27 +1,20 @@
-page.title=Configuring Corporate-Owned, Single-Use Devices
+page.title=Set up Single-Purpose Devices
+page.tags=work, cosu
+page.keywords=cosu, work
 page.metaDescription=Learn how to develop single-use solutions for Android devices.
+page.image=images/work/cards/briefcase_600px.png
 
 @jd:body
 
-<div id="tb-wrapper">
-<div id="tb">
-
-<h2>This lesson teaches you to</h2>
-<ol>
- <li><a href="#locktask">How to use LockTask mode</a></li>
- <li><a href="#cosu-solutions">Build COSU solutions</a></li>
- <li><a href="#create-dpc">Create your own DPC app</a></li>
-</ol>
-
-<!-- related docs (NOT javadocs) -->
-<h2>You should also read</h2>
-<ul>
-  <li><a href="{@docRoot}training/enterprise/work-policy-ctrl.html">
-Building a Device Policy Controller</a>
-  </li>
-</ul>
-
-</div>
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#locktask">How to use LockTask mode</a></li>
+      <li><a href="#cosu-solutions">Build COSU solutions</a></li>
+      <li><a href="#create-dpc">Create your own DPC app</a></li>
+    </ol>
+  </div>
 </div>
 
 <p>
@@ -73,9 +66,9 @@
 This graphic compares the features of app pinning and lock task mode:
 </p>
 
-<img src="{@docRoot}images/training/enterprise/pinning_vs_locktaskmode.png"
-width="640" srcset="{@docRoot}images/training/enterprise/pinning_vs_locktaskmode.png 1x,
-{@docRoot}images/training/enterprise/pinning_vs_locktaskmode_2x.png 2x" />
+<img src="{@docRoot}images/work/cosu-pinning_vs_locktaskmode.png"
+width="640" srcset="{@docRoot}images/work/cosu-pinning_vs_locktaskmode.png 1x,
+{@docRoot}images/work/cosu-pinning_vs_locktaskmode_2x.png 2x" />
 
  <p class="img-caption">
    <strong>Figure 1.</strong> Comparing the features of app pinning in Lollipop
@@ -422,7 +415,7 @@
         // set System Update policy
 
         if (active){
-        	mDevicePolicyManager.setSystemUpdatePolicy(mAdminComponentName, 
+          mDevicePolicyManager.setSystemUpdatePolicy(mAdminComponentName,
                 SystemUpdatePolicy.createWindowedInstallPolicy(60,120));
         }
         else
@@ -431,7 +424,7 @@
         // set this Activity as a lock task package
 
         mDevicePolicyManager.setLockTaskPackages(mAdminComponentName,
-    	    active ? new String[]{getPackageName()} : new String[]{});
+          active ? new String[]{getPackageName()} : new String[]{});
 
         IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MAIN);
         intentFilter.addCategory(Intent.CATEGORY_HOME);
@@ -460,18 +453,18 @@
     }
 
     private void enableStayOnWhilePluggedIn(boolean enabled) {
-    	if (enabled) {
-    		mDevicePolicyManager.setGlobalSetting(
-    			mAdminComponentName, 
-                        Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
-    			BatteryManager.BATTERY_PLUGGED_AC 
-    			| BatteryManager.BATTERY_PLUGGED_USB 
-    			| BatteryManager.BATTERY_PLUGGED_WIRELESS);
-    	} else {
-    		mDevicePolicyManager.setGlobalSetting(
-    			mAdminComponentName, 
-                        Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
-    	}
+      if (enabled) {
+        mDevicePolicyManager.setGlobalSetting(
+          mAdminComponentName,
+          Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
+          BatteryManager.BATTERY_PLUGGED_AC
+          | BatteryManager.BATTERY_PLUGGED_USB
+          | BatteryManager.BATTERY_PLUGGED_WIRELESS);
+      } else {
+        mDevicePolicyManager.setGlobalSetting(
+          mAdminComponentName,
+          Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
+      }
 
     }
 
diff --git a/docs/html/training/enterprise/device-management-policy.jd b/docs/html/work/device-management-policy.jd
similarity index 98%
rename from docs/html/training/enterprise/device-management-policy.jd
rename to docs/html/work/device-management-policy.jd
index 5190a22..d564b89 100644
--- a/docs/html/training/enterprise/device-management-policy.jd
+++ b/docs/html/work/device-management-policy.jd
@@ -24,7 +24,7 @@
 <h2>Try it out</h2>
 
 <div class="download-box">
- <a href="http://developer.android.com/shareables/training/DeviceManagement.zip"
+ <a href="{@docRoot}shareables/training/DeviceManagement.zip"
 class="button">Download the sample</a>
  <p class="filename">DeviceManagement.zip</p>
 </div>
diff --git a/docs/html/work/guide.jd b/docs/html/work/guide.jd
new file mode 100644
index 0000000..66ffb99
--- /dev/null
+++ b/docs/html/work/guide.jd
@@ -0,0 +1,530 @@
+page.title=Android for Work Developer Guide
+page.tags="work", "android for work", "afw", "developer", "android"
+page.metaDescription=Android for Work provides organizations with a secure, flexible, and unified Android mobility platform combining devices, applications, and management.
+page.image=images/work/cards/android-studio_600px.png
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>In this document</h2>
+    <ul>
+      <li><a href="#managed-profiles">Managed Profiles</a></li>
+      <li><a href="#app-restrictions">Implementing App Restrictions</a></li>
+      <li><a href="#cosu">COSU Devices</a></li>
+      <li><a href="#sso">Set up Single Sign-on with Chrome Custom Tabs</a></li>
+      <li><a href="#testing">Test Your App</a></li>
+    </ul>
+  </div>
+</div>
+
+<p>
+  Android for Work provides organizations with a secure, flexible, and
+  unified Android mobility platform—combining devices, applications,
+  and management. By default, Android apps are compatible with Android
+  for Work. However, there are additional features you can use to make
+  your Android app work best on a managed device:
+</p>
+
+<ul>
+  <li>
+    <a href="#managed-profiles">Managed profile compatibility</a>—Modify your Android
+    app so it functions best on an Android device with a work profile.
+  </li>
+  <li>
+    <a href="#app-restrictions">Managed configuration using app restrictions</a>—Modify
+    your app to allow IT administrators the option to specify custom
+    settings for your apps.
+  </li>
+  <li>
+    <a href="#cosu">Corporate-owned, single-use (COSU)</a>—Optimize your
+    app so that it can be deployed on an Android device as a kiosk.
+  </li>
+  <li>
+    <a href="#sso">Single Sign-On (SSO)</a>—Simplify the sign-on process
+    for users signing in to different apps on their Android device
+    running Android for Work.
+  </li>
+</ul>
+
+<h3>Prerequisites</h3>
+
+<ol>
+  <li>You’ve created an Android app.</li>
+  <li>You’re ready to modify your app so that it works best with
+    Android for Work.</li>
+  <li>Minimum version: Android 5.0 Lollipop recommended version:
+    Android 6.0 Marshmallow and later.</li>
+</ol>
+
+<p>
+  <strong>Note:</strong> Android for Work functions natively on most
+  Android 5.0 devices; however, Android 6.0 and later offers
+  additional features for Android for Work, especially with regard to
+  COSU.
+</p>
+
+<h2 id="managed-profiles">Manage Profiles</h2>
+
+<p>
+  You can manage a user’s business data and applications through a
+  work profile. A work profile is a managed corporate profile
+  associated with the primary user account on an Android device. A
+  work profile securely isolates work apps and data from personal apps
+  and data. This work profile is in a separate container from the
+  personal profile, which your user controls. These separate profiles
+  allow organizations to manage the business data they care about, but
+  leave everything else on a user’s device under the user’s control.
+  For a deep dive into best practices, see the
+  <a href="{@docRoot}work/managed-profiles.html">Set up Managed Profiles</a>
+  guide. For an overview of those best practices, see below.
+</p>
+
+<h3>Key features of a managed profile</h3>
+
+<ul>
+  <li>Separate and secure profile</li>
+  <li>Google Play for Work for application distribution</li>
+  <li>Separate badged work applications</li>
+  <li>Profile-only management capabilities controlled by an administrator</li>
+</ul>
+
+<h3>Managed profile benefits on Android 5.0+</h3>
+
+<ul>
+  <li>Full device encryption</li>
+  <li>One Android application package (APK) for both profiles when
+    there’s a personal profile and a work profile present on the device</li>
+  <li><a href="https://support.google.com/work/android/answer/6192678"
+      >Device policy controller</a> (DPC) is limited to the managed profile</li>
+  <li>Device administration via the
+    <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html"
+    >DevicePolicyManager</a> class</li>
+</ul>
+
+<h3>Considerations for managed profiles</h3>
+<ul>
+  <li>The Android system prevents intents
+    <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html#clearCrossProfileIntentFilters(android.content.ComponentName)"
+    >from crossing profiles</a> and IT administrators can
+    <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html#enableSystemApp(android.content.ComponentName,%20java.lang.String)"
+    >enable or disable system apps</a>.</li>
+  <li>A file path (Uniform Resource Identifier [URI]) that’s valid on
+    one profile may not be valid on the other.</li>
+</ul>
+
+<h3>Prevent intents from failing between profiles</h3>
+<p>
+  It’s difficult to know which intents can cross between profiles, and
+  which ones are blocked. The only way to know for sure is by testing.
+  Before your app starts an activity, you should verify that the
+  request is resolved by calling
+  <a href="{@docRoot}reference/android/content/Intent.html#resolveActivity(android.content.pm.PackageManager)"
+  ><code>Intent.resolveActivity()</code></a>.
+  <ul>
+    <li>If it returns <code>null</code>, the request doesn’t resolve.</li>
+    <li>If it returns something, it shows that the intent resolves,
+      and it’s safe to send the intent.</li>
+  </ul>
+</p>
+<p>
+  <strong>Note</strong>: For detailed testing instructions, see
+  <a href="{@docRoot}work/managed-profiles.html#prevent_failed_intents"
+  >Prevent Failed Intents</a>.
+</p>
+
+<h3>Share files across profiles</h3>
+<p>
+  Some developers use URIs to mark file paths in Android. However,
+  with Android for Work, because there are separate profiles, we
+  recommend:
+</p>
+
+<table>
+  <tr>
+    <td style="white-space:nowrap;">
+      <strong>Use:</strong><br/>
+      Content URIs
+    </td>
+    <td>
+      <ul>
+        <li>
+          The <a href="{@docRoot}reference/android/content/ContentUris.html"
+          >content URIs</a> contain the authority, path, and ID for a
+          specific file. You can generate this using
+          <a href="{@docRoot}reference/android/support/v4/content/FileProvider.html"
+          >FileProvider</a> subclass.
+          <a href="{@docRoot}training/secure-file-sharing/index.html">Learn more</a>
+        </li>
+        <li>
+          Share and grant permissions to access the content URI using
+          an Intent. Permissions can only be passed across the profile
+          boundary using Intents. If you grant another app access rights
+          to your file using
+          <a href="{@docRoot}reference/android/content/Context.html#grantUriPermission(java.lang.String,%20android.net.Uri,%20int)"
+          ><code>Context.grantUriPermission()</code></a>, it only is granted for
+          that app in the same profile.</li>
+      </ul>
+    </td>
+  </tr>
+  <tr>
+    <td style="white-space:nowrap;">
+      <strong>Don't use:</strong><br/>
+      File URI
+    </td>
+    <td>
+      <ul>
+        <li>Contains the absolute path of the file on the device’s
+          storage.</li>
+        <li>A file path URI that’s valid on one profile isn’t valid on
+          the other.</li>
+        <li>If you attach a file URI to an intent, a handler is unable
+          to access the file in another profile.</li>
+      </ul>
+    </td>
+  </tr>
+</table>
+
+<p>
+  <strong>Next steps</strong>: Once your app supports managed
+  profiles, test it in a work profile. See
+  <a href="#testing">Test your app with Android for Work</a>.
+</p>
+
+<h2 id="app-restrictions">Implementing App Restrictions</h2>
+
+<p>
+  App restrictions are a set of instructions that IT administrators
+  can use to manage their users’ mobile devices in a specific way.
+  These instructions are universal and work across any EMM, allowing
+  administrators to remotely configure applications on their users’
+  phones.
+</p>
+
+<p>
+  If you’re developing apps for business or government, you may need
+  to satisfy your industry’s specific set of requirements. Using
+  application restrictions, the IT administrator can remotely specify
+  settings and enforce policies for their users’ Android apps; for
+  example:
+</p>
+
+<ul>
+  <li>Configure if an app can sync data via cellular/3G, or only Wi-Fi</li>
+  <li>Whitelist or blacklist URLs on a web browser</li>
+  <li>Configure an app's email settings</li>
+  <li>Enable or disable printing</li>
+  <li>Manage bookmarks</li>
+</ul>
+
+<h3>Best practices for implementing app restrictions</h3>
+
+<p>
+  The <a href="{@docRoot}work/app-restrictions.html">Set up App Restrictions</a>
+  guide is the key source for information on how to build and deploy
+  app restrictions. After you’ve reviewed this documentation, see
+  recommendations below for additional guidance.
+</p>
+
+<h4>When first launching the app</h4>
+<p>
+  As soon as you launch an application, you can see if app
+  restrictions are already set for this app in <code>onStart()</code> or
+  <code>onResume()</code>. Additionally, you can find out if your
+  application is managed or unmanaged. For example, if
+  <a href="{@docRoot}reference/android/content/RestrictionsManager.html#getApplicationRestrictions()"
+  ><code>getApplicationRestrictions()</code></a> returns:
+  <ul>
+    <li><strong>A set of application-specific restrictions</strong>—You
+      can configure the app restrictions silently (without requiring
+      user input).</li>
+    <li><strong>An empty bundle</strong>—Your application acts like
+      it’s unmanaged (for example, how the app behaves in a personal
+      profile).</li>
+    <li><strong>A bundle with a single key value pair with
+      <a href="{@docRoot}reference/android/os/UserManager.html#KEY_RESTRICTIONS_PENDING"
+      ><code>KEY_RESTRICTIONS_PENDING</code></a> set to true</strong>—your
+      application is being managed, but the DPC isn’t configured
+      correctly. You should block this user from your app, and direct
+      them to their IT administrator.</li>
+  </ul>
+</p>
+
+<h4>Listen for changes to app restrictions</h4>
+<p>
+  IT administrators can change app restrictions and what policies they
+  want to enforce on their users at any time. Because of this, we
+  recommend you ensure that your app can accept new restrictions as
+  follows:
+</p>
+
+<ul>
+  <li><strong>Fetch restrictions on launch</strong>—Your app should
+    call <code>getApplicationRestrictions()</code> in <code>onStart()</code>
+    and <code>onResume()</code>, and compare against old restrictions
+    to see if changes are required.</li>
+  <li><strong>Listen while running</strong>—Dynamically register
+    <a href="{@docRoot}reference/android/content/Intent.html#ACTION_APPLICATION_RESTRICTIONS_CHANGED"
+    ><code>ACTION_APPLICATION_RESTRICTIONS_CHANGED</code></a> in your
+    running activities or services, after you’ve checked for new
+    restrictions. This intent is sent only to listeners that are
+    dynamically registered, and not to listeners declared in the app
+    manifest.</li>
+  <li><strong>Unregister while not running</strong>—In <code>onPause()</code>,
+    you should unregister for the broadcast of
+    <code>ACTION_APPLICATION_RESTRICTIONS_CHANGED</code>.</li>
+</ul>
+
+<h2 id="cosu">COSU Devices</h2>
+
+<p>
+  Corporate-owned, single-use devices (COSU) are kiosk devices used
+  for a single purpose, such as digital signage displays, ticket
+  printing kiosks, or checkout registers.
+</p>
+<p>
+  When an Android device is configured as a COSU device, the user sees
+  an application locked to the screen with no Home or Recent Apps
+  buttons to escape the app. COSU can also be configured to show a set
+  of applications, such as a library kiosk with an app for the library
+  catalog and a web browser.
+</p>
+<p>
+  For instructions, see
+  <a href="{@docRoot}work/cosu.html">Set up Single-Purpose Devices</a>.
+</p>
+
+<h2 id="sso">Set up Single Sign-on with Chrome Custom Tabs</h2>
+
+<p>
+  Enterprise users often have multiple apps on their device, and they
+  prefer to sign in once to access all of their work applications.
+  Typically, users sign in through a
+  <a href="https://developer.chrome.com/multidevice/webview/overview">WebView</a>;
+  however, there are a couple reasons why this isn’t ideal:
+</p>
+<ol>
+  <li>
+    Users often need to sign in multiple times with the same
+    credentials. The WebView solution often isn’t a true Single
+    Sign-On (SSO) experience.
+  </li>
+  <li>
+    There can be security risks, including malicious applications
+    inspecting cookies or injecting JavaScript® to access a user’s
+    credentials. Even trusted developers are at risk if they rely on
+    potentially malicious third-party SDKs.
+  </li>
+</ol>
+
+<p>
+  A solution to both problems is to authenticate users using Chrome
+  Custom Tabs, instead of WebView. This ensures that authentication:
+</p>
+<ul>
+  <li>
+    Occurs in a secure context (the system browser) where the host app
+    cannot inspect contents.
+  </li>
+  <li>
+    Has a shared cookie state, ensuring the user has to sign in only
+    once.
+  </li>
+</ul>
+
+<h3>Requirements</h3>
+
+<p>
+  Chrome Custom Tabs are supported using Platform APIs from API level
+  23 (Android 6.0), and support libraries back to API level 4 (Android
+  1.6). To implement Chrome Custom Tabs, you need to use a supported
+  browser, such as Chrome 45 or later.
+</p>
+
+<h3>How do I implement Chrome Custom Tabs?</h3>
+
+<p>
+  Google, in conjunction with the OpenID Foundation, has published an
+  open source library on GitHub. To set up Chrome Custom Tabs for SSO,
+  see the <a href="https://github.com/openid/AppAuth-Android"
+  >documentation and sample code on GitHub</a>.
+</p>
+
+<h2 id="testing">Test your App with Android for Work</h2>
+
+<p>
+  Once you’ve developed your app, you’ll want to test it in a work
+  profile—both as a profile owner and device owner. See the
+  instructions below.
+</p>
+
+<h3>Use TestDPC to test your Android app</h3>
+
+<p>
+  TestDPC is a tool you can use to test your Android app in a variety
+  of Android for Work environments. You can configure it as a profile
+  owner or a device owner to launch management APIs on your device,
+  using one of these methods:
+</p>
+<ul>
+  <li>Download the source code for TestDPC from
+    <a href="https://github.com/googlesamples/android-testdpc">GitHub</a>.</li>
+  <li>Install TestDPC directly from
+    <a href="https://play.google.com/store/apps/details?id=com.afwsamples.testdpc"
+    >Google Play</a>.</li>
+</ul>
+<p>
+  For more information on how to configure TestDPC, see the
+  instructions below and the
+  <a href="https://github.com/googlesamples/android-testdpc">TestDPC User Guide</a>.
+</p>
+
+<p>
+  <strong>REQUIRED</strong>: Your test Android device needs to run
+  Android 5.0 or later and be able to natively support Android for Work.
+</p>
+
+<h3>Provision a profile owner</h3>
+
+<p>
+  To test your app in a work profile, you need to first provision a
+  profile owner on the TestDPC app:
+</p>
+
+<ol>
+  <li>Launch the TestDPC app and click <strong>Set up profile</strong>.</li>
+  <li>When prompted, click <strong>Set up</strong>, ensuring the
+    TestDPC’s logo is highlighted on the screen.</li>
+  <li>If your device isn’t encrypted, you need to encrypt your device.
+    Follow the briefcase notification after reboot to continue
+    provisioning.<br/>
+    Once you’ve provisioned the profile owner correctly, badged
+    applications appear at the end of your app tray. Install your app
+    on the device and test to see how it runs in the work profile.
+  </li>
+  <li>
+    Install your app on the device and test to see how it runs in the
+    work profile.
+  </li>
+</ol>
+
+<h3>Provision a device owner</h3>
+
+<p>
+  Testing your app as a device owner requires more steps than testing
+  as a profile owner. You first need to provision the device owner on
+  your test device using the
+  <a href="{@docRoot}samples/NfcProvisioning/index.html"
+  >NfcProvisioning sample app</a>. For complete instructions to
+  provision TestDPC in device owner mode using the NfcProvisioning
+  app, see the <a href="https://github.com/googlesamples/android-testdpc"
+  >TestDPC User Guide</a>.
+</p>
+
+<ol>
+  <li>Download the <a href="{@docRoot}samples/NfcProvisioning/index.html"
+    >NfcProvisioning</a> app sample files to your development environment.</li>
+  <li>Unpack the project, open your shell, and <code>cd</code> to the project directory.</li>
+  <li>Add a file to the directory with the <code>local.properties</code> name
+    and the following content:
+    <pre>sdk.dir=/path/to/your/android/sdk</pre>
+  </li>
+  <li>While in the project directory, enter these commands to build the NfcProvisioning APK:
+    <pre>./gradlew init
+./gradlew build</pre>
+    The NfcProvisioning APK you need is now located in <code>./Application/build/outputs/apk</code>.
+  </li>
+  <li>Install the APK on your programmer device, which you can use to provision other devices.</li>
+  <li>Create a text file called <code>nfcprovisioning.txt</code> and
+    include the following information:
+    <pre>android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME=com.afwsamples.testdpc
+android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION=https://testdpc-latest-apk.appspot.com
+android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM=gJD2YwtOiWJHkSMkkIfLRlj-quNqG1fb6v100QmzM9w=
+# note: checksum must be URL-safe
+android.app.extra.PROVISIONING_LOCALE=en_US
+android.app.extra.PROVISIONING_TIME_ZONE=America/New_York</pre>
+    <p>
+      <strong>Note:</strong> If you’re developing for Android 5.0
+      Lollipop, see the instructions in the
+      <a href="https://github.com/googlesamples/android-testdpc"
+      >TestDPC User Guide</a>.
+    </p>
+  </li>
+  <li>Push that text file to your programmer device by entering:
+    <pre>adb push &lt;path-to-nfcprovisioning.txt&gt; /sdcard/</pre>
+  </li>
+  <li>
+    Ensure that the programmer device is connected to Wi-Fi on either
+    an unsecured or WPA2 secured network.
+    <p>
+      The NFC Provisioning app will automatically pass those Wi-Fi
+      credentials onto the target device.
+    </p>
+  </li>
+  <li>Open the NFC Provisioning app and ensure <code>com.google.android.testdpc</code>
+    is auto-populated.</li>
+  <li>Bump the devices to transfer the data.</li>
+  <li>Follow the onscreen instructions to set up your target device.</li>
+  <li>Once you’ve completed provisioning the device owner, you can test your app on that device. You
+    should specifically test how
+    <a href="{@docRoot}work/app-restrictions.html">app restrictions</a>,
+    <a href="{@docRoot}work/managed-profiles.html#sharing_files">URIs</a>, and
+    <a href="{@docRoot}work/managed-profiles.html#prevent_failed_intents">intents</a>
+    work on that device.</li>
+</ol>
+
+<h3>End-to-end testing</h3>
+
+<p>
+  After you’ve finished testing your app in the environments above,
+  you’ll likely want to test your app in an end-to-end production
+  environment. This process includes the steps a customer needs to
+  take to deploy your app in their organization, including:
+</p>
+
+<ul>
+  <li>App distribution through Play</li>
+  <li>Server-side app restriction configuration</li>
+  <li>Server-side profile policy control</li>
+</ul>
+
+<p>
+  You need to access an EMM console to complete the end-to-end
+  testing. The easiest way to get one is to request a testing console
+  from your EMM. Once you have access, complete these tasks:
+</p>
+
+<ol>
+  <li>Create a test version of your application with a
+    <a href="http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename"
+    >new ApplicationId</a>.</li>
+  <li>Claim a <a href="https://support.google.com/work/android/answer/6174056"
+    >managed Google domain</a> and bind it to your EMM. If you
+    already have a testing domain that’s bound to an EMM, you may need
+    to unbind it to test it with your preferred EMM. Please consult your
+    EMM for the specific unbinding steps.</li>
+  <li><a href="https://support.google.com/a/answer/2494992"
+    >Publish your application to the private channel</a> for their
+    managed Google domain.</li>
+  <li>Use the EMM console and EMM application to:
+    <ol>
+      <li>Set up work devices.</li>
+      <li>Distribute your application.</li>
+      <li>Set application restrictions.</li>
+      <li>Set device policies.</li>
+    </ol>
+</ol>
+
+<p>
+  This process will differ based on your EMM. Please consult your
+  EMM’s documentation for further details. Congrats! You’ve completed
+  these steps and verified that your app works well with Android for
+  Work.
+</p>
+
+<p>
+  <a href="https://connect.googleforwork.com/community/applicants/android/isv">
+    <span class="dac-sprite dac-auto-chevron"></span>
+    Learn about the Android for Work DevHub.
+  </a>
+</p>
diff --git a/docs/html/work/index.jd b/docs/html/work/index.jd
new file mode 100644
index 0000000..a71fedb
--- /dev/null
+++ b/docs/html/work/index.jd
@@ -0,0 +1,55 @@
+page.title=Android for Work
+page.tags="android for work, work",
+meta.tags="android for work, work",
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-9of16 col-push-7of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/work/hero_650px_2x.png"
+             srcset="{@docRoot}images/work/hero_650px.png 1x,
+             {@docRoot}images/work/hero_650px_2x.png 2x">
+      </div>
+      <div class="col-7of16 col-pull-9of16">
+        <h1 class="dac-hero-title">Android for Work</h1>
+        <p class="dac-hero-description">
+          Develop apps for Android for Work to take advantage of
+          security and management features built into Android.
+        </p>
+
+        <a class="dac-hero-cta" href="{@docRoot}work/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Get Started
+        </a>
+      </div>
+    </div>
+    <div class="dac-section dac-small">
+      <div class="resource-widget resource-flow-layout col-16"
+           data-query="collection:work/landing/primary"
+           data-cardSizes="6x2"
+           data-maxResults="6"></div>
+    </div>
+  </div>
+</section>
+
+<div class="wrap dac-offset-parent">
+  <a class="dac-fab dac-scroll-button" data-scroll-button href="#resources">
+    <i class="dac-sprite dac-arrow-down-gray"></i>
+  </a>
+</div>
+
+<section class="dac-section dac-gray dac-small" id="resources">
+  <div class="wrap">
+    <h2 class="norule">Resources</h1>
+
+    <div class="resource-widget resource-flow-layout col-16"
+         data-query="collection:work/landing/resources"
+         data-cardSizes="6x6"
+         data-maxResults="16"></div>
+  </div>
+</section>
diff --git a/docs/html/training/enterprise/app-compatibility.jd b/docs/html/work/managed-profiles.jd
similarity index 94%
rename from docs/html/training/enterprise/app-compatibility.jd
rename to docs/html/work/managed-profiles.jd
index 419ba89..3287f55 100644
--- a/docs/html/training/enterprise/app-compatibility.jd
+++ b/docs/html/work/managed-profiles.jd
@@ -1,26 +1,19 @@
-page.title=Ensuring Compatibility with Managed Profiles
+page.title=Set up Managed Profiles
 page.metaDescription=Learn how to make sure your apps operate smoothly in a corporate environment by following some best practices.
+page.image=images/work/cards/briefcase_600px.png
 
 @jd:body
 
-<div id="tb-wrapper">
-<div id="tb">
-
-<h2>This lesson teaches you to</h2>
-<ol>
- <li><a href="#prevent_failed_intents">Prevent Failed Intents</a></li>
- <li><a href="#sharing_files">Share Files Across Profiles</a></li>
- <li><a href="#testing_apps">Test your App for Compatibility with Managed
-    Profiles</a></li>
-</ol>
-
-<!-- related docs (NOT javadocs) -->
-<h2>Resources</h2>
-<ul>
-  <li><a href="{@docRoot}samples/BasicManagedProfile/index.html">BasicManagedProfile</a></li>
-</ul>
-
-</div>
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#prevent_failed_intents">Prevent Failed Intents</a></li>
+      <li><a href="#sharing_files">Share Files Across Profiles</a></li>
+      <li><a href="#testing_apps">
+        Test your App for Compatibility with Managed Profiles</a></li>
+    </ol>
+  </div>
 </div>
 
 <p>The Android platform allows devices to have
diff --git a/docs/html/work/overview.jd b/docs/html/work/overview.jd
new file mode 100644
index 0000000..2b1f08b
--- /dev/null
+++ b/docs/html/work/overview.jd
@@ -0,0 +1,142 @@
+page.title=Android for Work Developer Overview
+meta.tags="android for work, work, enterprise, corporate"
+page.tags="android for work, work, enterprise, corporate"
+page.metaDescription=Learn how to build Android apps for the enterprise and take advantage of Google's Android for Work program.
+page.image=images/work/cards/briefcase_600px.png
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>In this document</h2>
+    <ul>
+      <li><a href="#developer-guide">Create Apps Using the Developer Guide</a></li>
+      <li><a href="#community-overview">What Does the Android for Work DevHub Offer?</a></li>
+      <li><a href="#develop-apps">Develop Apps for Enterprises</a></li>
+      <li><a href="#manage-devices">Manage Devices and Apps</a></li>
+    </ul>
+  </div>
+</div>
+
+<p>
+  As an Android for Work developer, you can deploy devices and apps to
+  employees and keep your corporate data secure. With Android for
+  Work, organizations can choose what devices, APIs, and framework
+  they want to use to develop apps.
+</p>
+
+<p>
+  With Android for Work, you can:
+  <ul>
+    <li>Build apps to help employees be more productive in scenarios
+    such as bring your own device (BYOD), and corporate-owned,
+    single-use devices (COSU).</li>
+    <li>Connect with leading enterprise mobility management (EMM)
+    <a href="https://www.google.com/work/android/partners/"
+    >partners</a> to help integrate Android in your business.</li>
+  </ul>
+</p>
+
+<p>
+  Additionally, Android for Work offers a partner program for
+  developers through the
+  <a href="https://connect.googleforwork.com/community/applicants/android/isv"
+  >Android for Work DevHub</a>, which provides exclusive access to beta
+  features and developer events, along with access to a community of
+  Android developers making enterprise apps.
+</p>
+
+<h2 id="developer-guide">Create Apps Using the Developer Guide</h2>
+
+<p>
+  The <a href="{@docRoot}work/guide.html"
+  >Android for Work Developer Guide</a> is for developers who want to
+  create Android apps that best utilize and complement the features in
+  Android for Work. The guide defines the best practices to develop
+  and test enterprise-focused apps for Android devices running Android
+  for Work.
+</p>
+
+<h3>If you’re new to creating Android apps ...</h3>
+
+<p>
+  The Developer Guide assumes that you’re working as an independent
+  software vendor (ISV) or in a similar role, and have already built
+  an Android app. If you haven’t yet created an Android app, see
+  <a href="{@docRoot}training/basics/firstapp/index.html"
+  >Building Your First App</a>. If you’re looking for an accelerated
+  course, see the <a href="https://www.udacity.com/course/ud853"
+  >Developing Android Apps</a> course taught by Google employees.
+</p>
+
+<h2 id="community-overview">What Does the Android for Work DevHub Offer?</h2>
+
+<p>
+  The <a href="https://connect.googleforwork.com/community/applicants/android/isv"
+  >Android for Work DevHub</a> offers these incentives:
+</p>
+
+<h3>Get exclusives</h3>
+
+<p>
+  Access to beta features and Android for Work developer training and
+  events, including invite-only hackathons.
+</p>
+
+<h3>Learn from experts</h3>
+
+<p>
+  Special content from Android for Work experts, including how to
+  optimize your app for the Play for Work store so that businesses can
+  see your app.
+</p>
+
+<h3>Talk to others</h3>
+
+<p>
+  Access to a moderated space dedicated to enterprise developers. Talk
+  with peers about issues specific to developing Android apps for
+  businesses.
+</p>
+
+<h3>How do I join?</h3>
+
+<p>
+  Apply to join the
+  <a href="https://connect.googleforwork.com/community/applicants/android/isv"
+  >Android for Work DevHub</a>.
+</p>
+
+<h2 id="develop-apps">Develop Apps for Enterprises</h2>
+
+<p>
+  Learn how to make your app function smoothly in corporate
+  environments that restrict device features and data access. Go
+  further to support business use of your app by enabling restrictions
+  that administrators can use to remotely configure your app:
+</p>
+
+<div class="dynamic-grid">
+  <div class="resource-widget resource-flow-layout landing col-12"
+       data-query="collection:work/apps"
+       data-cardSizes="6x6"
+       data-maxResults="6">
+  </div>
+</div>
+
+
+<h2 id="manage-devices">Manage Devices and Apps</h2>
+
+<p>
+  Learn how to build policy controller apps that enable enterprise
+  administrators to manage devices, manage corporate apps, and provide
+  access to company resources:
+</p>
+
+<div class="dynamic-grid">
+  <div class="resource-widget resource-flow-layout landing col-12"
+       data-query="collection:work/admin"
+       data-cardSizes="6x6"
+       data-maxResults="4">
+  </div>
+</div>
diff --git a/docs/html/work/work_toc.cs b/docs/html/work/work_toc.cs
new file mode 100644
index 0000000..10658c2
--- /dev/null
+++ b/docs/html/work/work_toc.cs
@@ -0,0 +1,44 @@
+<ul id="nav">
+
+  <li class="nav-section">
+    <div class="nav-section-header empty">
+      <a href="<?cs var:toroot ?>work/index.html">
+        Android for Work Home</a>
+    </div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty">
+      <a href="<?cs var:toroot ?>work/overview.html">
+        Overview</a>
+    </div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty">
+      <a href="<?cs var:toroot ?>work/guide.html">
+        Developer Guide</a>
+    </div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty">
+      <a href="<?cs var:toroot ?>work/managed-profiles.html">
+        Set up Managed Profiles</a></div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty">
+      <a href="<?cs var:toroot ?>work/app-restrictions.html">
+        Set up App Restrictions</a>
+    </div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty">
+      <a href="<?cs var:toroot ?>work/cosu.html">
+        Set up Single-Purpose Devices</a>
+    </div>
+  </li>
+
+</ul>
diff --git a/graphics/java/android/graphics/Camera.java b/graphics/java/android/graphics/Camera.java
index 57e0f27..60588d0 100644
--- a/graphics/java/android/graphics/Camera.java
+++ b/graphics/java/android/graphics/Camera.java
@@ -163,6 +163,7 @@
     protected void finalize() throws Throwable {
         try {
             nativeDestructor();
+            native_instance = 0;
         } finally {
             super.finalize();
         }
diff --git a/graphics/java/android/graphics/ColorFilter.java b/graphics/java/android/graphics/ColorFilter.java
index 4838aa0..ac62bf4 100644
--- a/graphics/java/android/graphics/ColorFilter.java
+++ b/graphics/java/android/graphics/ColorFilter.java
@@ -40,6 +40,7 @@
             super.finalize();
         } finally {
             destroyFilter(native_instance);
+            native_instance = 0;
         }
     }
 
diff --git a/graphics/java/android/graphics/DrawFilter.java b/graphics/java/android/graphics/DrawFilter.java
index aaefce9..c7fdcb2 100644
--- a/graphics/java/android/graphics/DrawFilter.java
+++ b/graphics/java/android/graphics/DrawFilter.java
@@ -33,6 +33,7 @@
     protected void finalize() throws Throwable {
         try {
             nativeDestructor(mNativeInt);
+            mNativeInt = 0;
         } finally {
             super.finalize();
         }
diff --git a/graphics/java/android/graphics/Movie.java b/graphics/java/android/graphics/Movie.java
index ecb4255..c8f86c6 100644
--- a/graphics/java/android/graphics/Movie.java
+++ b/graphics/java/android/graphics/Movie.java
@@ -21,7 +21,7 @@
 import java.io.FileInputStream;
 
 public class Movie {
-    private final long mNativeMovie;
+    private long mNativeMovie;
 
     private Movie(long nativeMovie) {
         if (nativeMovie == 0) {
@@ -82,6 +82,7 @@
     protected void finalize() throws Throwable {
         try {
             nativeDestructor(mNativeMovie);
+            mNativeMovie = 0;
         } finally {
             super.finalize();
         }
diff --git a/graphics/java/android/graphics/Rasterizer.java b/graphics/java/android/graphics/Rasterizer.java
index c351d94e..f6a38fe 100644
--- a/graphics/java/android/graphics/Rasterizer.java
+++ b/graphics/java/android/graphics/Rasterizer.java
@@ -26,6 +26,7 @@
 
     protected void finalize() throws Throwable {
         finalizer(native_instance);
+        native_instance = 0;
     }
 
     private static native void finalizer(long native_instance);
diff --git a/graphics/java/android/graphics/Xfermode.java b/graphics/java/android/graphics/Xfermode.java
index 883350d..c049e41 100644
--- a/graphics/java/android/graphics/Xfermode.java
+++ b/graphics/java/android/graphics/Xfermode.java
@@ -33,6 +33,7 @@
     protected void finalize() throws Throwable {
         try {
             finalizer(native_instance);
+            native_instance = 0;
         } finally {
             super.finalize();
         }
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 8857c41..faf6a52 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -259,6 +259,7 @@
     tests/unit/SkiaBehaviorTests.cpp \
     tests/unit/SnapshotTests.cpp \
     tests/unit/StringUtilsTests.cpp \
+    tests/unit/TestUtilsTests.cpp \
     tests/unit/TextDropShadowCacheTests.cpp \
     tests/unit/VectorDrawableTests.cpp
 
diff --git a/libs/hwui/BakedOpDispatcher.cpp b/libs/hwui/BakedOpDispatcher.cpp
index 2ec7b75..59c1065 100644
--- a/libs/hwui/BakedOpDispatcher.cpp
+++ b/libs/hwui/BakedOpDispatcher.cpp
@@ -791,6 +791,16 @@
     renderer.renderGlop(state, glop);
 }
 
+void renderRectForLayer(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state,
+        int color, SkXfermode::Mode mode, SkColorFilter* colorFilter) {
+    SkPaint paint;
+    paint.setColor(color);
+    paint.setXfermodeMode(mode);
+    paint.setColorFilter(colorFilter);
+    RectOp rectOp(op.unmappedBounds, op.localMatrix, op.localClip, &paint);
+    BakedOpDispatcher::onRectOp(renderer, rectOp, state);
+}
+
 void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state) {
     // Note that we don't use op->paint in this function - it's never set on a LayerOp
     OffscreenBuffer* buffer = *op.layerHandle;
@@ -798,12 +808,9 @@
     if (CC_UNLIKELY(!buffer)) {
         // Layer was not allocated, which can occur if there were no draw ops inside. We draw the
         // equivalent by drawing a rect with the same layer properties (alpha/xfer/filter).
-        SkPaint paint;
-        paint.setAlpha(op.alpha * 255);
-        paint.setXfermodeMode(op.mode);
-        paint.setColorFilter(op.colorFilter);
-        RectOp rectOp(op.unmappedBounds, op.localMatrix, op.localClip, &paint);
-        BakedOpDispatcher::onRectOp(renderer, rectOp, state);
+        int color = SkColorSetA(SK_ColorTRANSPARENT, op.alpha * 255);
+        renderRectForLayer(renderer, op, state,
+                color, op.mode, op.colorFilter);
     } else {
         float layerAlpha = op.alpha * state.alpha;
         Glop glop;
@@ -817,6 +824,19 @@
                 .build();
         renderer.renderGlop(state, glop);
     }
+
+    if (buffer && !buffer->hasRenderedSinceRepaint) {
+        buffer->hasRenderedSinceRepaint = true;
+        if (CC_UNLIKELY(Properties::debugLayersUpdates)) {
+            // render debug layer highlight
+            renderRectForLayer(renderer, op, state,
+                    0x7f00ff00, SkXfermode::Mode::kSrcOver_Mode, nullptr);
+        } else if (CC_UNLIKELY(Properties::debugOverdraw)) {
+            // render transparent to increment overdraw for repaint area
+            renderRectForLayer(renderer, op, state,
+                    SK_ColorTRANSPARENT, SkXfermode::Mode::kSrcOver_Mode, nullptr);
+        }
+    }
 }
 
 void BakedOpDispatcher::onCopyToLayerOp(BakedOpRenderer& renderer, const CopyToLayerOp& op, const BakedOpState& state) {
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp
index 3c302b3..eed0126 100644
--- a/libs/hwui/BakedOpRenderer.cpp
+++ b/libs/hwui/BakedOpRenderer.cpp
@@ -55,6 +55,7 @@
     }
 
     mRenderTarget.offscreenBuffer = offscreenBuffer;
+    mRenderTarget.offscreenBuffer->hasRenderedSinceRepaint = false;
 
     // create and bind framebuffer
     mRenderTarget.frameBufferId = mRenderState.createFramebuffer();
diff --git a/libs/hwui/FrameBuilder.cpp b/libs/hwui/FrameBuilder.cpp
index 84c8a74..746e99a 100644
--- a/libs/hwui/FrameBuilder.cpp
+++ b/libs/hwui/FrameBuilder.cpp
@@ -81,7 +81,8 @@
         // only schedule repaint if node still on layer - possible it may have been
         // removed during a dropped frame, but layers may still remain scheduled so
         // as not to lose info on what portion is damaged
-        if (CC_LIKELY(layerNode->getLayer() != nullptr)) {
+        OffscreenBuffer* layer = layerNode->getLayer();
+        if (CC_LIKELY(layer)) {
             ATRACE_FORMAT("Optimize HW Layer DisplayList %s %ux%u",
                     layerNode->getName(), layerNode->getWidth(), layerNode->getHeight());
 
@@ -90,7 +91,7 @@
 
             // map current light center into RenderNode's coordinate space
             Vector3 lightCenter = mCanvasState.currentSnapshot()->getRelativeLightCenter();
-            layerNode->getLayer()->inverseTransformInWindow.mapPoint3d(lightCenter);
+            layer->inverseTransformInWindow.mapPoint3d(lightCenter);
 
             saveForLayer(layerNode->getWidth(), layerNode->getHeight(), 0, 0,
                     layerDamage, lightCenter, nullptr, layerNode);
diff --git a/libs/hwui/renderstate/OffscreenBufferPool.h b/libs/hwui/renderstate/OffscreenBufferPool.h
index 089f131..73a3392 100644
--- a/libs/hwui/renderstate/OffscreenBufferPool.h
+++ b/libs/hwui/renderstate/OffscreenBufferPool.h
@@ -77,6 +77,8 @@
     // vbo / size of mesh
     GLsizei elementCount = 0;
     GLuint vbo = 0;
+
+    bool hasRenderedSinceRepaint;
 };
 
 /**
diff --git a/libs/hwui/tests/common/TestUtils.h b/libs/hwui/tests/common/TestUtils.h
index dbaefa4..4536bef 100644
--- a/libs/hwui/tests/common/TestUtils.h
+++ b/libs/hwui/tests/common/TestUtils.h
@@ -74,6 +74,28 @@
     }; \
     void test_case_name##_##test_name##_RenderThreadTest::doTheThing(renderthread::RenderThread& renderThread)
 
+/**
+ * Sets a property value temporarily, generally for the duration of a test, restoring the previous
+ * value when going out of scope.
+ *
+ * Can be used e.g. to test behavior only active while Properties::debugOverdraw is enabled.
+ */
+template <typename T>
+class ScopedProperty {
+public:
+    ScopedProperty(T& property, T newValue)
+        : mPropertyPtr(&property)
+        , mOldValue(property) {
+        property = newValue;
+    }
+    ~ScopedProperty() {
+        *mPropertyPtr = mOldValue;
+    }
+private:
+    T* mPropertyPtr;
+    T mOldValue;
+};
+
 class TestUtils {
 public:
     class SignalingDtor {
diff --git a/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp b/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
index 5613f9f..01d3d70 100644
--- a/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
+++ b/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
@@ -16,21 +16,22 @@
 
 #include <gtest/gtest.h>
 
-#include <RecordedOp.h>
 #include <BakedOpDispatcher.h>
 #include <BakedOpRenderer.h>
 #include <FrameBuilder.h>
-#include <SkBlurDrawLooper.h>
+#include <LayerUpdateQueue.h>
 #include <hwui/Paint.h>
+#include <RecordedOp.h>
 #include <tests/common/TestUtils.h>
+#include <utils/Color.h>
 
+#include <SkBlurDrawLooper.h>
 #include <SkDashPathEffect.h>
 
 using namespace android::uirenderer;
 
 static BakedOpRenderer::LightInfo sLightInfo;
 const FrameBuilder::LightGeometry sLightGeometry = { {100, 100, 100}, 50};
-static Rect sBaseClip(100, 100);
 
 class ValidatingBakedOpRenderer : public BakedOpRenderer {
 public:
@@ -55,7 +56,7 @@
         std::function<void(const Glop& glop)> glopVerifier) {
     // Create op, and wrap with basic state.
     LinearAllocator allocator;
-    auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), sBaseClip);
+    auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(100, 100));
     auto state = BakedOpState::tryConstruct(allocator, *snapshot, *op);
     ASSERT_NE(nullptr, state);
 
@@ -194,4 +195,84 @@
 
     frameBuilder.replayBakedOps<BakedOpDispatcher>(renderer);
     ASSERT_EQ(3, glopCount) << "Exactly three glops expected";
-}
\ No newline at end of file
+}
+
+static void validateLayerDraw(renderthread::RenderThread& renderThread,
+        std::function<void(const Glop& glop)> validator) {
+    auto node = TestUtils::createNode(0, 0, 100, 100,
+            [](RenderProperties& props, TestCanvas& canvas) {
+        props.mutateLayerProperties().setType(LayerType::RenderLayer);
+
+        // provide different blend mode, so decoration draws contrast
+        props.mutateLayerProperties().setXferMode(SkXfermode::Mode::kSrc_Mode);
+        canvas.drawColor(Color::Black, SkXfermode::Mode::kSrcOver_Mode);
+    });
+    OffscreenBuffer** layerHandle = node->getLayerHandle();
+
+    auto syncedNode = TestUtils::getSyncedNode(node);
+
+    // create RenderNode's layer here in same way prepareTree would
+    OffscreenBuffer layer(renderThread.renderState(), Caches::getInstance(), 100, 100);
+    *layerHandle = &layer;
+    {
+        LayerUpdateQueue layerUpdateQueue; // Note: enqueue damage post-sync, so bounds are valid
+        layerUpdateQueue.enqueueLayerWithDamage(node.get(), Rect(0, 0, 100, 100));
+
+        ValidatingBakedOpRenderer renderer(renderThread.renderState(), validator);
+        FrameBuilder frameBuilder(SkRect::MakeWH(100, 100), 100, 100,
+                sLightGeometry, Caches::getInstance());
+        frameBuilder.deferLayers(layerUpdateQueue);
+        frameBuilder.deferRenderNode(*syncedNode);
+        frameBuilder.replayBakedOps<BakedOpDispatcher>(renderer);
+    }
+
+    // clean up layer pointer, so we can safely destruct RenderNode
+    *layerHandle = nullptr;
+}
+
+static FloatColor makeFloatColor(uint32_t color) {
+    FloatColor c;
+    c.set(color);
+    return c;
+}
+
+RENDERTHREAD_TEST(BakedOpDispatcher, layerUpdateProperties) {
+    for (bool debugOverdraw : { false, true }) {
+        for (bool debugLayersUpdates : { false, true }) {
+            ScopedProperty<bool> ovdProp(Properties::debugOverdraw, debugOverdraw);
+            ScopedProperty<bool> lupProp(Properties::debugLayersUpdates, debugLayersUpdates);
+
+            int glopCount = 0;
+            validateLayerDraw(renderThread, [&glopCount, &debugLayersUpdates](const Glop& glop) {
+                if (glopCount == 0) {
+                    // 0 - Black layer fill
+                    EXPECT_TRUE(glop.fill.colorEnabled);
+                    EXPECT_EQ(makeFloatColor(Color::Black), glop.fill.color);
+                } else if (glopCount == 1) {
+                    // 1 - Uncolored (textured) layer draw
+                    EXPECT_FALSE(glop.fill.colorEnabled);
+                } else if (glopCount == 2) {
+                    // 2 - layer overlay, if present
+                    EXPECT_TRUE(glop.fill.colorEnabled);
+                    // blend srcover, different from that of layer
+                    EXPECT_EQ(GLenum(GL_ONE), glop.blend.src);
+                    EXPECT_EQ(GLenum(GL_ONE_MINUS_SRC_ALPHA), glop.blend.dst);
+                    EXPECT_EQ(makeFloatColor(debugLayersUpdates ? 0x7f00ff00 : 0),
+                            glop.fill.color) << "Should be transparent green if debugLayersUpdates";
+                } else if (glopCount < 7) {
+                    // 3 - 6 - overdraw indicator overlays, if present
+                    EXPECT_TRUE(glop.fill.colorEnabled);
+                    uint32_t expectedColor = Caches::getInstance().getOverdrawColor(glopCount - 2);
+                    ASSERT_EQ(makeFloatColor(expectedColor), glop.fill.color);
+                } else {
+                    ADD_FAILURE() << "Too many glops observed";
+                }
+                glopCount++;
+            });
+            int expectedCount = 2;
+            if (debugLayersUpdates || debugOverdraw) expectedCount++;
+            if (debugOverdraw) expectedCount += 4;
+            EXPECT_EQ(expectedCount, glopCount);
+        }
+    }
+}
diff --git a/libs/hwui/tests/unit/SkiaBehaviorTests.cpp b/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
index e7e8af1..cd759cb 100644
--- a/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
+++ b/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
@@ -51,15 +51,20 @@
 }
 
 TEST(SkiaBehavior, lightingColorFilter_simplify) {
-    SkAutoTUnref<SkColorFilter> filter(SkColorMatrixFilter::CreateLightingFilter(0x11223344, 0));
+    {
+        SkAutoTUnref<SkColorFilter> filter(
+                SkColorMatrixFilter::CreateLightingFilter(0x11223344, 0));
 
-    SkColor observedColor;
-    SkXfermode::Mode observedMode;
-    ASSERT_TRUE(filter->asColorMode(&observedColor, &observedMode));
-    EXPECT_EQ(0xFF223344, observedColor);
-    EXPECT_EQ(SkXfermode::Mode::kModulate_Mode, observedMode);
+        SkColor observedColor;
+        SkXfermode::Mode observedMode;
+        ASSERT_TRUE(filter->asColorMode(&observedColor, &observedMode));
+        EXPECT_EQ(0xFF223344, observedColor);
+        EXPECT_EQ(SkXfermode::Mode::kModulate_Mode, observedMode);
+    }
 
-    SkAutoTUnref<SkColorFilter> failFilter(
-            SkColorMatrixFilter::CreateLightingFilter(0x11223344, 0x1));
-    EXPECT_FALSE(filter->asColorMode(nullptr, nullptr));
+    {
+        SkAutoTUnref<SkColorFilter> failFilter(
+                SkColorMatrixFilter::CreateLightingFilter(0x11223344, 0x1));
+        EXPECT_FALSE(failFilter->asColorMode(nullptr, nullptr));
+    }
 }
diff --git a/libs/hwui/tests/unit/TestUtilsTests.cpp b/libs/hwui/tests/unit/TestUtilsTests.cpp
new file mode 100644
index 0000000..4905957
--- /dev/null
+++ b/libs/hwui/tests/unit/TestUtilsTests.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2016 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 "tests/common/TestUtils.h"
+#include "Properties.h"
+
+#include <gtest/gtest.h>
+
+using namespace android::uirenderer;
+
+TEST(ScopedProperty, simpleBool) {
+    bool previous = Properties::debugOverdraw;
+    {
+        ScopedProperty<bool> debugOverdraw(Properties::debugOverdraw, true);
+        EXPECT_TRUE(Properties::debugOverdraw);
+    }
+    EXPECT_EQ(previous, Properties::debugOverdraw);
+    {
+        ScopedProperty<bool> debugOverdraw(Properties::debugOverdraw, false);
+        EXPECT_FALSE(Properties::debugOverdraw);
+    }
+    EXPECT_EQ(previous, Properties::debugOverdraw);
+}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 7444797..9d4b50c 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -218,23 +218,18 @@
         state.showAdvanced = Shared.shouldShowDeviceRoot(this, intent);
         // Menu option is shown for whitelisted intents if advanced roots are not shown by default.
         state.showAdvancedOption = !state.showAdvanced && (
-                !directLaunch(intent) ||
-                state.action == ACTION_OPEN ||
-                state.action == ACTION_CREATE ||
-                state.action == ACTION_OPEN_TREE ||
-                state.action == ACTION_PICK_COPY_DESTINATION ||
-                state.action == ACTION_GET_CONTENT);
+                Shared.shouldShowFancyFeatures(this)
+                || state.action == ACTION_OPEN
+                || state.action == ACTION_CREATE
+                || state.action == ACTION_OPEN_TREE
+                || state.action == ACTION_PICK_COPY_DESTINATION
+                || state.action == ACTION_GET_CONTENT);
 
         if (DEBUG) Log.d(mTag, "Created new state object: " + state);
 
         return state;
     }
 
-    private static boolean directLaunch(Intent intent) {
-        return LauncherActivity.isLaunchUri(intent.getData())
-                && intent.hasExtra(Shared.EXTRA_STACK);
-    }
-
     public void setRootsDrawerOpen(boolean open) {
         mNavigator.revealRootsDrawer(open);
     }
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
index 84fc6fe..57c14e9 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
@@ -201,7 +201,7 @@
         createDir.setEnabled(canCreateDirectory());
         pasteFromCb.setEnabled(mClipper.hasItemsToPaste());
         settings.setVisible(root.hasSettings());
-        newWindow.setVisible(true);
+        newWindow.setVisible(Shared.shouldShowFancyFeatures(this));
 
         Menus.disableHiddenItems(menu, pasteFromCb);
         // It hides icon if searching in progress
diff --git a/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java b/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
index 5cb6ca3..5e27e78 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
@@ -25,6 +25,7 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.DocumentsContract;
 import android.support.annotation.Nullable;
 import android.util.Log;
 
@@ -44,6 +45,15 @@
     private static final String LAUNCH_CONTROL_AUTHORITY = "com.android.documentsui.launchControl";
     private static final String TAG = "LauncherActivity";
 
+    // Array of boolean extras that should be copied when creating new launch intents.
+    // Missing intents will be ignored.
+    private static final String[] PERSISTENT_BOOLEAN_EXTRAS = {
+        DocumentsContract.EXTRA_SHOW_FILESIZE,
+        DocumentsContract.EXTRA_SHOW_ADVANCED,
+        DocumentsContract.EXTRA_FANCY_FEATURES,
+        Shared.EXTRA_PRODUCTIVITY_MODE
+    };
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -94,11 +104,7 @@
         // Relay any config overrides bits present in the original intent.
         Intent original = activity.getIntent();
         if (original != null) {
-            if (original.hasExtra(Shared.EXTRA_PRODUCTIVITY_MODE)) {
-                intent.putExtra(
-                        Shared.EXTRA_PRODUCTIVITY_MODE,
-                        original.getBooleanExtra(Shared.EXTRA_PRODUCTIVITY_MODE, false));
-            }
+            copyExtras(original, intent);
             if (original.hasExtra(Intent.EXTRA_TITLE)) {
                 intent.putExtra(
                         Intent.EXTRA_TITLE,
@@ -108,6 +114,14 @@
         return intent;
     }
 
+    private static void copyExtras(Intent src, Intent dest) {
+        for (String extra : PERSISTENT_BOOLEAN_EXTRAS) {
+            if (src.hasExtra(extra)) {
+                dest.putExtra(extra, src.getBooleanExtra(extra, false));
+            }
+        }
+    }
+
     private static Uri buildLaunchUri() {
         return new Uri.Builder()
                 .authority(LAUNCH_CONTROL_AUTHORITY)
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Shared.java b/packages/DocumentsUI/src/com/android/documentsui/Shared.java
index 784d30f..145637c 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/Shared.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/Shared.java
@@ -16,6 +16,7 @@
 
 package com.android.documentsui;
 
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.Intent;
@@ -183,13 +184,6 @@
     /*
      * Returns true if app is running in "productivity mode".
      */
-    public static boolean productivityMode(Context context) {
-        return context.getResources().getBoolean(R.bool.productivity_device);
-    }
-
-    /*
-     * Returns true if app is running in "productivity mode".
-     */
     private static boolean isProductivityMode(Context context, Intent intent) {
         return intent.getBooleanExtra(
                 Shared.EXTRA_PRODUCTIVITY_MODE,
@@ -210,4 +204,13 @@
         return isProductivityMode(context, intent)
                 || intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, false);
     }
+
+    /**
+     * Returns true if device root should be shown.
+     */
+    public static boolean shouldShowFancyFeatures(Activity activity) {
+        Intent intent = activity.getIntent();
+        return isProductivityMode(activity, intent)
+                || intent.getBooleanExtra(DocumentsContract.EXTRA_FANCY_FEATURES, false);
+    }
 }
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java b/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java
index 84745b2..366add0b 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java
@@ -49,6 +49,7 @@
                 final Intent intent = new Intent(DocumentsContract.ACTION_BROWSE);
                 intent.setData(uri);
                 intent.addCategory(Intent.CATEGORY_DEFAULT);
+                intent.putExtra(DocumentsContract.EXTRA_FANCY_FEATURES, true);
                 this.startActivity(intent);
             } catch (IOException exception) {
                 Log.e(MtpDocumentsProvider.TAG, "Failed to open device", exception);
diff --git a/packages/PrintRecommendationService/res/values/strings.xml b/packages/PrintRecommendationService/res/values/strings.xml
index 2d127e2..97281de 100644
--- a/packages/PrintRecommendationService/res/values/strings.xml
+++ b/packages/PrintRecommendationService/res/values/strings.xml
@@ -25,7 +25,7 @@
     <string name="plugin_vendor_xerox">Xerox</string>
     <string name="plugin_vendor_samsung">Samsung Electronics</string>
     <string name="plugin_vendor_epson">Epson</string>
-    <string name="plugin_vendor_konika_minolta">Konika Minolta</string>
+    <string name="plugin_vendor_konica_minolta">Konica Minolta</string>
     <string name="plugin_vendor_fuji">Fuji</string>
     <string name="plugin_vendor_morpia">Mopria</string>
 </resources>
diff --git a/packages/PrintRecommendationService/res/xml/vendorconfigs.xml b/packages/PrintRecommendationService/res/xml/vendorconfigs.xml
index 98d466c..b7925df 100644
--- a/packages/PrintRecommendationService/res/xml/vendorconfigs.xml
+++ b/packages/PrintRecommendationService/res/xml/vendorconfigs.xml
@@ -67,10 +67,9 @@
     </vendor>
 
     <vendor>
-        <name>@string/plugin_vendor_konika_minolta</name>
+        <name>@string/plugin_vendor_konica_minolta</name>
         <package>com.kmbt.printservice</package>
         <mdns-names>
-            <mdns-name>kmkmkm</mdns-name>
             <mdns-name>Konica Minolta</mdns-name>
             <mdns-name>Minolta</mdns-name>
         </mdns-names>
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
index 8b1fd08..241581d 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
@@ -683,6 +683,10 @@
                 }
             });
         } else if (resultCode == RESULT_CANCELED) {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "[state]" + STATE_CONFIGURING);
+            }
+
             mState = STATE_CONFIGURING;
 
             // The previous update might have been canceled
@@ -898,9 +902,15 @@
     private void setState(int state) {
         if (isFinalState(mState)) {
             if (isFinalState(state)) {
+                if (DEBUG) {
+                    Log.i(LOG_TAG, "[state]" + state);
+                }
                 mState = state;
             }
         } else {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "[state]" + state);
+            }
             mState = state;
         }
     }
@@ -2896,13 +2906,20 @@
         }
 
         public int cancel() {
-            if (!mPosted) {
-                return getStateAfterCancel();
-            }
-            mPosted = false;
-            mHandler.removeCallbacks(this);
+            int state;
 
-            return getStateAfterCancel();
+            if (!mPosted) {
+                state = getStateAfterCancel();
+            } else {
+                mPosted = false;
+                mHandler.removeCallbacks(this);
+
+                state = getStateAfterCancel();
+            }
+
+            mPreviousState = -1;
+
+            return state;
         }
 
         @Override
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java b/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java
index 48533fa..8512dca 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java
@@ -42,35 +42,25 @@
     private final SparseIntArray mKeyToIndexMap = new SparseIntArray();
 
     @GuardedBy("mLock")
-    private final MemoryIntArray mImpl;
+    private MemoryIntArray mBackingStore;
 
     public GenerationRegistry(Object lock) {
         mLock = lock;
-        // One for the global table, two for system and secure tables for a
-        // managed profile (managed profile is not included in the max user
-        // count), ten for partially deleted users if users are quickly removed,
-        // and twice max user count for system and secure.
-        final int size = 1 + 2 + 10 + 2 * UserManager.getMaxSupportedUsers();
-        MemoryIntArray impl = null;
-        try {
-            impl = new MemoryIntArray(size, false);
-        } catch (IOException e) {
-            Slog.e(LOG_TAG, "Error creating generation tracker", e);
-        }
-        mImpl = impl;
     }
 
     public void incrementGeneration(int key) {
         synchronized (mLock) {
-            if (mImpl != null) {
+            MemoryIntArray backingStore = getBackingStoreLocked();
+            if (backingStore != null) {
                 try {
-                    final int index = getKeyIndexLocked(key);
+                    final int index = getKeyIndexLocked(key, mKeyToIndexMap, backingStore);
                     if (index >= 0) {
-                        final int generation = mImpl.get(index) + 1;
-                        mImpl.set(index, generation);
+                        final int generation = backingStore.get(index) + 1;
+                        backingStore.set(index, generation);
                     }
                 } catch (IOException e) {
                     Slog.e(LOG_TAG, "Error updating generation id", e);
+                    destroyBackingStore();
                 }
             }
         }
@@ -78,34 +68,98 @@
 
     public void addGenerationData(Bundle bundle, int key) {
         synchronized (mLock) {
-            if (mImpl != null) {
-                final int index = getKeyIndexLocked(key);
-                if (index >= 0) {
-                    bundle.putParcelable(Settings.CALL_METHOD_TRACK_GENERATION_KEY, mImpl);
-                    bundle.putInt(Settings.CALL_METHOD_GENERATION_INDEX_KEY, index);
-                    if (DEBUG) {
-                        Slog.i(LOG_TAG, "Exported index:" + index + " for key:"
-                                + SettingsProvider.keyToString(key));
+            MemoryIntArray backingStore = getBackingStoreLocked();
+            try {
+                if (backingStore != null) {
+                    final int index = getKeyIndexLocked(key, mKeyToIndexMap, backingStore);
+                    if (index >= 0) {
+                        bundle.putParcelable(Settings.CALL_METHOD_TRACK_GENERATION_KEY,
+                                backingStore);
+                        bundle.putInt(Settings.CALL_METHOD_GENERATION_INDEX_KEY, index);
+                        if (DEBUG) {
+                            Slog.i(LOG_TAG, "Exported index:" + index + " for key:"
+                                    + SettingsProvider.keyToString(key));
+                        }
                     }
                 }
+            } catch (IOException e) {
+                Slog.e(LOG_TAG, "Error adding generation data", e);
+                destroyBackingStore();
+            }
+        }
+    }
+
+    public void onUserRemoved(int userId) {
+        synchronized (mLock) {
+            MemoryIntArray backingStore = getBackingStoreLocked();
+            if (backingStore != null && mKeyToIndexMap.size() > 0) {
+                try {
+                    final int secureKey = SettingsProvider.makeKey(
+                            SettingsProvider.SETTINGS_TYPE_SECURE, userId);
+                    resetSlotForKeyLocked(secureKey, mKeyToIndexMap, backingStore);
+
+                    final int systemKey = SettingsProvider.makeKey(
+                            SettingsProvider.SETTINGS_TYPE_SYSTEM, userId);
+                    resetSlotForKeyLocked(systemKey, mKeyToIndexMap, backingStore);
+                } catch (IOException e) {
+                    Slog.e(LOG_TAG, "Error cleaning up for user", e);
+                    destroyBackingStore();
+                }
             }
         }
     }
 
-    private int getKeyIndexLocked(int key) {
-        int index = mKeyToIndexMap.get(key, -1);
+    private MemoryIntArray getBackingStoreLocked() {
+        if (mBackingStore == null) {
+            // One for the global table, two for system and secure tables for a
+            // managed profile (managed profile is not included in the max user
+            // count), ten for partially deleted users if users are quickly removed,
+            // and twice max user count for system and secure.
+            final int size = 1 + 2 + 10 + 2 * UserManager.getMaxSupportedUsers();
+            try {
+                mBackingStore = new MemoryIntArray(size, false);
+            } catch (IOException e) {
+                Slog.e(LOG_TAG, "Error creating generation tracker", e);
+            }
+        }
+        return mBackingStore;
+    }
+
+    private void destroyBackingStore() {
+        if (mBackingStore != null) {
+            try {
+                mBackingStore.close();
+            } catch (IOException e) {
+                Slog.e(LOG_TAG, "Cannot close generation memory array", e);
+            }
+            mBackingStore = null;
+        }
+    }
+
+    private static void resetSlotForKeyLocked(int key, SparseIntArray keyToIndexMap,
+            MemoryIntArray backingStore) throws IOException {
+        final int index = keyToIndexMap.get(key, -1);
+        if (index >= 0) {
+            keyToIndexMap.delete(key);
+            backingStore.set(index, 0);
+            if (DEBUG) {
+                Slog.i(LOG_TAG, "Freed index:" + index + " for key:"
+                        + SettingsProvider.keyToString(key));
+            }
+        }
+    }
+
+    private static int getKeyIndexLocked(int key, SparseIntArray keyToIndexMap,
+            MemoryIntArray backingStore) throws IOException {
+        int index = keyToIndexMap.get(key, -1);
         if (index < 0) {
-            index = findNextEmptyIndex();
+            index = findNextEmptyIndex(backingStore);
             if (index >= 0) {
-                try {
-                    mImpl.set(index, 1);
-                    mKeyToIndexMap.append(key, index);
-                    if (DEBUG) {
-                        Slog.i(LOG_TAG, "Allocated index:" + index + " for key:"
-                                + SettingsProvider.keyToString(key));
-                    }
-                } catch (IOException e) {
-                    Slog.e(LOG_TAG, "Cannot write to generation memory array", e);
+                backingStore.set(index, 1);
+                keyToIndexMap.append(key, index);
+                if (DEBUG) {
+                    Slog.i(LOG_TAG, "Allocated index:" + index + " for key:"
+                            + SettingsProvider.keyToString(key));
                 }
             } else {
                 Slog.e(LOG_TAG, "Could not allocate generation index");
@@ -114,47 +168,13 @@
         return index;
     }
 
-    public void onUserRemoved(int userId) {
-        synchronized (mLock) {
-            if (mImpl != null && mKeyToIndexMap.size() > 0) {
-                final int secureKey = SettingsProvider.makeKey(
-                        SettingsProvider.SETTINGS_TYPE_SECURE, userId);
-                resetSlotForKeyLocked(secureKey);
-
-                final int systemKey = SettingsProvider.makeKey(
-                        SettingsProvider.SETTINGS_TYPE_SYSTEM, userId);
-                resetSlotForKeyLocked(systemKey);
+    private static int findNextEmptyIndex(MemoryIntArray backingStore) throws IOException {
+        final int size = backingStore.size();
+        for (int i = 0; i < size; i++) {
+            if (backingStore.get(i) == 0) {
+                return i;
             }
         }
-    }
-
-    private void resetSlotForKeyLocked(int key) {
-        final int index = mKeyToIndexMap.get(key, -1);
-        if (index >= 0) {
-            mKeyToIndexMap.delete(key);
-            try {
-                mImpl.set(index, 0);
-                if (DEBUG) {
-                    Slog.i(LOG_TAG, "Freed index:" + index + " for key:"
-                            + SettingsProvider.keyToString(key));
-                }
-            } catch (IOException e) {
-                Slog.e(LOG_TAG, "Cannot write to generation memory array", e);
-            }
-        }
-    }
-
-    private int findNextEmptyIndex() {
-        try {
-            final int size = mImpl.size();
-            for (int i = 0; i < size; i++) {
-                if (mImpl.get(i) == 0) {
-                    return i;
-                }
-            }
-        } catch (IOException e) {
-            Slog.e(LOG_TAG, "Error reading generation memory array", e);
-        }
         return -1;
     }
 }
\ No newline at end of file
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 596e5a8..774be60 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -46,6 +46,7 @@
 import android.os.DropBoxManager;
 import android.os.Environment;
 import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.Message;
 import android.os.ParcelFileDescriptor;
@@ -199,6 +200,9 @@
     @GuardedBy("mLock")
     private SettingsRegistry mSettingsRegistry;
 
+    @GuardedBy("mLock")
+    private HandlerThread mHandlerThread;
+
     // We have to call in the user manager with no lock held,
     private volatile UserManager mUserManager;
 
@@ -244,6 +248,9 @@
         synchronized (mLock) {
             mUserManager = UserManager.get(getContext());
             mPackageManager = AppGlobals.getPackageManager();
+            mHandlerThread = new HandlerThread(LOG_TAG,
+                    Process.THREAD_PRIORITY_BACKGROUND);
+            mHandlerThread.start();
             mSettingsRegistry = new SettingsRegistry();
         }
         registerBroadcastReceivers();
@@ -1669,7 +1676,7 @@
             if (mSettingsStates.get(key) == null) {
                 final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key));
                 SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key,
-                        maxBytesPerPackage);
+                        maxBytesPerPackage, mHandlerThread.getLooper());
                 mSettingsStates.put(key, settingsState);
             }
         }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
index 2de0618c..4710d5a 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
@@ -17,6 +17,7 @@
 package com.android.providers.settings;
 
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
 import android.os.SystemClock;
 import android.provider.Settings;
@@ -27,7 +28,6 @@
 import android.util.Slog;
 import android.util.Xml;
 import com.android.internal.annotations.GuardedBy;
-import com.android.internal.os.BackgroundThread;
 import libcore.io.IoUtils;
 import libcore.util.Objects;
 import org.xmlpull.v1.XmlPullParser;
@@ -95,7 +95,7 @@
 
     private final Object mLock;
 
-    private final Handler mHandler = new MyHandler();
+    private final Handler mHandler;
 
     @GuardedBy("mLock")
     private final ArrayMap<String, Setting> mSettings = new ArrayMap<>();
@@ -134,13 +134,15 @@
     @GuardedBy("mLock")
     private long mNextId;
 
-    public SettingsState(Object lock, File file, int key, int maxBytesPerAppPackage) {
+    public SettingsState(Object lock, File file, int key, int maxBytesPerAppPackage,
+            Looper looper) {
         // It is important that we use the same lock as the settings provider
         // to ensure multiple mutations on this state are atomicaly persisted
         // as the async persistence should be blocked while we make changes.
         mLock = lock;
         mStatePersistFile = file;
         mKey = key;
+        mHandler = new MyHandler(looper);
         if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) {
             mMaxBytesPerAppPackage = maxBytesPerAppPackage;
             mPackageToMemoryUsage = new ArrayMap<>();
@@ -546,8 +548,8 @@
     private final class MyHandler extends Handler {
         public static final int MSG_PERSIST_SETTINGS = 1;
 
-        public MyHandler() {
-            super(BackgroundThread.getHandler().getLooper());
+        public MyHandler(Looper looper) {
+            super(looper);
         }
 
         @Override
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
index 3f9ffa1..b5bd8ad 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
@@ -15,6 +15,8 @@
  */
 package com.android.providers.settings;
 
+import android.os.Handler;
+import android.os.Looper;
 import android.test.AndroidTestCase;
 import android.util.Xml;
 
@@ -126,7 +128,7 @@
         final Object lock = new Object();
 
         final SettingsState ssWriter = new SettingsState(lock, file, 1,
-                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED);
+                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());
         ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING);
 
         ssWriter.insertSettingLocked("k1", "\u0000", "package");
@@ -138,7 +140,7 @@
         }
 
         final SettingsState ssReader = new SettingsState(lock, file, 1,
-                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED);
+                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());
         synchronized (lock) {
             assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue());
             assertEquals("abc", ssReader.getSettingLocked("k2").getValue());
@@ -165,7 +167,7 @@
         os.close();
 
         final SettingsState ss = new SettingsState(lock, file, 1,
-                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED);
+                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());
         synchronized (lock) {
             SettingsState.Setting s;
             s = ss.getSettingLocked("k0");
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 4e9b59f..9c0aa35d 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -111,6 +111,7 @@
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
     <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
+    <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
     <!-- Permission needed to rename bugreport notifications (so they're not shown as Shell) -->
     <uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />
 
diff --git a/packages/SystemUI/res/layout/notification_guts.xml b/packages/SystemUI/res/layout/notification_guts.xml
index 4d72cc8..d09c42b 100644
--- a/packages/SystemUI/res/layout/notification_guts.xml
+++ b/packages/SystemUI/res/layout/notification_guts.xml
@@ -63,14 +63,14 @@
             android:id="@+id/importance_buttons"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginStart="-6dp"
+            android:paddingStart="3dp"
             android:paddingTop="4dp"
             android:paddingEnd="8dp" >
         <RadioButton
                 android:id="@+id/silent_importance"
                 android:layout_width="wrap_content"
                 android:layout_height="40dp"
-                android:paddingStart="32dp"
+                android:paddingStart="22dp"
                 android:text="@string/show_silently"
                 style="@style/TextAppearance.NotificationGuts.Radio"
                 android:buttonTint="@color/notification_guts_buttons" />
@@ -78,7 +78,7 @@
                 android:id="@+id/block_importance"
                 android:layout_width="wrap_content"
                 android:layout_height="40dp"
-                android:paddingStart="32dp"
+                android:paddingStart="22dp"
                 android:text="@string/block"
                 style="@style/TextAppearance.NotificationGuts.Radio"
                 android:buttonTint="@color/notification_guts_buttons" />
@@ -86,7 +86,7 @@
                 android:id="@+id/reset_importance"
                 android:layout_width="wrap_content"
                 android:layout_height="40dp"
-                android:paddingStart="32dp"
+                android:paddingStart="22dp"
                 style="@style/TextAppearance.NotificationGuts.Radio"
                 android:buttonTint="@color/notification_guts_buttons" />
     </RadioGroup>
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 0962d84..f76a68c 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -31,6 +31,7 @@
 import android.opengl.GLUtils;
 import android.os.AsyncTask;
 import android.os.SystemProperties;
+import android.os.Trace;
 import android.renderscript.Matrix4f;
 import android.service.wallpaper.WallpaperService;
 import android.util.Log;
@@ -166,8 +167,9 @@
         }
 
         public void trimMemory(int level) {
-            if (level >= ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW &&
-                    mBackground != null) {
+            if (level >= ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW
+                    && level <= ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL
+                    && mBackground != null) {
                 if (DEBUG) {
                     Log.d(TAG, "trimMemory");
                 }
@@ -309,8 +311,6 @@
                 Log.d(TAG, "onSurfaceRedrawNeeded");
             }
             super.onSurfaceRedrawNeeded(holder);
-
-            mLastSurfaceHeight = mLastSurfaceWidth = -1;
             drawFrame();
         }
 
@@ -324,6 +324,7 @@
                 return;
             }
             try {
+                Trace.traceBegin(Trace.TRACE_TAG_VIEW, "drawWallpaper");
                 DisplayInfo displayInfo = getDefaultDisplayInfo();
                 int newRotation = displayInfo.rotation;
 
@@ -418,6 +419,7 @@
                     drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels);
                 }
             } finally {
+                Trace.traceEnd(Trace.TRACE_TAG_VIEW);
                 if (FIXED_SIZED_SURFACE && !mIsHwAccelerated) {
                     // If the surface is fixed-size, we should only need to
                     // draw it once and then we'll let the window manager
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index a5f3e77..0f356e0 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -107,6 +107,7 @@
     private boolean mFinishedOnStartup;
     private boolean mIgnoreAltTabRelease;
     private boolean mIsVisible;
+    private boolean mReceivedNewIntent;
 
     // Top level views
     private RecentsView mRecentsView;
@@ -120,6 +121,9 @@
     private int mFocusTimerDuration;
     private DozeTrigger mIterateTrigger;
     private final UserInteractionEvent mUserInteractionEvent = new UserInteractionEvent();
+    private final Runnable mSendEnterWindowAnimationCompleteRunnable = () -> {
+        EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
+    };
 
     /**
      * A common Runnable to finish Recents by launching Home with an animation depending on the
@@ -342,6 +346,7 @@
     @Override
     protected void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
+        mReceivedNewIntent = true;
 
         // Reload the stack view
         reloadStackView();
@@ -364,7 +369,7 @@
         RecentsActivityLaunchState launchState = config.getLaunchState();
         if (!loadPlan.hasTasks()) {
             loader.preloadTasks(loadPlan, launchState.launchedToTaskId,
-                    launchState.launchedFromHome);
+                    !launchState.launchedFromHome);
         }
 
         RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options();
@@ -419,7 +424,16 @@
     @Override
     public void onEnterAnimationComplete() {
         super.onEnterAnimationComplete();
-        EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
+
+        // Workaround for b/28705801, on first docking, we may receive the enter animation callback
+        // before the first layout, so in such cases, send the event on the next frame after all
+        // the views are laid out and attached (and registered to the EventBus).
+        mHandler.removeCallbacks(mSendEnterWindowAnimationCompleteRunnable);
+        if (!mReceivedNewIntent) {
+            mHandler.post(mSendEnterWindowAnimationCompleteRunnable);
+        } else {
+            mSendEnterWindowAnimationCompleteRunnable.run();
+        }
     }
 
     @Override
@@ -453,7 +467,8 @@
         RecentsActivityLaunchState launchState = config.getLaunchState();
         RecentsTaskLoader loader = Recents.getTaskLoader();
         RecentsTaskLoadPlan loadPlan = loader.createLoadPlan(this);
-        loader.preloadTasks(loadPlan, -1 /* runningTaskId */, false /* isHomeStackVisible */);
+        loader.preloadTasks(loadPlan, -1 /* runningTaskId */,
+                false /* includeFrontMostExcludedTask */);
 
         RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options();
         loadOpts.numVisibleTasks = launchState.launchedNumVisibleTasks;
@@ -477,6 +492,7 @@
 
         // Notify that recents is now hidden
         mIsVisible = false;
+        mReceivedNewIntent = false;
         EventBus.getDefault().send(new RecentsVisibilityChangedEvent(this, false));
         MetricsLogger.hidden(this, MetricsEvent.OVERVIEW_ACTIVITY);
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
index 297dec9..cfc6c52 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
@@ -112,7 +112,7 @@
 
                 // Load the next task only if we aren't svelte
                 RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext);
-                loader.preloadTasks(plan, -1, true /* isHomeStackVisible */);
+                loader.preloadTasks(plan, -1, false /* includeFrontMostExcludedTask */);
                 RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
                 // This callback is made when a new activity is launched and the old one is paused
                 // so ignore the current activity and try and preload the thumbnail for the
@@ -189,7 +189,7 @@
         // We can use a new plan since the caches will be the same.
         RecentsTaskLoader loader = Recents.getTaskLoader();
         RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext);
-        loader.preloadTasks(plan, -1, true /* isHomeStackVisible */);
+        loader.preloadTasks(plan, -1, false /* includeFrontMostExcludedTask */);
         RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
         launchOpts.numVisibleTasks = loader.getIconCacheSize();
         launchOpts.numVisibleTaskThumbnails = loader.getThumbnailCacheSize();
@@ -366,8 +366,8 @@
             ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask();
             RecentsTaskLoader loader = Recents.getTaskLoader();
             sInstanceLoadPlan = loader.createLoadPlan(mContext);
-            sInstanceLoadPlan.preloadRawTasks(isHomeStackVisible.value);
-            loader.preloadTasks(sInstanceLoadPlan, runningTask.id, isHomeStackVisible.value);
+            sInstanceLoadPlan.preloadRawTasks(!isHomeStackVisible.value);
+            loader.preloadTasks(sInstanceLoadPlan, runningTask.id, !isHomeStackVisible.value);
             TaskStack stack = sInstanceLoadPlan.getTaskStack();
             if (stack.getTaskCount() > 0) {
                 // Only preload the icon (but not the thumbnail since it may not have been taken for
@@ -401,7 +401,7 @@
         SystemServicesProxy ssp = Recents.getSystemServices();
         RecentsTaskLoader loader = Recents.getTaskLoader();
         RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext);
-        loader.preloadTasks(plan, -1, true /* isHomeStackVisible */);
+        loader.preloadTasks(plan, -1, false /* includeFrontMostExcludedTask */);
         TaskStack focusedStack = plan.getTaskStack();
 
         // Return early if there are no tasks in the focused stack
@@ -453,7 +453,7 @@
         SystemServicesProxy ssp = Recents.getSystemServices();
         RecentsTaskLoader loader = Recents.getTaskLoader();
         RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext);
-        loader.preloadTasks(plan, -1, true /* isHomeStackVisible */);
+        loader.preloadTasks(plan, -1, false /* includeFrontMostExcludedTask */);
         TaskStack focusedStack = plan.getTaskStack();
 
         // Return early if there are no tasks in the focused stack
@@ -818,7 +818,7 @@
             sInstanceLoadPlan = loader.createLoadPlan(mContext);
         }
         if (mLaunchedWhileDocking || mTriggeredFromAltTab || !sInstanceLoadPlan.hasTasks()) {
-            loader.preloadTasks(sInstanceLoadPlan, runningTask.id, isHomeStackVisible);
+            loader.preloadTasks(sInstanceLoadPlan, runningTask.id, !isHomeStackVisible);
         }
 
         TaskStack stack = sInstanceLoadPlan.getTaskStack();
@@ -826,7 +826,7 @@
         boolean useThumbnailTransition = (runningTask != null) && !isHomeStackVisible && hasRecentTasks;
 
         // Update the launch state that we need in updateHeaderBarLayout()
-        launchState.launchedFromHome = !useThumbnailTransition;
+        launchState.launchedFromHome = !useThumbnailTransition && !mLaunchedWhileDocking;
         launchState.launchedFromApp = useThumbnailTransition || mLaunchedWhileDocking;
         launchState.launchedViaDockGesture = mLaunchedWhileDocking;
         launchState.launchedViaDragGesture = mDraggingInRecents;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
index 08b52d9..15bc279 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -253,11 +253,12 @@
     /**
      * Returns a list of the recents tasks.
      *
-     * @param isHomeStackVisible whether or not the home stack is currently visible.  If it is
-     *                           visible, then we ignore all excluded tasks (even the first one).
+     * @param includeFrontMostExcludedTask if set, will ensure that the front most excluded task
+     *                                     will be visible, otherwise no excluded tasks will be
+     *                                     visible.
      */
     public List<ActivityManager.RecentTaskInfo> getRecentTasks(int numLatestTasks, int userId,
-            boolean isHomeStackVisible, ArraySet<Integer> quietProfileIds) {
+            boolean includeFrontMostExcludedTask, ArraySet<Integer> quietProfileIds) {
         if (mAm == null) return null;
 
         // If we are mocking, then create some recent tasks
@@ -295,13 +296,16 @@
         // Remove home/recents/excluded tasks
         int minNumTasksToQuery = 10;
         int numTasksToQuery = Math.max(minNumTasksToQuery, numLatestTasks);
-        List<ActivityManager.RecentTaskInfo> tasks = mAm.getRecentTasksForUser(numTasksToQuery,
-                ActivityManager.RECENT_IGNORE_HOME_STACK_TASKS |
+        int flags = ActivityManager.RECENT_IGNORE_HOME_STACK_TASKS |
                 ActivityManager.RECENT_INGORE_DOCKED_STACK_TOP_TASK |
                 ActivityManager.RECENT_INGORE_PINNED_STACK_TASKS |
                 ActivityManager.RECENT_IGNORE_UNAVAILABLE |
-                ActivityManager.RECENT_INCLUDE_PROFILES |
-                ActivityManager.RECENT_WITH_EXCLUDED, userId);
+                ActivityManager.RECENT_INCLUDE_PROFILES;
+        if (includeFrontMostExcludedTask) {
+            flags |= ActivityManager.RECENT_WITH_EXCLUDED;
+        }
+        List<ActivityManager.RecentTaskInfo> tasks = mAm.getRecentTasksForUser(numTasksToQuery,
+                flags, userId);
 
         // Break early if we can't get a valid set of tasks
         if (tasks == null) {
@@ -316,18 +320,21 @@
             // NOTE: The order of these checks happens in the expected order of the traversal of the
             // tasks
 
-            // Check the first non-recents task, include this task even if it is marked as excluded
-            // from recents if we are currently in the app.  In other words, only remove excluded
-            // tasks if it is not the first active task, and not in the blacklist.
-            boolean isExcluded = (t.baseIntent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
-                    == Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
-            boolean isBlackListed = sRecentsBlacklist.contains(t.realActivity.getClassName());
-            // Filter out recent tasks from managed profiles which are in quiet mode.
-            isExcluded |= quietProfileIds.contains(t.userId);
-            if (isBlackListed || (isExcluded && (isHomeStackVisible || !isFirstValidTask))) {
+            // Remove the task if it is blacklisted
+            if (sRecentsBlacklist.contains(t.realActivity.getClassName())) {
                 iter.remove();
                 continue;
             }
+
+            // Remove the task if it is marked as excluded, unless it is the first most task and we
+            // are requested to include it
+            boolean isExcluded = (t.baseIntent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
+                    == Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
+            isExcluded |= quietProfileIds.contains(t.userId);
+            if (isExcluded && (!isFirstValidTask || !includeFrontMostExcludedTask)) {
+                iter.remove();
+            }
+
             isFirstValidTask = false;
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
index 251ad71..1278b73 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
@@ -100,12 +100,12 @@
      * An optimization to preload the raw list of tasks. The raw tasks are saved in least-recent
      * to most-recent order.
      */
-    public synchronized void preloadRawTasks(boolean isHomeStackVisible) {
+    public synchronized void preloadRawTasks(boolean includeFrontMostExcludedTask) {
         int currentUserId = UserHandle.USER_CURRENT;
         updateCurrentQuietProfilesCache(currentUserId);
         SystemServicesProxy ssp = Recents.getSystemServices();
         mRawTasks = ssp.getRecentTasks(ActivityManager.getMaxRecentTasksStatic(),
-                currentUserId, isHomeStackVisible, mCurrentQuietProfiles);
+                currentUserId, includeFrontMostExcludedTask, mCurrentQuietProfiles);
 
         // Since the raw tasks are given in most-recent to least-recent order, we need to reverse it
         Collections.reverse(mRawTasks);
@@ -121,11 +121,11 @@
      * - least-recent to most-recent freeform tasks
      */
     public synchronized void preloadPlan(RecentsTaskLoader loader, int runningTaskId,
-            boolean isHomeStackVisible) {
+            boolean includeFrontMostExcludedTask) {
         Resources res = mContext.getResources();
         ArrayList<Task> allTasks = new ArrayList<>();
         if (mRawTasks == null) {
-            preloadRawTasks(isHomeStackVisible);
+            preloadRawTasks(includeFrontMostExcludedTask);
         }
 
         SparseArray<Task.TaskKey> affiliatedTasks = new SparseArray<>();
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
index 9460b64..ca59831 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
@@ -334,8 +334,8 @@
 
     /** Preloads recents tasks using the specified plan to store the output. */
     public void preloadTasks(RecentsTaskLoadPlan plan, int runningTaskId,
-            boolean isHomeStackVisible) {
-        plan.preloadPlan(this, runningTaskId, isHomeStackVisible);
+            boolean includeFrontMostExcludedTask) {
+        plan.preloadPlan(this, runningTaskId, includeFrontMostExcludedTask);
     }
 
     /** Begins loading the heavy task data according to the specified options. */
diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java
index acebf42..5bb5091 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java
@@ -73,6 +73,8 @@
     private final static boolean DEBUG = false;
 
     public final static int EVENT_BUS_PRIORITY = Recents.EVENT_BUS_PRIORITY + 1;
+    private final static String RECENTS_HOME_INTENT_EXTRA =
+            "com.android.systemui.recents.tv.RecentsTvActivity.RECENTS_HOME_INTENT_EXTRA";
 
     private boolean mFinishedOnStartup;
     private RecentsPackageMonitor mPackageMonitor;
@@ -180,7 +182,7 @@
         RecentsConfiguration config = Recents.getConfiguration();
         RecentsActivityLaunchState launchState = config.getLaunchState();
         if (!plan.hasTasks()) {
-            loader.preloadTasks(plan, -1, launchState.launchedFromHome);
+            loader.preloadTasks(plan, -1, !launchState.launchedFromHome);
         }
         mLaunchedFromHome = launchState.launchedFromHome;
         TaskStack stack = plan.getTaskStack();
@@ -320,6 +322,7 @@
         homeIntent.addCategory(Intent.CATEGORY_HOME);
         homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                 Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+        homeIntent.putExtra(RECENTS_HOME_INTENT_EXTRA, true);
         mFinishLaunchHomeRunnable = new FinishRecentsRunnable(homeIntent);
 
         mPipManager.addListener(mPipListener);
@@ -334,7 +337,23 @@
     @Override
     protected void onStart() {
         super.onStart();
+        updatePipUI();
+    }
 
+    @Override
+    public void onEnterAnimationComplete() {
+        super.onEnterAnimationComplete();
+        if(mLaunchedFromHome) {
+            mHomeRecentsEnterExitAnimationHolder.startEnterAnimation(mPipManager.isPipShown());
+        }
+        mTaskStackViewAdapter.setResetAddedCards(true);
+        EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mPipRecentsOverlayManager.onRecentsResumed();
         // Update the recent tasks
         updateRecentsTasks();
 
@@ -365,24 +384,6 @@
         // Notify that recents is now visible
         SystemServicesProxy ssp = Recents.getSystemServices();
         EventBus.getDefault().send(new RecentsVisibilityChangedEvent(this, true));
-
-        updatePipUI();
-    }
-
-    @Override
-    public void onEnterAnimationComplete() {
-        super.onEnterAnimationComplete();
-        if(mLaunchedFromHome) {
-            mHomeRecentsEnterExitAnimationHolder.startEnterAnimation(mPipManager.isPipShown());
-        }
-        mTaskStackViewAdapter.setResetAddedCards(true);
-        EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        mPipRecentsOverlayManager.onRecentsResumed();
         if(mTaskStackHorizontalGridView.getStack().getTaskCount() > 1 && !mLaunchedFromHome) {
             // If there are 2 or more tasks, and we are not launching from home
             // set the selected position to the 2nd task to allow for faster app switching
@@ -413,6 +414,9 @@
         RecentsConfiguration config = Recents.getConfiguration();
         RecentsActivityLaunchState launchState = config.getLaunchState();
         launchState.reset();
+
+        // Workaround for b/28333917.
+        finish();
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvImpl.java b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvImpl.java
index 6f7bd41..fca8d2d 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvImpl.java
@@ -63,7 +63,7 @@
             sInstanceLoadPlan = loader.createLoadPlan(mContext);
         }
         if (mTriggeredFromAltTab || !sInstanceLoadPlan.hasTasks()) {
-            loader.preloadTasks(sInstanceLoadPlan, runningTask.id, isHomeStackVisible);
+            loader.preloadTasks(sInstanceLoadPlan, runningTask.id, !isHomeStackVisible);
         }
         TaskStack stack = sInstanceLoadPlan.getTaskStack();
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java
index ed28ef1..0a6d1ed 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java
@@ -16,7 +16,6 @@
 package com.android.systemui.recents.tv.views;
 
 import android.animation.Animator;
-import android.app.Activity;
 import android.support.v7.widget.RecyclerView;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -87,7 +86,7 @@
 
                 @Override
                 public void onAnimationEnd(Animator animation) {
-                    removeAt(position);
+                    removeTask(task);
                     EventBus.getDefault().send(new DeleteTaskDataEvent(task));
                     mShouldReset = true;
                 }
@@ -148,20 +147,15 @@
         return mTaskList.size();
     }
 
-    private void removeAt(int position) {
-        Task removedTask = mTaskList.remove(position);
-        if (mGridView != null) {
-            mGridView.getStack().removeTask(removedTask, AnimationProps.IMMEDIATE,
-                    false);
-        }
-        notifyItemRemoved(position);
-    }
-
     public void removeTask(Task task) {
         int position = mTaskList.indexOf(task);
         if (position >= 0) {
             mTaskList.remove(position);
             notifyItemRemoved(position);
+            if (mGridView != null) {
+                mGridView.getStack().removeTask(task, AnimationProps.IMMEDIATE,
+                        false);
+            }
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
index cc8e832..f4c13d7 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
@@ -276,12 +276,13 @@
                     tv.onStartFrontTaskEnterAnimation(mStackView.mScreenPinningEnabled);
                 }
             } else if (launchState.launchedViaDockGesture) {
-                // Animate the tasks up
+                // Animate the tasks up - add some delay to match the divider animation
                 AnimationProps taskAnimation = new AnimationProps()
                         .setDuration(AnimationProps.BOUNDS, dockGestureAnimDuration +
                                 (taskIndexFromBack * DOUBLE_FRAME_OFFSET_MS))
                         .setInterpolator(AnimationProps.BOUNDS,
                                 ENTER_WHILE_DOCKING_INTERPOLATOR)
+                        .setStartDelay(AnimationProps.BOUNDS, 48)
                         .setListener(postAnimationTrigger.decrementOnAnimationEnd());
                 postAnimationTrigger.increment();
                 mStackView.updateTaskViewToTransform(tv, mTmpTransform, taskAnimation);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index 3d0de1c..1a197b6 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -1391,8 +1391,9 @@
         updateLayoutAlgorithm(true /* boundScroll */);
 
         // Animate all the tasks into place
-        relayoutTaskViews(new AnimationProps(DEFAULT_SYNC_STACK_DURATION,
-                Interpolators.FAST_OUT_SLOW_IN));
+        relayoutTaskViews(mAwaitingFirstLayout
+                ? AnimationProps.IMMEDIATE
+                : new AnimationProps(DEFAULT_SYNC_STACK_DURATION, Interpolators.FAST_OUT_SLOW_IN));
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
index cff4702..a220f2ed7 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
@@ -22,7 +22,6 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.annotation.Nullable;
 import android.app.ActivityManager.StackId;
 import android.content.Context;
@@ -1076,11 +1075,13 @@
             mAnimateAfterRecentsDrawn = false;
             updateDockSide();
 
-            // Delay switching resizing mode because this might cause jank in recents animation
-            // that's long than this animation.
-            stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(),
-                    mLongPressEntraceAnimDuration, Interpolators.FAST_OUT_SLOW_IN,
-                    200 /* endDelay */);
+            post(() -> {
+                // Delay switching resizing mode because this might cause jank in recents animation
+                // that's longer than this animation.
+                stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(),
+                        mLongPressEntraceAnimDuration, Interpolators.FAST_OUT_SLOW_IN,
+                        200 /* endDelay */);
+            });
         }
         if (mGrowAfterRecentsDrawn) {
             mGrowAfterRecentsDrawn = false;
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivity.java b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivity.java
index 18834ed..30bf060 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivity.java
@@ -78,6 +78,12 @@
     }
 
     @Override
+    public void finish() {
+        super.finish();
+        overridePendingTransition(0, R.anim.forced_resizable_exit);
+    }
+
+    @Override
     public void setTaskDescription(ActivityManager.TaskDescription taskDescription) {
         // Do nothing
     }
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
index 34a37ba..5f083d5 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
@@ -111,7 +111,7 @@
             Intent intent = new Intent(mContext, ForcedResizableInfoActivity.class);
             ActivityOptions options = ActivityOptions.makeBasic();
             options.setLaunchTaskId(mPendingTaskIds.valueAt(i));
-            options.setAvoidMoveToFront(true);
+            options.setTaskOverlay(true);
             mContext.startActivity(intent, options.toBundle());
         }
         mPendingTaskIds.clear();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index dc5957d..593e170 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -2246,9 +2246,12 @@
                 Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT,
                 0,
                 mCurrentUserId) != 0;
+        final boolean remoteInputDpm = (dpmFlags
+                & DevicePolicyManager.KEYGUARD_DISABLE_REMOTE_INPUT) == 0;
+
 
         setShowLockscreenNotifications(show && allowedByDpm);
-        setLockScreenAllowRemoteInput(remoteInput);
+        setLockScreenAllowRemoteInput(remoteInput && remoteInputDpm);
     }
 
     protected abstract void setAreThereNotifications();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 3a1752d..b4ce9cd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -329,7 +329,9 @@
         if (mChildrenContainer != null) {
             mChildrenContainer.removeNotification(row);
         }
-        mHeaderUtil.restoreNotificationHeader(row);
+        if (!row.isRemoved()) {
+            mHeaderUtil.restoreNotificationHeader(row);
+        }
         onChildrenCountChanged();
         row.setIsChildInGroup(false, null);
     }
@@ -644,7 +646,9 @@
                 continue;
             }
             mChildrenContainer.removeNotification(row);
-            mHeaderUtil.restoreNotificationHeader(row);
+            if (!row.isRemoved()) {
+                mHeaderUtil.restoreNotificationHeader(row);
+            }
             row.setIsChildInGroup(false, null);
         }
         onChildrenCountChanged();
@@ -1338,6 +1342,9 @@
 
     @Override
     protected View getContentView() {
+        if (mIsSummaryWithChildren) {
+            return mChildrenContainer;
+        }
         return getShowingLayout();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
index d2326d2..270b6ed 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
@@ -459,7 +459,8 @@
 
         @Override
         public String toString() {
-            String result = "    summary:\n      " + summary.notification;
+            String result = "    summary:\n      "
+                    + (summary != null ? summary.notification : "null");
             result += "\n    children size: " + children.size();
             for (NotificationData.Entry child : children) {
                 result += "\n      " + child.notification;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 76fb416..4bb9797 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1505,6 +1505,10 @@
             mHeadsUpEntriesToRemoveOnSwitch.add(mHeadsUpManager.getEntry(key));
             return;
         }
+        Entry entry = mNotificationData.get(key);
+        if (entry != null && entry.row != null) {
+            entry.row.setRemoved(true);
+        }
         // Let's remove the children if this was a summary
         handleGroupSummaryRemoved(key, ranking);
         StatusBarNotification old = removeNotificationViews(key, ranking);
@@ -1544,12 +1548,13 @@
                 // always cancelled. We only remove them if they were dismissed by the user.
                 return;
             }
-            entry.row.setRemoved(true);
             List<ExpandableNotificationRow> notificationChildren =
                     entry.row.getNotificationChildren();
             ArrayList<ExpandableNotificationRow> toRemove = new ArrayList<>(notificationChildren);
             for (int i = 0; i < toRemove.size(); i++) {
                 toRemove.get(i).setKeepInParent(true);
+                // we need to set this state earlier as otherwise we might generate some weird
+                // animations
                 toRemove.get(i).setRemoved(true);
             }
             for (int i = 0; i < toRemove.size(); i++) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
index 0bca241..e6e189f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
@@ -91,10 +91,6 @@
         }
 
         @Override
-        public void onRestrictPowerChanged(boolean restrictPower) {
-        }
-
-        @Override
         public void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted) {
         }
     };
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index 06412758..1edaa0f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -2188,7 +2188,7 @@
         }
     }
 
-    private void onViewRemovedInternal(View child, ViewGroup transientContainer) {
+    private void onViewRemovedInternal(View child, ViewGroup container) {
         if (mChangePositionInProgress) {
             // This is only a position change, don't do anything special
             return;
@@ -2200,10 +2200,10 @@
         boolean animationGenerated = generateRemoveAnimation(child);
         if (animationGenerated) {
             if (!mSwipedOutViews.contains(child)) {
-                getOverlay().add(child);
+                container.getOverlay().add(child);
             } else if (Math.abs(expandableView.getTranslation()) != expandableView.getWidth()) {
-                transientContainer.addTransientView(child, 0);
-                expandableView.setTransientContainer(transientContainer);
+                container.addTransientView(child, 0);
+                expandableView.setTransientContainer(container);
             }
         } else {
             mSwipedOutViews.remove(child);
@@ -2885,22 +2885,24 @@
             mPhoneStatusBar.resetUserExpandedStates();
 
             // lets make sure nothing is in the overlay / transient anymore
-            clearTransientViews(this);
+            clearTemporaryViews(this);
             for (int i = 0; i < getChildCount(); i++) {
                 ExpandableView child = (ExpandableView) getChildAt(i);
                 if (child instanceof ExpandableNotificationRow) {
                     ExpandableNotificationRow row = (ExpandableNotificationRow) child;
-                    clearTransientViews(row.getChildrenContainer());
+                    clearTemporaryViews(row.getChildrenContainer());
                 }
             }
-            getOverlay().clear();
         }
     }
 
-    private void clearTransientViews(ViewGroup viewGroup) {
+    private void clearTemporaryViews(ViewGroup viewGroup) {
         while (viewGroup != null && viewGroup.getTransientViewCount() != 0) {
             viewGroup.removeTransientView(viewGroup.getTransientView(0));
         }
+        if (viewGroup != null) {
+            viewGroup.getOverlay().clear();
+        }
     }
 
     public void onPanelTrackingStarted() {
@@ -3020,7 +3022,7 @@
 
     private void clearViewOverlays() {
         for (View view : mClearOverlayViewsWhenFinished) {
-            getOverlay().remove(view);
+            StackStateAnimator.removeFromOverlay(view);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
index e8472ac..0c08d13 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
@@ -22,6 +22,7 @@
 import android.animation.PropertyValuesHolder;
 import android.animation.ValueAnimator;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.animation.Interpolator;
 
 import com.android.systemui.Interpolators;
@@ -797,7 +798,7 @@
     private void onAnimationFinished() {
         mHostLayout.onChildAnimationFinished();
         for (View v : mChildrenToClearFromOverlay) {
-            mHostLayout.getOverlay().remove(v);
+            removeFromOverlay(v);
         }
         mChildrenToClearFromOverlay.clear();
     }
@@ -829,7 +830,7 @@
             } else if (event.animationType ==
                     NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE) {
                 if (changingView.getVisibility() == View.GONE) {
-                    mHostLayout.getOverlay().remove(changingView);
+                    removeFromOverlay(changingView);
                     continue;
                 }
 
@@ -854,7 +855,7 @@
                     @Override
                     public void run() {
                         // remove the temporary overlay
-                        mHostLayout.getOverlay().remove(changingView);
+                        removeFromOverlay(changingView);
                     }
                 });
             } else if (event.animationType ==
@@ -909,6 +910,13 @@
         }
     }
 
+    public static void removeFromOverlay(View changingView) {
+        ViewGroup parent = (ViewGroup) changingView.getParent();
+        if (parent != null) {
+            parent.removeView(changingView);
+        }
+    }
+
     public void animateOverScrollToAmount(float targetAmount, final boolean onTop,
             final boolean isRubberbanded) {
         final float startOverScrollAmount = mHostLayout.getCurrentOverScrollAmount(onTop);
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java
index f801963..0a3197c 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java
@@ -154,7 +154,7 @@
         getContext().sendBroadcast(intent);
 
         intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_CLOCK);
-        intent.putExtra("hhmm", "0600");
+        intent.putExtra("hhmm", "0700");
         getContext().sendBroadcast(intent);
 
         intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_NETWORK);
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 7f977dd..7da969f 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -902,8 +902,11 @@
 
     private void unlockUser(int userId) {
         synchronized (mLock) {
-            UserState userState = getUserStateLocked(userId);
-            onUserStateChangedLocked(userState);
+            int parentUserId = mSecurityPolicy.resolveProfileParentLocked(userId);
+            if (parentUserId == mCurrentUserId) {
+                UserState userState = getUserStateLocked(mCurrentUserId);
+                onUserStateChangedLocked(userState);
+            }
         }
     }
 
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index cfe038c..d2d71bf 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -85,7 +85,9 @@
 import android.provider.Settings;
 import android.system.ErrnoException;
 import android.system.Os;
+import android.text.TextUtils;
 import android.util.ArrayMap;
+import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.EventLog;
 import android.util.Log;
@@ -99,6 +101,7 @@
 import com.android.internal.backup.IObbBackupService;
 import com.android.server.AppWidgetBackupBridge;
 import com.android.server.EventLogTags;
+import com.android.server.SystemConfig;
 import com.android.server.SystemService;
 import com.android.server.backup.PackageManagerBackupAgent.Metadata;
 
@@ -318,6 +321,7 @@
     volatile boolean mClearingData;
 
     // Transport bookkeeping
+    final ArraySet<ComponentName> mTransportWhitelist;
     final Intent mTransportServiceIntent = new Intent(SERVICE_ACTION_TRANSPORT_HOST);
     final ArrayMap<String,String> mTransportNames
             = new ArrayMap<String,String>();             // component name -> registration name
@@ -1168,11 +1172,15 @@
 
         // Set up our transport options and initialize the default transport
         // TODO: Don't create transports that we don't need to?
-        mCurrentTransport = Settings.Secure.getString(context.getContentResolver(),
+        SystemConfig systemConfig = SystemConfig.getInstance();
+        mTransportWhitelist = systemConfig.getBackupTransportWhitelist();
+
+        String transport = Settings.Secure.getString(context.getContentResolver(),
                 Settings.Secure.BACKUP_TRANSPORT);
-        if ("".equals(mCurrentTransport)) {
-            mCurrentTransport = null;
+        if (TextUtils.isEmpty(transport)) {
+            transport = null;
         }
+        mCurrentTransport = transport;
         if (DEBUG) Slog.v(TAG, "Starting with transport " + mCurrentTransport);
 
         // Find all transport hosts and bind to their services
@@ -1184,11 +1192,11 @@
         }
         if (hosts != null) {
             for (int i = 0; i < hosts.size(); i++) {
-                final ServiceInfo transport = hosts.get(i).serviceInfo;
+                final ServiceInfo transportService = hosts.get(i).serviceInfo;
                 if (MORE_DEBUG) {
-                    Slog.v(TAG, "   " + transport.packageName + "/" + transport.name);
+                    Slog.v(TAG, "   " + transportService.packageName + "/" + transportService.name);
                 }
-                tryBindTransport(transport);
+                tryBindTransport(transportService);
             }
         }
 
@@ -2082,6 +2090,11 @@
     // Actually bind; presumes that we have already validated the transport service
     boolean bindTransport(ServiceInfo transport) {
         ComponentName svcName = new ComponentName(transport.packageName, transport.name);
+        if (!mTransportWhitelist.contains(svcName)) {
+            Slog.w(TAG, "Proposed transport " + svcName + " not whitelisted; ignoring");
+            return false;
+        }
+
         if (MORE_DEBUG) {
             Slog.i(TAG, "Binding to transport host " + svcName);
         }
@@ -10271,6 +10284,12 @@
                     + " (now = " + System.currentTimeMillis() + ')');
             pw.println("  next scheduled: " + KeyValueBackupJob.nextScheduled());
 
+            pw.println("Transport whitelist:");
+            for (ComponentName transport : mTransportWhitelist) {
+                pw.print("    ");
+                pw.println(transport.flattenToShortString());
+            }
+
             pw.println("Available transports:");
             final String[] transports = listAllTransports();
             if (transports != null) {
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index 0a2153e..ca3c39f 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -25,6 +25,7 @@
 import java.io.PrintWriter;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -57,7 +58,6 @@
 import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.Log;
-import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
@@ -110,21 +110,8 @@
 
     /*
      * These are app op restrictions imposed per user from various parties.
-     *
-     * This is organized as follows:
-     *
-     * ArrayMap w/ mapping:
-     *  IBinder (for client imposing restriction) --> SparseArray w/ mapping:
-     *    User handle --> Pair containing:
-     *       - Array w/ index = AppOp code, value = restricted status boolean
-     *       - SparseArray w/ mapping:
-     *          AppOp code --> Set of packages that are not restricted for this code
-     *
-     * For efficiency, a core assumption here is that the number of per-package exemptions stored
-     * here will be relatively small.  If this changes, this data structure should be revisited.
      */
-    private final ArrayMap<IBinder, SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>>>
-            mOpUserRestrictions = new ArrayMap<>();
+    private final ArrayMap<IBinder, ClientRestrictionState> mOpUserRestrictions = new ArrayMap<>();
 
     private static final class UidState {
         public final int uid;
@@ -1328,42 +1315,16 @@
         for (int i = 0; i < restrictionSetCount; i++) {
             // For each client, check that the given op is not restricted, or that the given
             // package is exempt from the restriction.
-
-            SparseArray<Pair<boolean[],SparseArray<ArraySet<String>>>> perUserRestrictions =
-                    mOpUserRestrictions.valueAt(i);
-
-            Pair<boolean[],SparseArray<ArraySet<String>>> restrictions =
-                    perUserRestrictions.get(userHandle);
-            if (restrictions == null) {
-                continue; // No restrictions set by this client
-            }
-
-            boolean[] opRestrictions = restrictions.first;
-            SparseArray<ArraySet<String>> opExceptions = restrictions.second;
-
-            if (opRestrictions == null) {
-                continue; // No restrictions set by this client
-            }
-
-            if (opRestrictions[code]) {
-
-                if (opExceptions != null) {
-                    ArraySet<String> ex = opExceptions.get(code);
-                    if (ex != null && ex.contains(packageName)) {
-                        continue; // AppOps code is restricted, but this package is exempt
+            ClientRestrictionState restrictionState = mOpUserRestrictions.valueAt(i);
+            if (restrictionState.hasRestriction(code, packageName, userHandle)
+                    && AppOpsManager.opAllowSystemBypassRestriction(code)) {
+                // If we are the system, bypass user restrictions for certain codes
+                synchronized (this) {
+                    Ops ops = getOpsRawLocked(uid, packageName, true);
+                    if ((ops != null) && ops.isPrivileged) {
+                        return false;
                     }
                 }
-
-                if (AppOpsManager.opAllowSystemBypassRestriction(code)) {
-                    // If we are the system, bypass user restrictions for certain codes
-                    synchronized (this) {
-                        Ops ops = getOpsRawLocked(uid, packageName, true);
-                        if ((ops != null) && ops.isPrivileged) {
-                            return false;
-                        }
-                    }
-                }
-
                 return true;
             }
         }
@@ -2216,12 +2177,11 @@
         checkSystemUid("setUserRestrictions");
         Preconditions.checkNotNull(restrictions);
         Preconditions.checkNotNull(token);
-        final boolean[] opRestrictions = getOrCreateUserRestrictionsForToken(token, userHandle);
-        for (int i = 0; i < opRestrictions.length; ++i) {
+        for (int i = 0; i < AppOpsManager._NUM_OP; i++) {
             String restriction = AppOpsManager.opToRestriction(i);
-            final boolean restricted = restriction != null
-                    && restrictions.getBoolean(restriction, false);
-            setUserRestrictionNoCheck(i, restricted, token, userHandle);
+            if (restriction != null && restrictions.getBoolean(restriction, false)) {
+                setUserRestrictionNoCheck(i, true, token, userHandle, null);
+            }
         }
     }
 
@@ -2247,45 +2207,26 @@
     }
 
     private void setUserRestrictionNoCheck(int code, boolean restricted, IBinder token,
-            int userHandle) {
-        setUserRestrictionNoCheck(code, restricted, token, userHandle, /*exceptionPackages*/null);
-    }
-
-    private void setUserRestrictionNoCheck(int code, boolean restricted, IBinder token,
             int userHandle, String[] exceptionPackages) {
+        ClientRestrictionState restrictionState = mOpUserRestrictions.get(token);
 
-        final boolean[] opRestrictions = getOrCreateUserRestrictionsForToken(token, userHandle);
-
-        if (restricted) {
-            final SparseArray<ArraySet<String>> opExceptions =
-                    getUserPackageExemptionsForToken(token, userHandle);
-
-            ArraySet<String> exceptions = opExceptions.get(code);
-            if (exceptionPackages != null && exceptionPackages.length > 0) {
-                if (exceptions == null) {
-                    exceptions = new ArraySet<>(exceptionPackages.length);
-                    opExceptions.put(code, exceptions);
-                } else {
-                    exceptions.clear();
-                }
-
-                for (String p : exceptionPackages) {
-                    exceptions.add(p);
-                }
-            } else {
-                opExceptions.remove(code);
+        if (restrictionState == null) {
+            try {
+                restrictionState = new ClientRestrictionState(token);
+            } catch (RemoteException e) {
+                return;
             }
+            mOpUserRestrictions.put(token, restrictionState);
         }
 
-        if (opRestrictions[code] == restricted) {
-            return;
-        }
-        opRestrictions[code] = restricted;
-        if (!restricted) {
-            pruneUserRestrictionsForToken(token, userHandle);
+        if (restrictionState.setRestriction(code, restricted, exceptionPackages, userHandle)) {
+            notifyWatchersOfChange(code);
         }
 
-        notifyWatchersOfChange(code);
+        if (restrictionState.isDefault()) {
+            mOpUserRestrictions.remove(token);
+            restrictionState.destroy();
+        }
     }
 
     private void notifyWatchersOfChange(int code) {
@@ -2300,7 +2241,7 @@
 
         // There are components watching for mode changes such as window manager
         // and location manager which are in our process. The callbacks in these
-        // components may require permissions our remote caller does not have.
+        // components may require permissions our remote caller does not have.s
         final long identity = Binder.clearCallingIdentity();
         try {
             final int callbackCount = clonedCallbacks.size();
@@ -2322,110 +2263,11 @@
         checkSystemUid("removeUser");
         final int tokenCount = mOpUserRestrictions.size();
         for (int i = tokenCount - 1; i >= 0; i--) {
-            SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>> opRestrictions =
-                    mOpUserRestrictions.valueAt(i);
-            if (opRestrictions != null) {
-                opRestrictions.remove(userHandle);
-                if (opRestrictions.size() <= 0) {
-                    mOpUserRestrictions.removeAt(i);
-                }
-            }
+            ClientRestrictionState opRestrictions = mOpUserRestrictions.valueAt(i);
+            opRestrictions.removeUser(userHandle);
         }
     }
 
-
-    private void pruneUserRestrictionsForToken(IBinder token, int userHandle) {
-        SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>> perTokenRestrictions =
-                mOpUserRestrictions.get(token);
-        if (perTokenRestrictions != null) {
-            final Pair<boolean[], SparseArray<ArraySet<String>>> restrictions =
-                    perTokenRestrictions.get(userHandle);
-
-            if (restrictions != null) {
-                final boolean[] opRestrictions = restrictions.first;
-                final SparseArray<ArraySet<String>> opExceptions = restrictions.second;
-                boolean stillHasRestrictions = false;
-                if (opRestrictions != null) {
-                    for (int i = 0; i < opRestrictions.length; i++) {
-                        boolean restriction = opRestrictions[i];
-                        if (restriction) {
-                            stillHasRestrictions = true;
-                        } else {
-                            opExceptions.remove(i);
-                        }
-                    }
-                }
-
-                if (stillHasRestrictions) {
-                    return;
-                }
-
-                // No restrictions set for this client
-                perTokenRestrictions.remove(userHandle);
-                if (perTokenRestrictions.size() <= 0) {
-                    mOpUserRestrictions.remove(token);
-                }
-            }
-        }
-    }
-
-    /**
-     * Get or create the user restrictions array for a given client if it doesn't already exist.
-     *
-     * @param token the binder client creating the restriction.
-     * @param userHandle the user handle to create a restriction for.
-     *
-     * @return the array of restriction states for each AppOps code.
-     */
-    private boolean[] getOrCreateUserRestrictionsForToken(IBinder token, int userHandle) {
-        SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>> perTokenRestrictions =
-                mOpUserRestrictions.get(token);
-
-        if (perTokenRestrictions == null) {
-            perTokenRestrictions =
-                    new SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>>();
-            mOpUserRestrictions.put(token, perTokenRestrictions);
-        }
-
-        Pair<boolean[], SparseArray<ArraySet<String>>> restrictions =
-                perTokenRestrictions.get(userHandle);
-
-        if (restrictions == null) {
-            restrictions = new Pair<boolean[], SparseArray<ArraySet<String>>>(
-                    new boolean[AppOpsManager._NUM_OP], new SparseArray<ArraySet<String>>());
-            perTokenRestrictions.put(userHandle, restrictions);
-        }
-
-        return restrictions.first;
-    }
-
-    /**
-     * Get the per-package exemptions for each AppOps code for a given client and userHandle.
-     *
-     * @param token the binder client to get the exemptions for.
-     * @param userHandle the user handle to get the exemptions for.
-     *
-     * @return a mapping from the AppOps code to a set of packages exempt for that code.
-     */
-    private SparseArray<ArraySet<String>> getUserPackageExemptionsForToken(IBinder token,
-            int userHandle) {
-        SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>> perTokenRestrictions =
-                mOpUserRestrictions.get(token);
-
-        if (perTokenRestrictions == null) {
-            return null; // Don't create user restrictions accidentally
-        }
-
-        Pair<boolean[], SparseArray<ArraySet<String>>> restrictions =
-                perTokenRestrictions.get(userHandle);
-
-        if (restrictions == null) {
-            return null; // Don't create user restrictions accidentally
-        }
-
-        return restrictions.second;
-    }
-
     private void checkSystemUid(String function) {
         int uid = Binder.getCallingUid();
         if (uid != Process.SYSTEM_UID) {
@@ -2456,4 +2298,134 @@
         }
         return packageNames;
     }
+
+    private final class ClientRestrictionState implements DeathRecipient {
+        private final IBinder token;
+        SparseArray<boolean[]> perUserRestrictions;
+        SparseArray<String[]> perUserExcludedPackages;
+
+        public ClientRestrictionState(IBinder token)
+                throws RemoteException {
+            token.linkToDeath(this, 0);
+            this.token = token;
+        }
+
+        public boolean setRestriction(int code, boolean restricted,
+                String[] excludedPackages, int userId) {
+            boolean changed = false;
+
+            if (perUserRestrictions == null && restricted) {
+                perUserRestrictions = new SparseArray<>();
+            }
+
+            if (perUserRestrictions != null) {
+                boolean[] userRestrictions = perUserRestrictions.get(userId);
+                if (userRestrictions == null && restricted) {
+                    userRestrictions = new boolean[AppOpsManager._NUM_OP];
+                    perUserRestrictions.put(userId, userRestrictions);
+                }
+                if (userRestrictions != null && userRestrictions[code] != restricted) {
+                    userRestrictions[code] = restricted;
+                    if (!restricted && isDefault(userRestrictions)) {
+                        perUserRestrictions.remove(userId);
+                        userRestrictions = null;
+                    }
+                    changed = true;
+                }
+
+                if (userRestrictions != null) {
+                    final boolean noExcludedPackages = ArrayUtils.isEmpty(excludedPackages);
+                    if (perUserExcludedPackages == null && !noExcludedPackages) {
+                        perUserExcludedPackages = new SparseArray<>();
+                    }
+                    if (perUserExcludedPackages != null && !Arrays.equals(excludedPackages,
+                            perUserExcludedPackages.get(userId))) {
+                        if (noExcludedPackages) {
+                            perUserExcludedPackages.remove(userId);
+                            if (perUserExcludedPackages.size() <= 0) {
+                                perUserExcludedPackages = null;
+                            }
+                        } else {
+                            perUserExcludedPackages.put(userId, excludedPackages);
+                        }
+                        changed = true;
+                    }
+                }
+            }
+
+            return changed;
+        }
+
+        public boolean hasRestriction(int restriction, String packageName, int userId) {
+            if (perUserRestrictions == null) {
+                return false;
+            }
+            boolean[] restrictions = perUserRestrictions.get(userId);
+            if (restrictions == null) {
+                return false;
+            }
+            if (!restrictions[restriction]) {
+                return false;
+            }
+            if (perUserExcludedPackages == null) {
+                return true;
+            }
+            String[] perUserExclusions = perUserExcludedPackages.get(userId);
+            if (perUserExclusions == null) {
+                return true;
+            }
+            return !ArrayUtils.contains(perUserExclusions, packageName);
+        }
+
+        public void removeUser(int userId) {
+            if (perUserExcludedPackages != null) {
+                perUserExcludedPackages.remove(userId);
+                if (perUserExcludedPackages.size() <= 0) {
+                    perUserExcludedPackages = null;
+                }
+            }
+        }
+
+        public boolean isDefault() {
+            return perUserRestrictions == null || perUserRestrictions.size() <= 0;
+        }
+
+        @Override
+        public void binderDied() {
+            synchronized (AppOpsService.this) {
+                mOpUserRestrictions.remove(token);
+                if (perUserRestrictions == null) {
+                    return;
+                }
+                final int userCount = perUserRestrictions.size();
+                for (int i = 0; i < userCount; i++) {
+                    final boolean[] restrictions = perUserRestrictions.valueAt(i);
+                    final int restrictionCount = restrictions.length;
+                    for (int j = 0; j < restrictionCount; j++) {
+                        if (restrictions[j]) {
+                            final int changedCode = j;
+                            mHandler.post(() -> notifyWatchersOfChange(changedCode));
+                        }
+                    }
+                }
+                destroy();
+            }
+        }
+
+        public void destroy() {
+            token.unlinkToDeath(this, 0);
+        }
+
+        private boolean isDefault(boolean[] array) {
+            if (ArrayUtils.isEmpty(array)) {
+                return true;
+            }
+            for (boolean value : array) {
+                if (value) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 8763b93..53b2942 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -33,6 +33,7 @@
 import static android.net.NetworkPolicyManager.MASK_METERED_NETWORKS;
 import static android.net.NetworkPolicyManager.MASK_ALL_NETWORKS;
 import static android.net.NetworkPolicyManager.RULE_NONE;
+import static android.net.NetworkPolicyManager.RULE_REJECT_ALL;
 import static android.net.NetworkPolicyManager.RULE_REJECT_METERED;
 import static android.net.NetworkPolicyManager.RULE_TEMPORARY_ALLOW_METERED;
 import static android.net.NetworkPolicyManager.uidRulesToString;
@@ -218,9 +219,6 @@
     /** Flag indicating if background data is restricted. */
     @GuardedBy("mRulesLock")
     private boolean mRestrictBackground;
-    /** Flag indicating if background data is restricted due to battery savings. */
-    @GuardedBy("mRulesLock")
-    private boolean mRestrictPower;
 
     final private Context mContext;
     private int mNetworkPreference;
@@ -669,7 +667,6 @@
         try {
             mPolicyManager.setConnectivityListener(mPolicyListener);
             mRestrictBackground = mPolicyManager.getRestrictBackground();
-            mRestrictPower = mPolicyManager.getRestrictPower();
         } catch (RemoteException e) {
             // ouch, no rules updates means some processes may never get network
             loge("unable to register INetworkPolicyListener" + e);
@@ -942,13 +939,11 @@
                         + ": " + allowed);
             }
         }
-        // ...then Battery Saver Mode.
-        if (allowed && mRestrictPower) {
-            allowed = (uidRules & RULE_ALLOW_ALL) != 0;
+        // ...then power restrictions.
+        if (allowed) {
+            allowed = (uidRules & RULE_REJECT_ALL) == 0;
             if (LOGD_RULES) Log.d(TAG, "allowed status for uid " + uid + " when"
-                    + " mRestrictPower=" + mRestrictPower
-                    + ", whitelisted=" + ((uidRules & RULE_ALLOW_ALL) != 0)
-                    + ": " + allowed);
+                    + " rule is " + uidRulesToString(uidRules) + ": " + allowed);
         }
         return !allowed;
     }
@@ -1400,7 +1395,11 @@
                 final int oldRules = mUidRules.get(uid, RULE_NONE);
                 if (oldRules == uidRules) return;
 
-                mUidRules.put(uid, uidRules);
+                if (uidRules == RULE_NONE) {
+                    mUidRules.delete(uid);
+                } else {
+                    mUidRules.put(uid, uidRules);
+                }
             }
 
             // TODO: notify UID when it has requested targeted updates
@@ -1439,18 +1438,6 @@
         }
 
         @Override
-        public void onRestrictPowerChanged(boolean restrictPower) {
-            // caller is NPMS, since we only register with them
-            if (LOGD_RULES) {
-                log("onRestrictPowerChanged(restrictPower=" + restrictPower + ")");
-            }
-
-            synchronized (mRulesLock) {
-                mRestrictPower = restrictPower;
-            }
-        }
-
-        @Override
         public void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted) {
             if (LOGD_RULES) {
                 // caller is NPMS, since we only register with them
@@ -1891,10 +1878,6 @@
         pw.println(mRestrictBackground);
         pw.println();
 
-        pw.print("Restrict power: ");
-        pw.println(mRestrictPower);
-        pw.println();
-
         pw.println("Status for known UIDs:");
         pw.increaseIndent();
         final int size = mUidRules.size();
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index a584f70..b0a00e6 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -2643,6 +2643,27 @@
     }
 
     @Override
+    public void clearLastInputMethodWindowForTransition(IBinder token) {
+        if (!calledFromValidUser()) {
+            return;
+        }
+        final long ident = Binder.clearCallingIdentity();
+        try {
+            synchronized (mMethodMap) {
+                if (!calledWithValidToken(token)) {
+                    final int uid = Binder.getCallingUid();
+                    Slog.e(TAG, "Ignoring clearLastInputMethodWindowForTransition due to an "
+                            + "invalid token. uid:" + uid + " token:" + token);
+                    return;
+                }
+            }
+            mWindowManagerInternal.clearLastInputMethodWindowForTransition();
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
     public void notifyUserAction(int sequenceNumber) {
         if (DEBUG) {
             Slog.d(TAG, "Got the notification of a user action. sequenceNumber:" + sequenceNumber);
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index e5b301e..22f01ab 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -468,7 +468,7 @@
      * Notify our observers of a change in the data activity state of the interface
      */
     private void notifyInterfaceClassActivity(int type, int powerState, long tsNanos,
-            boolean fromRadio) {
+            int uid, boolean fromRadio) {
         final boolean isMobile = ConnectivityManager.isNetworkTypeMobile(type);
         if (isMobile) {
             if (!fromRadio) {
@@ -484,7 +484,7 @@
             if (mLastPowerStateFromRadio != powerState) {
                 mLastPowerStateFromRadio = powerState;
                 try {
-                    getBatteryStats().noteMobileRadioPowerState(powerState, tsNanos);
+                    getBatteryStats().noteMobileRadioPowerState(powerState, tsNanos, uid);
                 } catch (RemoteException e) {
                 }
             }
@@ -845,9 +845,13 @@
                         throw new IllegalStateException(errorMessage);
                     }
                     long timestampNanos = 0;
-                    if (cooked.length == 5) {
+                    int processUid = -1;
+                    if (cooked.length >= 5) {
                         try {
                             timestampNanos = Long.parseLong(cooked[4]);
+                            if (cooked.length == 6) {
+                                processUid = Integer.parseInt(cooked[5]);
+                            }
                         } catch(NumberFormatException ne) {}
                     } else {
                         timestampNanos = SystemClock.elapsedRealtimeNanos();
@@ -855,7 +859,8 @@
                     boolean isActive = cooked[2].equals("active");
                     notifyInterfaceClassActivity(Integer.parseInt(cooked[3]),
                             isActive ? DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH
-                            : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW, timestampNanos, false);
+                            : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
+                            timestampNanos, processUid, false);
                     return true;
                     // break;
             case NetdResponseCode.InterfaceAddressChange:
@@ -1599,7 +1604,7 @@
                 @Override public void run() {
                     notifyInterfaceClassActivity(type,
                             DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                            SystemClock.elapsedRealtimeNanos(), false);
+                            SystemClock.elapsedRealtimeNanos(), -1, false);
                 }
             });
         }
@@ -1628,7 +1633,7 @@
                 @Override public void run() {
                     notifyInterfaceClassActivity(params.type,
                             DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
-                            SystemClock.elapsedRealtimeNanos(), false);
+                            SystemClock.elapsedRealtimeNanos(), -1, false);
                 }
             });
         }
diff --git a/services/core/java/com/android/server/PinnerService.java b/services/core/java/com/android/server/PinnerService.java
new file mode 100644
index 0000000..d48aeed
--- /dev/null
+++ b/services/core/java/com/android/server/PinnerService.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2016 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;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.util.EventLog;
+import android.util.Slog;
+import android.os.Binder;
+import android.os.Build;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.OsConstants;
+import android.system.StructStat;
+
+import java.util.ArrayList;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * <p>PinnerService pins important files for key processes in memory.</p>
+ * <p>Files to pin are specified in the config_defaultPinnerServiceFiles
+ * overlay. </p>
+ */
+public final class PinnerService extends SystemService {
+    private static final boolean DEBUG = false;
+    private static final String TAG = "PinnerService";
+
+    private final Context mContext;
+    private final ArrayList<String> mPinnedFiles = new ArrayList<String>();
+
+    private BinderService mBinderService;
+
+
+    public PinnerService(Context context) {
+        super(context);
+
+        mContext = context;
+
+    }
+
+    @Override
+    public void onStart() {
+        Slog.e(TAG, "Starting PinnerService");
+
+        mBinderService = new BinderService();
+        publishBinderService("pinner", mBinderService);
+
+        // Files to pin come from the overlay and can be specified per-device config
+        // Continue trying to pin remaining files even if there is a failure
+        String[] filesToPin = mContext.getResources().getStringArray(com.android.internal.R.array.config_defaultPinnerServiceFiles);
+        for (int i = 0; i < filesToPin.length; i++){
+            boolean success = pinFile(filesToPin[i], 0, 0);
+            if (success == true) {
+                mPinnedFiles.add(filesToPin[i]);
+                Slog.i(TAG, "Pinned file = " + filesToPin[i]);
+            } else {
+                Slog.e(TAG, "Failed to pin file = " + filesToPin[i]);
+            }
+        }
+    }
+
+    // mlock length bytes of fileToPin in memory, starting at offset
+    // length == 0 means pin from offset to end of file
+    private boolean pinFile(String fileToPin, long offset, long length) {
+        FileDescriptor fd = new FileDescriptor();
+        try {
+            fd = Os.open(fileToPin, OsConstants.O_RDONLY | OsConstants.O_CLOEXEC | OsConstants.O_NOFOLLOW, OsConstants.O_RDONLY);
+
+            StructStat sb = Os.fstat(fd);
+
+            if (offset + length > sb.st_size) {
+                Os.close(fd);
+                return false;
+            }
+
+            if (length == 0) {
+                length = sb.st_size - offset;
+            }
+
+            long address = Os.mmap(0, length, OsConstants.PROT_READ, OsConstants.MAP_PRIVATE, fd, offset);
+            Os.close(fd);
+
+            Os.mlock(address, length);
+
+            return true;
+        } catch (ErrnoException e) {
+            Slog.e(TAG, "Failed to pin file " + fileToPin + " with error " + e.getMessage());
+            if(fd.valid()) {
+                try { Os.close(fd); }
+                catch (ErrnoException eClose) {Slog.e(TAG, "Failed to close fd, error = " + eClose.getMessage());}
+            }
+            return false;
+        }
+    }
+
+
+    private final class BinderService extends Binder {
+        @Override
+        protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+            mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
+            pw.println("Pinned Files:");
+            for (int i = 0; i < mPinnedFiles.size(); i++) {
+                pw.println(mPinnedFiles.get(i));
+            }
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java
index be53cfc..be021ea 100644
--- a/services/core/java/com/android/server/Watchdog.java
+++ b/services/core/java/com/android/server/Watchdog.java
@@ -73,6 +73,7 @@
         "/system/bin/surfaceflinger",
         "media.codec",     // system/bin/mediacodec
         "media.extractor", // system/bin/mediaextractor
+        "com.android.bluetooth",  // Bluetooth service
     };
 
     static Watchdog sWatchdog;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index ea24a34d..a066462 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -16,6 +16,7 @@
 
 package com.android.server.am;
 
+import com.android.internal.telephony.TelephonyIntents;
 import com.google.android.collect.Lists;
 import com.google.android.collect.Maps;
 import com.android.internal.R;
@@ -6167,6 +6168,12 @@
         if (DEBUG_PROCESSES) Slog.d(TAG_PROCESSES,
             "Force removing proc " + app.toShortString() + " (" + name + "/" + uid + ")");
 
+        ProcessRecord old = mProcessNames.get(name, uid);
+        if (old != app) {
+            // This process is no longer active, so nothing to do.
+            Slog.w(TAG, "Ignoring remove of inactive process: " + app);
+            return false;
+        }
         removeProcessNameLocked(name, uid);
         if (mHeavyWeightProcess == app) {
             mHandler.sendMessage(mHandler.obtainMessage(CANCEL_HEAVY_NOTIFICATION_MSG,
@@ -7044,6 +7051,32 @@
     }
 
     @Override
+    public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
+            IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
+        if (target instanceof PendingIntentRecord) {
+            return ((PendingIntentRecord)target).sendWithResult(code, intent, resolvedType,
+                    finishedReceiver, requiredPermission, options);
+        } else {
+            try {
+                target.send(code, intent, resolvedType, null, requiredPermission, options);
+            } catch (RemoteException e) {
+            }
+            // Platform code can rely on getting a result back when the send is done, but if
+            // this intent sender is from outside of the system we can't rely on it doing that.
+            // So instead we don't give it the result receiver, and instead just directly
+            // report the finish immediately.
+            if (finishedReceiver != null) {
+                try {
+                    finishedReceiver.performReceive(intent, 0,
+                            null, null, false, false, UserHandle.getCallingUserId());
+                } catch (RemoteException e) {
+                }
+            }
+            return 0;
+        }
+    }
+
+    @Override
     public void cancelIntentSender(IIntentSender sender) {
         if (!(sender instanceof PendingIntentRecord)) {
             return;
@@ -15339,7 +15372,7 @@
             ProcessList.VISIBLE_APP_ADJ, ProcessList.PERCEPTIBLE_APP_ADJ,
             ProcessList.BACKUP_APP_ADJ, ProcessList.HEAVY_WEIGHT_APP_ADJ,
             ProcessList.SERVICE_ADJ, ProcessList.HOME_APP_ADJ,
-            ProcessList.PREVIOUS_APP_ADJ, ProcessList.SERVICE_B_ADJ, ProcessList.CACHED_APP_MAX_ADJ
+            ProcessList.PREVIOUS_APP_ADJ, ProcessList.SERVICE_B_ADJ, ProcessList.CACHED_APP_MIN_ADJ
     };
     static final String[] DUMP_MEM_OOM_LABEL = new String[] {
             "Native",
@@ -17311,7 +17344,8 @@
                     || Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS.equals(action)
                     || AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(action)
                     || AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)
-                    || LocationManager.HIGH_POWER_REQUEST_CHANGE_ACTION.equals(action)) {
+                    || LocationManager.HIGH_POWER_REQUEST_CHANGE_ACTION.equals(action)
+                    || TelephonyIntents.ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE.equals(action)) {
                 // Broadcast is either protected, or it's a public action that
                 // we've relaxed, so it's fine for system internals to send.
             } else {
@@ -18608,6 +18642,8 @@
             app.systemNoUi = true;
             if (app == TOP_APP) {
                 app.systemNoUi = false;
+                app.curSchedGroup = ProcessList.SCHED_GROUP_TOP_APP;
+                app.adjType = "pers-top-activity";
             } else if (activitiesSize > 0) {
                 for (int j = 0; j < activitiesSize; j++) {
                     final ActivityRecord r = app.activities.get(j);
@@ -20532,7 +20568,7 @@
                         && app.curReceiver == null && app.services.size() == 0) {
                     Slog.i(
                         TAG, "Exiting empty application process "
-                        + app.processName + " ("
+                        + app.toShortString() + " ("
                         + (app.thread != null ? app.thread.asBinder() : null)
                         + ")\n");
                     if (app.pid > 0 && app.pid != MY_PID) {
diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
index fe085d7..be8f21d 100644
--- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
@@ -18,6 +18,8 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 
+import java.util.ArrayList;
+
 /**
  * Handles logging into Tron.
  */
@@ -99,6 +101,47 @@
     }
 
     /**
+     * Notifies the tracker that the activity is actually launching.
+     *
+     * @param resultCode one of the ActivityManager.START_* flags, indicating the result of the
+     *                   launch
+     * @param launchedActivity the activity that is being launched
+     */
+    void notifyActivityLaunched(int resultCode, ActivityRecord launchedActivity) {
+        final ProcessRecord processRecord = launchedActivity != null
+                ? mSupervisor.mService.mProcessNames.get(launchedActivity.processName,
+                        launchedActivity.appInfo.uid)
+                : null;
+        final boolean processRunning = processRecord != null;
+        final String componentName = launchedActivity != null
+                ? launchedActivity.shortComponentName
+                : null;
+
+        // We consider this a "process switch" if the process of the activity that gets launched
+        // didn't have an activity that was in started state. In this case, we assume that lot
+        // of caches might be purged so the time until it produces the first frame is very
+        // interesting.
+        final boolean processSwitch = processRecord == null
+                || !hasStartedActivity(processRecord, launchedActivity);
+
+        notifyActivityLaunched(resultCode, componentName, processRunning, processSwitch);
+    }
+
+    private boolean hasStartedActivity(ProcessRecord record, ActivityRecord launchedActivity) {
+        final ArrayList<ActivityRecord> activities = record.activities;
+        for (int i = activities.size() - 1; i >= 0; i--) {
+            final ActivityRecord activity = activities.get(i);
+            if (launchedActivity == activity) {
+                continue;
+            }
+            if (!activity.stopped) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
      * Notifies the tracker the the activity is actually launching.
      *
      * @param resultCode one of the ActivityManager.START_* flags, indicating the result of the
@@ -109,7 +152,7 @@
      *                      activity that was stopped, i.e. the started activity is "switching"
      *                      processes
      */
-    void notifyActivityLaunched(int resultCode, @Nullable String componentName,
+    private void notifyActivityLaunched(int resultCode, @Nullable String componentName,
             boolean processRunning, boolean processSwitch) {
 
         if (resultCode < 0 || componentName == null || !processSwitch) {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index fa69b4a8..3ccac9e2 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -202,6 +202,7 @@
     static final int STARTING_WINDOW_SHOWN = 1;
     static final int STARTING_WINDOW_REMOVED = 2;
     int mStartingWindowState = STARTING_WINDOW_NOT_SHOWN;
+    boolean mTaskOverlay = false; // Task is always on-top of other activities in the task.
 
     boolean mUpdateTaskThumbnailWhenHidden;
     ActivityContainer mInitialActivityContainer;
@@ -1390,6 +1391,17 @@
         pendingVoiceInteractionStart = false;
     }
 
+    void showStartingWindow(ActivityRecord prev, boolean createIfNeeded) {
+        final CompatibilityInfo compatInfo =
+                service.compatibilityInfoForPackageLocked(info.applicationInfo);
+        final boolean shown = service.mWindowManager.setAppStartingWindow(
+                appToken, packageName, theme, compatInfo, nonLocalizedLabel, labelRes, icon,
+                logo, windowFlags, prev != null ? prev.appToken : null, createIfNeeded);
+        if (shown) {
+            mStartingWindowState = STARTING_WINDOW_SHOWN;
+        }
+    }
+
     void saveToXml(XmlSerializer out) throws IOException, XmlPullParserException {
         out.attribute(null, ATTR_ID, String.valueOf(createTime));
         out.attribute(null, ATTR_LAUNCHEDFROMUID, String.valueOf(launchedFromUid));
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 62d114d..8ade556 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -2017,6 +2017,9 @@
     void cancelInitializingActivities() {
         final ActivityRecord topActivity = topRunningActivityLocked();
         boolean aboveTop = true;
+        // We don't want to clear starting window for activities that aren't behind fullscreen
+        // activities as we need to display their starting window until they are done initializing.
+        boolean behindFullscreenActivity = false;
         for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
             final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities;
             for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
@@ -2025,16 +2028,20 @@
                     if (r == topActivity) {
                         aboveTop = false;
                     }
+                    behindFullscreenActivity |= r.fullscreen;
                     continue;
                 }
 
                 if (r.state == ActivityState.INITIALIZING
-                        && r.mStartingWindowState == STARTING_WINDOW_SHOWN) {
+                        && r.mStartingWindowState == STARTING_WINDOW_SHOWN
+                        && behindFullscreenActivity) {
                     if (DEBUG_VISIBILITY) Slog.w(TAG_VISIBILITY,
                             "Found orphaned starting window " + r);
                     r.mStartingWindowState = STARTING_WINDOW_REMOVED;
                     mWindowManager.removeAppStartingWindow(r.appToken);
                 }
+
+                behindFullscreenActivity |= r.fullscreen;
             }
         }
     }
@@ -2459,12 +2466,7 @@
                     next.hasBeenLaunched = true;
                 } else  if (SHOW_APP_STARTING_PREVIEW && lastStack != null &&
                         mStackSupervisor.isFrontStack(lastStack)) {
-                    mWindowManager.setAppStartingWindow(
-                            next.appToken, next.packageName, next.theme,
-                            mService.compatibilityInfoForPackageLocked(next.info.applicationInfo),
-                            next.nonLocalizedLabel, next.labelRes, next.icon, next.logo,
-                            next.windowFlags, null, true);
-                    next.mStartingWindowState = STARTING_WINDOW_SHOWN;
+                    next.showStartingWindow(null, true);
                 }
                 mStackSupervisor.startSpecificActivityLocked(next, true, false);
                 if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
@@ -2490,14 +2492,7 @@
                 next.hasBeenLaunched = true;
             } else {
                 if (SHOW_APP_STARTING_PREVIEW) {
-                    mWindowManager.setAppStartingWindow(
-                            next.appToken, next.packageName, next.theme,
-                            mService.compatibilityInfoForPackageLocked(
-                                    next.info.applicationInfo),
-                            next.nonLocalizedLabel,
-                            next.labelRes, next.icon, next.logo, next.windowFlags,
-                            null, true);
-                    next.mStartingWindowState = STARTING_WINDOW_SHOWN;
+                    next.showStartingWindow(null, true);
                 }
                 if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "Restarting: " + next);
             }
@@ -2712,7 +2707,7 @@
                 // "has the same starting icon" as the next one.  This allows the
                 // window manager to keep the previous window it had previously
                 // created, if it still had one.
-                ActivityRecord prev = mResumedActivity;
+                ActivityRecord prev = r.task.topRunningActivityWithStartingWindowLocked();
                 if (prev != null) {
                     // We don't want to reuse the previous starting preview if:
                     // (1) The current activity is in a different task.
@@ -2724,13 +2719,7 @@
                         prev = null;
                     }
                 }
-                mWindowManager.setAppStartingWindow(
-                        r.appToken, r.packageName, r.theme,
-                        mService.compatibilityInfoForPackageLocked(
-                                r.info.applicationInfo), r.nonLocalizedLabel,
-                        r.labelRes, r.icon, r.logo, r.windowFlags,
-                        prev != null ? prev.appToken : null, showStartingIcon);
-                r.mStartingWindowState = STARTING_WINDOW_SHOWN;
+                r.showStartingWindow(prev, showStartingIcon);
             }
         } else {
             // If this is the first activity, don't do any fancy animations,
@@ -4383,14 +4372,49 @@
     }
 
     /**
-     * Make sure the given activity matches the current configuration.  Returns
-     * false if the activity had to be destroyed.  Returns true if the
-     * configuration is the same, or the activity will remain running as-is
-     * for whatever reason.  Ensures the HistoryRecord is updated with the
+     * Ensures all visible activities at or below the input activity have the right configuration.
+     */
+    void ensureVisibleActivitiesConfigurationLocked(ActivityRecord start, boolean preserveWindow) {
+        if (start == null || !start.visible) {
+            return;
+        }
+
+        final TaskRecord startTask = start.task;
+        boolean behindFullscreen = false;
+        boolean updatedConfig = false;
+
+        for (int taskIndex = mTaskHistory.indexOf(startTask); taskIndex >= 0; --taskIndex) {
+            final TaskRecord task = mTaskHistory.get(taskIndex);
+            final ArrayList<ActivityRecord> activities = task.mActivities;
+            int activityIndex =
+                    (start.task == task) ? activities.indexOf(start) : activities.size() - 1;
+            for (; activityIndex >= 0; --activityIndex) {
+                final ActivityRecord r = activities.get(activityIndex);
+                updatedConfig |= ensureActivityConfigurationLocked(r, 0, preserveWindow);
+                if (r.fullscreen) {
+                    behindFullscreen = true;
+                    break;
+                }
+            }
+            if (behindFullscreen) {
+                break;
+            }
+        }
+        if (updatedConfig) {
+            // Ensure the resumed state of the focus activity if we updated the confiugaration of
+            // any activity.
+            mStackSupervisor.resumeFocusedStackTopActivityLocked();
+        }
+    }
+
+    /**
+     * Make sure the given activity matches the current configuration. Returns false if the activity
+     * had to be destroyed.  Returns true if the configuration is the same, or the activity will
+     * remain running as-is for whatever reason. Ensures the HistoryRecord is updated with the
      * correct configuration and all other bookkeeping is handled.
      */
-    final boolean ensureActivityConfigurationLocked(ActivityRecord r, int globalChanges,
-            boolean preserveWindow) {
+    boolean ensureActivityConfigurationLocked(
+            ActivityRecord r, int globalChanges, boolean preserveWindow) {
         if (mConfigWillChange) {
             if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
                     "Skipping config check (will change): " + r);
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 4bf28b2..0baca9e 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -2014,8 +2014,8 @@
         try {
             resizeStackUncheckedLocked(stack, bounds, tempTaskBounds, tempTaskInsetBounds);
             if (!deferResume) {
-                ensureConfigurationAndResume(
-                        stack, stack.topRunningActivityLocked(), preserveWindows);
+                stack.ensureVisibleActivitiesConfigurationLocked(
+                        stack.topRunningActivityLocked(), preserveWindows);
             }
         } finally {
             mWindowManager.continueSurfaceLayout();
@@ -2091,18 +2091,6 @@
         stack.setBounds(bounds);
     }
 
-    private void ensureConfigurationAndResume(ActivityStack stack, ActivityRecord r,
-            boolean preserveWindows) {
-        if (r == null || !r.visible) {
-            return;
-        }
-        final boolean updated = stack.ensureActivityConfigurationLocked(r, 0,
-                preserveWindows);
-        if (!updated) {
-            resumeFocusedStackTopActivityLocked();
-        }
-    }
-
     void moveTasksToFullscreenStackLocked(int fromStackId, boolean onTop) {
         final ActivityStack stack = getStack(fromStackId);
         if (stack == null) {
@@ -2204,7 +2192,7 @@
                     }
                 }
             }
-            ensureConfigurationAndResume(stack, r, preserveWindows);
+            stack.ensureVisibleActivitiesConfigurationLocked(r, preserveWindows);
         } finally {
             mAllowDockedStackResize = true;
             mWindowManager.continueSurfaceLayout();
@@ -2230,7 +2218,7 @@
             ActivityRecord r = stack.topRunningActivityLocked();
             resizeStackUncheckedLocked(stack, pinnedBounds, tempPinnedTaskBounds,
                     null);
-            ensureConfigurationAndResume(stack, r, false);
+            stack.ensureVisibleActivitiesConfigurationLocked(r, false);
         } finally {
             mWindowManager.continueSurfaceLayout();
             Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
@@ -4423,6 +4411,8 @@
                 && task.getRootActivity() != null) {
             mActivityMetricsLogger.notifyActivityLaunching();
             mService.moveTaskToFrontLocked(task.taskId, 0, bOptions);
+            mActivityMetricsLogger.notifyActivityLaunched(ActivityManager.START_TASK_TO_FRONT,
+                    task.getTopActivity());
 
             // If we are launching the task in the docked stack, put it into resizing mode so
             // the window renders full-screen with the background filling the void. Also only
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index c15effb..64b898a 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -677,16 +677,17 @@
                 // app in a locked managed profile from an unlocked parent allow it to resolve
                 // as user will be sent via confirm credentials to unlock the profile.
                 UserManager userManager = UserManager.get(mService.mContext);
-                UserInfo parent = null;
+                boolean profileLockedAndParentUnlockingOrUnlocked = false;
                 long token = Binder.clearCallingIdentity();
                 try {
-                    parent = userManager.getProfileParent(userId);
+                    UserInfo parent = userManager.getProfileParent(userId);
+                    profileLockedAndParentUnlockingOrUnlocked = (parent != null)
+                            && userManager.isUserUnlockingOrUnlocked(parent.id)
+                            && !userManager.isUserUnlockingOrUnlocked(userId);
                 } finally {
                     Binder.restoreCallingIdentity(token);
                 }
-                if (parent != null
-                        && userManager.isUserUnlockingOrUnlocked(parent.getUserHandle())
-                        && !userManager.isUserUnlockingOrUnlocked(userInfo.getUserHandle())) {
+                if (profileLockedAndParentUnlockingOrUnlocked) {
                     rInfo = mSupervisor.resolveIntent(intent, resolvedType, userId,
                             PackageManager.MATCH_DIRECT_BOOT_AWARE
                                     | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
@@ -845,42 +846,13 @@
                 }
             }
 
-            final String componentName = outRecord[0] != null ? outRecord[0].shortComponentName
-                    : null;
             final ActivityRecord launchedActivity = mReusedActivity != null
                     ? mReusedActivity : outRecord[0];
-            final ProcessRecord processRecord = launchedActivity != null
-                    ? mService.mProcessNames.get(launchedActivity.processName,
-                            launchedActivity.appInfo.uid)
-                    : null;
-            final boolean processRunning = processRecord != null;
-
-            // We consider this a "process switch" if the process of the activity that gets launched
-            // didn't have an activity that was in started state. In this case, we assume that lot
-            // of caches might be purged so the time until it produces the first frame is very
-            // interesting.
-            final boolean processSwitch = processRecord == null
-                    || !hasStartedActivity(processRecord, launchedActivity);
-            mSupervisor.mActivityMetricsLogger.notifyActivityLaunched(res, componentName,
-                    processRunning, processSwitch);
+            mSupervisor.mActivityMetricsLogger.notifyActivityLaunched(res, launchedActivity);
             return res;
         }
     }
 
-    final boolean hasStartedActivity(ProcessRecord record, ActivityRecord launchedActivity) {
-        final ArrayList<ActivityRecord> activities = record.activities;
-        for (int i = activities.size() - 1; i >= 0; i--) {
-            final ActivityRecord activity = activities.get(i);
-            if (launchedActivity == activity) {
-                continue;
-            }
-            if (!activity.stopped) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     final int startActivities(IApplicationThread caller, int callingUid, String callingPackage,
             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
             Bundle bOptions, int userId) {
@@ -1148,17 +1120,23 @@
                 // activity.
                 mService.setFocusedActivityLocked(mStartActivity, "startedActivity");
             }
-            if (mTargetStack.isFocusable()) {
-                mSupervisor.resumeFocusedStackTopActivityLocked(mTargetStack, mStartActivity,
-                        mOptions);
-            } else {
+            final ActivityRecord topTaskActivity = mStartActivity.task.topRunningActivityLocked();
+            if (!mTargetStack.isFocusable()
+                    || (topTaskActivity != null && topTaskActivity.mTaskOverlay
+                    && mStartActivity != topTaskActivity)) {
                 // If the activity is not focusable, we can't resume it, but still would like to
                 // make sure it becomes visible as it starts (this will also trigger entry
                 // animation). An example of this are PIP activities.
+                // Also, we don't want to resume activities in a task that currently has an overlay
+                // as the starting activity just needs to be in the visible paused state until the
+                // over is removed.
                 mTargetStack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
                 // Go ahead and tell window manager to execute app transition for this activity
                 // since the app transition will not be triggered through the resume channel.
                 mWindowManager.executeAppTransition();
+            } else {
+                mSupervisor.resumeFocusedStackTopActivityLocked(mTargetStack, mStartActivity,
+                        mOptions);
             }
         } else {
             mTargetStack.addRecentActivityLocked(mStartActivity);
@@ -1225,7 +1203,8 @@
             mDoResume = false;
         }
 
-        if (mOptions != null && mOptions.getLaunchTaskId() != -1 && mOptions.getAvoidMoveToFront()) {
+        if (mOptions != null && mOptions.getLaunchTaskId() != -1 && mOptions.getTaskOverlay()) {
+            r.mTaskOverlay = true;
             final TaskRecord task = mSupervisor.anyTaskForIdLocked(mOptions.getLaunchTaskId());
             final ActivityRecord top = task != null ? task.getTopActivity() : null;
             if (top != null && !top.visible) {
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index af5c577..96934f0 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -565,10 +565,10 @@
         }
     }
 
-    public void noteMobileRadioPowerState(int powerState, long timestampNs) {
+    public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) {
         enforceCallingPermission();
         synchronized (mStats) {
-            mStats.noteMobileRadioPowerState(powerState, timestampNs);
+            mStats.noteMobileRadioPowerState(powerState, timestampNs, uid);
         }
     }
 
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index b8f45bc..1f8d26b 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -198,16 +198,21 @@
         ref = new WeakReference<PendingIntentRecord>(this);
     }
 
-    public int send(int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver,
-            String requiredPermission, Bundle options) throws TransactionTooLargeException {
+    public void send(int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver,
+            String requiredPermission, Bundle options) {
+        sendInner(code, intent, resolvedType, finishedReceiver,
+                requiredPermission, null, null, 0, 0, 0, options, null);
+    }
+
+    public int sendWithResult(int code, Intent intent, String resolvedType,
+            IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
         return sendInner(code, intent, resolvedType, finishedReceiver,
                 requiredPermission, null, null, 0, 0, 0, options, null);
     }
 
     int sendInner(int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver,
             String requiredPermission, IBinder resultTo, String resultWho, int requestCode,
-            int flagsMask, int flagsValues, Bundle options, IActivityContainer container)
-            throws TransactionTooLargeException {
+            int flagsMask, int flagsValues, Bundle options, IActivityContainer container) {
         if (intent != null) intent.setDefusable(true);
         if (options != null) options.setDefusable(true);
 
@@ -253,6 +258,7 @@
                 if (userId == UserHandle.USER_CURRENT) {
                     userId = owner.mUserController.getCurrentOrTargetUserIdLocked();
                 }
+                int res = 0;
                 switch (key.type) {
                     case ActivityManager.INTENT_SENDER_ACTIVITY:
                         if (options == null) {
@@ -312,21 +318,23 @@
                                     resolvedType, key.packageName, userId);
                         } catch (RuntimeException e) {
                             Slog.w(TAG, "Unable to send startService intent", e);
+                        } catch (TransactionTooLargeException e) {
+                            res = ActivityManager.START_CANCELED;
                         }
                         break;
                 }
 
-                if (sendFinish) {
+                if (sendFinish && res != ActivityManager.START_CANCELED) {
                     try {
                         finishedReceiver.performReceive(new Intent(finalIntent), 0,
                                 null, null, false, false, key.userId);
                     } catch (RemoteException e) {
                     }
                 }
-                
+
                 Binder.restoreCallingIdentity(origId);
-                
-                return 0;
+
+                return res;
             }
         }
         return ActivityManager.START_CANCELED;
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index af7740f..729d32f 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -88,6 +88,7 @@
 import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE;
 import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE;
 import static com.android.server.am.ActivityRecord.RECENTS_ACTIVITY_TYPE;
+import static com.android.server.am.ActivityRecord.STARTING_WINDOW_SHOWN;
 
 final class TaskRecord {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "TaskRecord" : TAG_AM;
@@ -685,6 +686,20 @@
         return null;
     }
 
+    ActivityRecord topRunningActivityWithStartingWindowLocked() {
+        if (stack != null) {
+            for (int activityNdx = mActivities.size() - 1; activityNdx >= 0; --activityNdx) {
+                ActivityRecord r = mActivities.get(activityNdx);
+                if (r.mStartingWindowState != STARTING_WINDOW_SHOWN
+                        || r.finishing || !stack.okToShowLocked(r)) {
+                    continue;
+                }
+                return r;
+            }
+        }
+        return null;
+    }
+
     void setFrontOfTask() {
         setFrontOfTask(null);
     }
@@ -760,6 +775,18 @@
             // Otherwise make all added activities match this one.
             r.mActivityType = taskType;
         }
+
+        final int size = mActivities.size();
+
+        if (index == size && size > 0) {
+            final ActivityRecord top = mActivities.get(size - 1);
+            if (top.mTaskOverlay) {
+                // Place below the task overlay activity since the overlay activity should always
+                // be on top.
+                index--;
+            }
+        }
+
         mActivities.add(index, r);
         updateEffectiveIntent();
         if (r.isPersistable()) {
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 6c1e1a7..8c4e113 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -22,6 +22,9 @@
 import static android.net.RouteInfo.RTN_UNREACHABLE;
 
 import android.Manifest;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
 import android.app.AppGlobals;
 import android.app.AppOpsManager;
 import android.app.PendingIntent;
@@ -67,9 +70,11 @@
 import android.security.Credentials;
 import android.security.KeyStore;
 import android.text.TextUtils;
+import android.util.ArraySet;
 import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.net.LegacyVpnInfo;
 import com.android.internal.net.VpnConfig;
 import com.android.internal.net.VpnInfo;
@@ -88,7 +93,10 @@
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -119,9 +127,18 @@
     private final Looper mLooper;
     private final NetworkCapabilities mNetworkCapabilities;
 
-    /* list of users using this VPN. */
+    /**
+     * List of UIDs that are set to use this VPN by default. Normally, every UID in the user is
+     * added to this set but that can be changed by adding allowed or disallowed applications. It
+     * is non-null iff the VPN is connected.
+     *
+     * Unless the VPN has set allowBypass=true, these UIDs are forced into the VPN.
+     *
+     * @see VpnService.Builder#addAllowedApplication(String)
+     * @see VpnService.Builder#addDisallowedApplication(String)
+     */
     @GuardedBy("this")
-    private List<UidRange> mVpnUsers = null;
+    private Set<UidRange> mVpnUsers = null;
 
     // Handle of user initiating VPN.
     private final int mUserHandle;
@@ -467,22 +484,8 @@
             Binder.restoreCallingIdentity(token);
         }
 
-        addVpnUserLocked(mUserHandle);
-        // If the user can have restricted profiles, assign all its restricted profiles to this VPN
-        if (canHaveRestrictedProfile(mUserHandle)) {
-            token = Binder.clearCallingIdentity();
-            List<UserInfo> users;
-            try {
-                users = UserManager.get(mContext).getUsers();
-            } finally {
-                Binder.restoreCallingIdentity(token);
-            }
-            for (UserInfo user : users) {
-                if (user.isRestricted() && (user.restrictedProfileParentId == mUserHandle)) {
-                    addVpnUserLocked(user.id);
-                }
-            }
-        }
+        mVpnUsers = createUserAndRestrictedProfilesRanges(mUserHandle,
+                mConfig.allowedApplications, mConfig.disallowedApplications);
         mNetworkAgent.addUidRanges(mVpnUsers.toArray(new UidRange[mVpnUsers.size()]));
 
         mNetworkInfo.setIsAvailable(true);
@@ -568,7 +571,7 @@
         Connection oldConnection = mConnection;
         NetworkAgent oldNetworkAgent = mNetworkAgent;
         mNetworkAgent = null;
-        List<UidRange> oldUsers = mVpnUsers;
+        Set<UidRange> oldUsers = mVpnUsers;
 
         // Configure the interface. Abort if any of these steps fails.
         ParcelFileDescriptor tun = ParcelFileDescriptor.adoptFd(jniCreate(config.mtu));
@@ -601,8 +604,6 @@
             mConfig = config;
 
             // Set up forwarding and DNS rules.
-            mVpnUsers = new ArrayList<UidRange>();
-
             agentConnect();
 
             if (oldConnection != null) {
@@ -657,44 +658,93 @@
         return uids;
     }
 
-    // Note: This function adds to mVpnUsers but does not publish list to NetworkAgent.
-    private void addVpnUserLocked(int userHandle) {
-        if (mVpnUsers == null) {
-            throw new IllegalStateException("VPN is not active");
-        }
+    /**
+     * Creates a {@link Set} of non-intersecting {@link UidRange} objects including all UIDs
+     * associated with one user, and any restricted profiles attached to that user.
+     *
+     * <p>If one of {@param allowedApplications} or {@param disallowedApplications} is provided,
+     * the UID ranges will match the app whitelist or blacklist specified there. Otherwise, all UIDs
+     * in each user and profile will be included.
+     *
+     * @param userHandle The userId to create UID ranges for along with any of its restricted
+     *                   profiles.
+     * @param allowedApplications (optional) whitelist of applications to include.
+     * @param disallowedApplications (optional) blacklist of applications to exclude.
+     */
+    @VisibleForTesting
+    Set<UidRange> createUserAndRestrictedProfilesRanges(@UserIdInt int userHandle,
+            @Nullable List<String> allowedApplications,
+            @Nullable List<String> disallowedApplications) {
+        final Set<UidRange> ranges = new ArraySet<>();
 
-        if (mConfig.allowedApplications != null) {
+        // Assign the top-level user to the set of ranges
+        addUserToRanges(ranges, userHandle, allowedApplications, disallowedApplications);
+
+        // If the user can have restricted profiles, assign all its restricted profiles too
+        if (canHaveRestrictedProfile(userHandle)) {
+            final long token = Binder.clearCallingIdentity();
+            List<UserInfo> users;
+            try {
+                users = UserManager.get(mContext).getUsers();
+            } finally {
+                Binder.restoreCallingIdentity(token);
+            }
+            for (UserInfo user : users) {
+                if (user.isRestricted() && (user.restrictedProfileParentId == userHandle)) {
+                    addUserToRanges(ranges, user.id, allowedApplications, disallowedApplications);
+                }
+            }
+        }
+        return ranges;
+    }
+
+    /**
+     * Updates a {@link Set} of non-intersecting {@link UidRange} objects to include all UIDs
+     * associated with one user.
+     *
+     * <p>If one of {@param allowedApplications} or {@param disallowedApplications} is provided,
+     * the UID ranges will match the app whitelist or blacklist specified there. Otherwise, all UIDs
+     * in the user will be included.
+     *
+     * @param ranges {@link Set} of {@link UidRange}s to which to add.
+     * @param userHandle The userId to add to {@param ranges}.
+     * @param allowedApplications (optional) whitelist of applications to include.
+     * @param disallowedApplications (optional) blacklist of applications to exclude.
+     */
+    @VisibleForTesting
+    void addUserToRanges(@NonNull Set<UidRange> ranges, @UserIdInt int userHandle,
+            @Nullable List<String> allowedApplications,
+            @Nullable List<String> disallowedApplications) {
+        if (allowedApplications != null) {
             // Add ranges covering all UIDs for allowedApplications.
             int start = -1, stop = -1;
-            for (int uid : getAppsUids(mConfig.allowedApplications, userHandle)) {
+            for (int uid : getAppsUids(allowedApplications, userHandle)) {
                 if (start == -1) {
                     start = uid;
                 } else if (uid != stop + 1) {
-                    mVpnUsers.add(new UidRange(start, stop));
+                    ranges.add(new UidRange(start, stop));
                     start = uid;
                 }
                 stop = uid;
             }
-            if (start != -1) mVpnUsers.add(new UidRange(start, stop));
-        } else if (mConfig.disallowedApplications != null) {
+            if (start != -1) ranges.add(new UidRange(start, stop));
+        } else if (disallowedApplications != null) {
             // Add all ranges for user skipping UIDs for disallowedApplications.
             final UidRange userRange = UidRange.createForUser(userHandle);
             int start = userRange.start;
-            for (int uid : getAppsUids(mConfig.disallowedApplications, userHandle)) {
+            for (int uid : getAppsUids(disallowedApplications, userHandle)) {
                 if (uid == start) {
                     start++;
                 } else {
-                    mVpnUsers.add(new UidRange(start, uid - 1));
+                    ranges.add(new UidRange(start, uid - 1));
                     start = uid + 1;
                 }
             }
-            if (start <= userRange.stop) mVpnUsers.add(new UidRange(start, userRange.stop));
+            if (start <= userRange.stop) ranges.add(new UidRange(start, userRange.stop));
         } else {
             // Add all UIDs for the user.
-            mVpnUsers.add(UidRange.createForUser(userHandle));
+            ranges.add(UidRange.createForUser(userHandle));
         }
-
-        prepareStatusIntent();
     }
 
     // Returns the subset of the full list of active UID ranges the VPN applies to (mVpnUsers) that
@@ -703,7 +753,7 @@
         final UidRange userRange = UidRange.createForUser(userHandle);
         final List<UidRange> ranges = new ArrayList<UidRange>();
         for (UidRange range : mVpnUsers) {
-            if (range.start >= userRange.start && range.stop <= userRange.stop) {
+            if (userRange.containsRange(range)) {
                 ranges.add(range);
             }
         }
@@ -719,7 +769,6 @@
             mNetworkAgent.removeUidRanges(ranges.toArray(new UidRange[ranges.size()]));
         }
         mVpnUsers.removeAll(ranges);
-        mStatusIntent = null;
     }
 
     public void onUserAdded(int userHandle) {
@@ -729,7 +778,8 @@
                 && mVpnUsers != null) {
             synchronized(Vpn.this) {
                 try {
-                    addVpnUserLocked(userHandle);
+                    addUserToRanges(mVpnUsers, userHandle, mConfig.allowedApplications,
+                            mConfig.disallowedApplications);
                     if (mNetworkAgent != null) {
                         final List<UidRange> ranges = uidRangesForUser(userHandle);
                         mNetworkAgent.addUidRanges(ranges.toArray(new UidRange[ranges.size()]));
@@ -902,7 +952,7 @@
             return false;
         }
         for (UidRange uidRange : mVpnUsers) {
-            if (uidRange.start <= uid && uid <= uidRange.stop) {
+            if (uidRange.contains(uid)) {
                 return true;
             }
         }
@@ -1408,7 +1458,7 @@
 
                     // Now INetworkManagementEventObserver is watching our back.
                     mInterface = mConfig.interfaze;
-                    mVpnUsers = new ArrayList<UidRange>();
+                    prepareStatusIntent();
 
                     agentConnect();
 
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
index 7999321..44aafa8 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
@@ -650,7 +650,7 @@
     void addAndStartAction(final HdmiCecFeatureAction action) {
         assertRunOnServiceThread();
         mActions.add(action);
-        if (mService.isPowerStandby()) {
+        if (mService.isPowerStandby() || !mService.isAddressAllocated()) {
             Slog.i(TAG, "Not ready to start action. Queued for deferred start:" + action);
             return;
         }
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index e07d72f..5dc9d02 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -641,6 +641,10 @@
         }
     }
 
+    boolean isAddressAllocated() {
+        return mAddressAllocated;
+    }
+
     // Initialize HDMI port information. Combine the information from CEC and MHL HAL and
     // keep them in one place.
     @ServiceThreadOnly
diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
index e0179dc..9fd22686 100644
--- a/services/core/java/com/android/server/job/controllers/ConnectivityController.java
+++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
@@ -170,11 +170,6 @@
         }
 
         @Override
-        public void onRestrictPowerChanged(boolean restrictPower) {
-            updateTrackedJobs(-1);
-        }
-
-        @Override
         public void onRestrictBackgroundChanged(boolean restrictBackground) {
             updateTrackedJobs(-1);
         }
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 344ba17..4bdc237 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -266,7 +266,6 @@
     private static final int MSG_RESTRICT_BACKGROUND_WHITELIST_CHANGED = 9;
     private static final int MSG_UPDATE_INTERFACE_QUOTA = 10;
     private static final int MSG_REMOVE_INTERFACE_QUOTA = 11;
-    private static final int MSG_RESTRICT_POWER_CHANGED = 12;
 
     private final Context mContext;
     private final IActivityManager mActivityManager;
@@ -557,18 +556,9 @@
                             updateRulesForGlobalChangeLocked(true);
                         }
                     }
-                    mHandler.obtainMessage(MSG_RESTRICT_POWER_CHANGED,
-                            enabled ? 1 : 0, 0).sendToTarget();
                 }
             });
-            final boolean oldRestrictPower = mRestrictPower;
             mRestrictPower = mPowerManagerInternal.getLowPowerModeEnabled();
-            if (mRestrictPower != oldRestrictPower) {
-                // Some early services may have read the default value,
-                // so notify them that it's changed
-                mHandler.obtainMessage(MSG_RESTRICT_POWER_CHANGED,
-                        mRestrictPower ? 1 : 0, 0).sendToTarget();
-            }
 
             mSystemReady = true;
 
@@ -740,7 +730,7 @@
             if (LOGV) Slog.v(TAG, "ACTION_UID_REMOVED for uid=" + uid);
             synchronized (mRulesLock) {
                 mUidPolicy.delete(uid);
-                updateRuleForRestrictBackgroundLocked(uid);
+                updateRestrictionRulesForUidLocked(uid);
                 writePolicyLocked();
             }
         }
@@ -1729,7 +1719,7 @@
         mUidPolicy.put(uid, policy);
 
         // uid policy changed, recompute rules and persist policy.
-        updateRuleForRestrictBackgroundLocked(uid);
+        updateRulesForDataUsageRestrictionsLocked(uid);
         if (persist) {
             writePolicyLocked();
         }
@@ -2036,7 +2026,7 @@
             }
             if (needFirewallRules) {
                 // Only update firewall rules if necessary...
-                updateRuleForRestrictBackgroundLocked(uid);
+                updateRulesForDataUsageRestrictionsLocked(uid);
             }
             // ...but always persists the whitelist request.
             writePolicyLocked();
@@ -2081,7 +2071,7 @@
         }
         if (needFirewallRules) {
             // Only update firewall rules if necessary...
-            updateRuleForRestrictBackgroundLocked(uid, uidDeleted);
+            updateRulesForDataUsageRestrictionsLocked(uid, uidDeleted);
         }
         if (updateNow) {
             // ...but always persists the whitelist request.
@@ -2146,15 +2136,6 @@
     }
 
     @Override
-    public boolean getRestrictPower() {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
-
-        synchronized (mRulesLock) {
-            return mRestrictPower;
-        }
-    }
-
-    @Override
     public void setDeviceIdleMode(boolean enabled) {
         mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
 
@@ -2446,6 +2427,11 @@
         return isProcStateAllowedWhileOnRestrictBackgroundLocked(procState);
     }
 
+    private boolean isUidForegroundOnRestrictPowerLocked(int uid) {
+        final int procState = mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
+        return isProcStateAllowedWhileIdleOrPowerSaveMode(procState);
+    }
+
     private boolean isUidStateForegroundLocked(int state) {
         // only really in foreground when screen is also on
         return mScreenOn && state <= ActivityManager.PROCESS_STATE_TOP;
@@ -2453,7 +2439,8 @@
 
     /**
      * Process state of UID changed; if needed, will trigger
-     * {@link #updateRuleForRestrictBackgroundLocked(int)}.
+     * {@link #updateRulesForDataUsageRestrictionsLocked(int)} and
+     * {@link #updateRulesForPowerRestrictionsLocked(int)}
      */
     private void updateUidStateLocked(int uid, int uidState) {
         final int oldUidState = mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
@@ -2463,12 +2450,16 @@
             updateRestrictBackgroundRulesOnUidStatusChangedLocked(uid, oldUidState, uidState);
             if (isProcStateAllowedWhileIdleOrPowerSaveMode(oldUidState)
                     != isProcStateAllowedWhileIdleOrPowerSaveMode(uidState) ) {
+                if (isUidIdle(uid)) {
+                    updateRuleForAppIdleLocked(uid);
+                }
                 if (mDeviceIdleMode) {
                     updateRuleForDeviceIdleLocked(uid);
                 }
                 if (mRestrictPower) {
                     updateRuleForRestrictPowerLocked(uid);
                 }
+                updateRulesForPowerRestrictionsLocked(uid);
             }
             updateNetworkStats(uid, isUidStateForegroundLocked(uidState));
         }
@@ -2488,6 +2479,7 @@
                 if (mRestrictPower) {
                     updateRuleForRestrictPowerLocked(uid);
                 }
+                updateRulesForPowerRestrictionsLocked(uid);
                 updateNetworkStats(uid, false);
             }
         }
@@ -2509,7 +2501,7 @@
         final boolean newForeground =
                 isProcStateAllowedWhileOnRestrictBackgroundLocked(newUidState);
         if (oldForeground != newForeground) {
-            updateRuleForRestrictBackgroundLocked(uid);
+            updateRulesForDataUsageRestrictionsLocked(uid);
         }
     }
 
@@ -2600,6 +2592,10 @@
         enableFirewallChainLocked(chain, enabled);
     }
 
+    private void updateRulesForNonMeteredNetworksLocked() {
+
+    }
+
     private boolean isWhitelistedBatterySaverLocked(int uid) {
         final int appId = UserHandle.getAppId(uid);
         return mPowerSaveTempWhitelistAppIds.get(appId) || mPowerSaveWhitelistAppIds.get(appId);
@@ -2646,7 +2642,8 @@
         if (!isUidValidForBlacklistRules(uid)) return;
 
         int appId = UserHandle.getAppId(uid);
-        if (!mPowerSaveTempWhitelistAppIds.get(appId) && isUidIdle(uid)) {
+        if (!mPowerSaveTempWhitelistAppIds.get(appId) && isUidIdle(uid)
+                && !isUidForegroundOnRestrictPowerLocked(uid)) {
             setUidFirewallRule(FIREWALL_CHAIN_STANDBY, uid, FIREWALL_RULE_DENY);
         } else {
             setUidFirewallRule(FIREWALL_CHAIN_STANDBY, uid, FIREWALL_RULE_DEFAULT);
@@ -2701,7 +2698,8 @@
             for (int j = 0; j < appsSize; j++) {
                 final ApplicationInfo app = apps.get(j);
                 final int uid = UserHandle.getUid(user.id, app.uid);
-                updateRuleForRestrictBackgroundLocked(uid);
+                updateRulesForDataUsageRestrictionsLocked(uid);
+                updateRulesForPowerRestrictionsLocked(uid);
             }
         }
     }
@@ -2713,9 +2711,12 @@
             for (int j = mPowerSaveTempWhitelistAppIds.size() - 1; j >= 0; j--) {
                 int appId = mPowerSaveTempWhitelistAppIds.keyAt(j);
                 int uid = UserHandle.getUid(user.id, appId);
+                // Update external firewall rules.
                 updateRuleForAppIdleLocked(uid);
                 updateRuleForDeviceIdleLocked(uid);
                 updateRuleForRestrictPowerLocked(uid);
+                // Update internal rules.
+                updateRulesForPowerRestrictionsLocked(uid);
             }
         }
     }
@@ -2769,15 +2770,27 @@
     /**
      * Applies network rules to bandwidth and firewall controllers based on uid policy.
      *
-     * <p>There are currently 2 types of restriction rules:
+     * <p>There are currently 4 types of restriction rules:
      * <ul>
+     * <li>Doze mode
+     * <li>App idle mode
      * <li>Battery Saver Mode (also referred as power save).
      * <li>Data Saver Mode (The Feature Formerly Known As 'Restrict Background Data').
      * </ul>
+     *
+     * <p>This method changes both the external firewall rules and the internal state.
      */
     private void updateRestrictionRulesForUidLocked(int uid) {
+        // Methods below only changes the firewall rules for the power-related modes.
+        updateRuleForDeviceIdleLocked(uid);
+        updateRuleForAppIdleLocked(uid);
         updateRuleForRestrictPowerLocked(uid);
-        updateRuleForRestrictBackgroundLocked(uid);
+
+        // Update internal state for power-related modes.
+        updateRulesForPowerRestrictionsLocked(uid);
+
+        // Update firewall and internal rules for Data Saver Mode.
+        updateRulesForDataUsageRestrictionsLocked(uid);
     }
 
     /**
@@ -2799,7 +2812,7 @@
      * {@link #setUidPolicy(int, int)} and {@link #addRestrictBackgroundWhitelistedUid(int)} /
      * {@link #removeRestrictBackgroundWhitelistedUid(int)} methods (for blacklist and whitelist
      * respectively): these methods set the proper internal state (blacklist / whitelist), then call
-     * this ({@link #updateRuleForRestrictBackgroundLocked(int)}) to propagate the rules to
+     * this ({@link #updateRulesForDataUsageRestrictionsLocked(int)}) to propagate the rules to
      * {@link INetworkManagementService}, but this method should also be called in events (like
      * Data Saver Mode flips or UID state changes) that might affect the foreground app, since the
      * following rules should also be applied:
@@ -2818,19 +2831,16 @@
      *
      * <p>The {@link #mUidRules} map is used to define the transtion of states of an UID.
      *
-     * <p>This method also updates the {@link #mUidRules} with the power-related status for the uid
-     * and send the proper {@value #MSG_RULES_CHANGED} notification, although it does not change
-     * the power-related firewall rules per se.
      */
-    private void updateRuleForRestrictBackgroundLocked(int uid) {
-        updateRuleForRestrictBackgroundLocked(uid, false);
+    private void updateRulesForDataUsageRestrictionsLocked(int uid) {
+        updateRulesForDataUsageRestrictionsLocked(uid, false);
     }
 
     /**
-     * Overloaded version of {@link #updateRuleForRestrictBackgroundLocked(int)} called when an
+     * Overloaded version of {@link #updateRulesForDataUsageRestrictionsLocked(int)} called when an
      * app is removed - it ignores the UID validity check.
      */
-    private void updateRuleForRestrictBackgroundLocked(int uid, boolean uidDeleted) {
+    private void updateRulesForDataUsageRestrictionsLocked(int uid, boolean uidDeleted) {
         if (!uidDeleted && !isUidValidForWhitelistRules(uid)) {
             if (LOGD) Slog.d(TAG, "no need to update restrict data rules for uid " + uid);
             return;
@@ -2840,50 +2850,36 @@
         final int oldUidRules = mUidRules.get(uid, RULE_NONE);
         final boolean isForeground = isUidForegroundOnRestrictBackgroundLocked(uid);
 
-        // Data Saver status.
-        final boolean isDsBlacklisted = (uidPolicy & POLICY_REJECT_METERED_BACKGROUND) != 0;
-        final boolean isDsWhitelisted = mRestrictBackgroundWhitelistUids.get(uid);
-        final int oldDsRule = oldUidRules & MASK_METERED_NETWORKS;
-        int newDsRule = RULE_NONE;
-
-        // Battery Saver status.
-        final boolean isBsWhitelisted = isWhitelistedBatterySaverLocked(uid);
-        final int oldBsRule = oldUidRules & MASK_ALL_NETWORKS;
-        int newBsRule = RULE_NONE;
+        final boolean isBlacklisted = (uidPolicy & POLICY_REJECT_METERED_BACKGROUND) != 0;
+        final boolean isWhitelisted = mRestrictBackgroundWhitelistUids.get(uid);
+        final int oldRule = oldUidRules & MASK_METERED_NETWORKS;
+        int newRule = RULE_NONE;
 
         // First step: define the new rule based on user restrictions and foreground state.
         if (isForeground) {
-            // Data Saver rules
-            if (isDsBlacklisted || (mRestrictBackground && !isDsWhitelisted)) {
-                newDsRule = RULE_TEMPORARY_ALLOW_METERED;
-            } else if (isDsWhitelisted) {
-                newDsRule = RULE_ALLOW_METERED;
-            }
-            // Battery Saver rules
-            if (mRestrictPower) {
-                newBsRule = RULE_ALLOW_ALL;
+            if (isBlacklisted || (mRestrictBackground && !isWhitelisted)) {
+                newRule = RULE_TEMPORARY_ALLOW_METERED;
+            } else if (isWhitelisted) {
+                newRule = RULE_ALLOW_METERED;
             }
         } else {
-            // Data Saver rules
-            if (isDsBlacklisted) {
-                newDsRule = RULE_REJECT_METERED;
-            } else if (mRestrictBackground && isDsWhitelisted) {
-                newDsRule = RULE_ALLOW_METERED;
-            }
-            // Battery Saver rules
-            if (mRestrictPower) {
-                newBsRule = isBsWhitelisted ? RULE_ALLOW_ALL : RULE_REJECT_ALL;
+            if (isBlacklisted) {
+                newRule = RULE_REJECT_METERED;
+            } else if (mRestrictBackground && isWhitelisted) {
+                newRule = RULE_ALLOW_METERED;
             }
         }
-        final int newUidRules = newDsRule | newBsRule;
+        final int newUidRules = newRule | (oldUidRules & MASK_ALL_NETWORKS);
 
         if (LOGV) {
-            Log.v(TAG, "updateRuleForRestrictBackgroundLocked(" + uid + "):"
-                    + " isForeground=" +isForeground + ", isBlacklisted: " + isDsBlacklisted
-                    + ", isDsWhitelisted: " + isDsWhitelisted
-                    + ", isBsWhitelisted: " + isBsWhitelisted
-                    + ", newUidRules: " + uidRulesToString(newUidRules)
-                    + ", oldUidRules: " + uidRulesToString(oldUidRules));
+            Log.v(TAG, "updateRuleForRestrictBackgroundLocked(" + uid + ")"
+                    + ": isForeground=" +isForeground
+                    + ", isBlacklisted=" + isBlacklisted
+                    + ", isWhitelisted=" + isWhitelisted
+                    + ", oldRule=" + uidRulesToString(oldRule)
+                    + ", newRule=" + uidRulesToString(newRule)
+                    + ", newUidRules=" + uidRulesToString(newUidRules)
+                    + ", oldUidRules=" + uidRulesToString(oldUidRules));
         }
 
         if (newUidRules == RULE_NONE) {
@@ -2895,12 +2891,10 @@
         boolean changed = false;
 
         // Second step: apply bw changes based on change of state.
-
-        // Apply Data Saver rules.
-        if (newDsRule != oldDsRule) {
+        if (newRule != oldRule) {
             changed = true;
 
-            if ((newDsRule & RULE_TEMPORARY_ALLOW_METERED) != 0) {
+            if ((newRule & RULE_TEMPORARY_ALLOW_METERED) != 0) {
                 // Temporarily whitelist foreground app, removing from blacklist if necessary
                 // (since bw_penalty_box prevails over bw_happy_box).
 
@@ -2908,68 +2902,132 @@
                 // TODO: if statement below is used to avoid an unnecessary call to netd / iptables,
                 // but ideally it should be just:
                 //    setMeteredNetworkBlacklist(uid, isBlacklisted);
-                if (isDsBlacklisted) {
+                if (isBlacklisted) {
                     setMeteredNetworkBlacklist(uid, false);
                 }
-            } else if ((oldDsRule & RULE_TEMPORARY_ALLOW_METERED) != 0) {
+            } else if ((oldRule & RULE_TEMPORARY_ALLOW_METERED) != 0) {
                 // Remove temporary whitelist from app that is not on foreground anymore.
 
                 // TODO: if statements below are used to avoid unnecessary calls to netd / iptables,
                 // but ideally they should be just:
                 //    setMeteredNetworkWhitelist(uid, isWhitelisted);
                 //    setMeteredNetworkBlacklist(uid, isBlacklisted);
-                if (!isDsWhitelisted) {
+                if (!isWhitelisted) {
                     setMeteredNetworkWhitelist(uid, false);
                 }
-                if (isDsBlacklisted) {
+                if (isBlacklisted) {
                     setMeteredNetworkBlacklist(uid, true);
                 }
-            } else if ((newDsRule & RULE_REJECT_METERED) != 0
-                    || (oldDsRule & RULE_REJECT_METERED) != 0) {
+            } else if ((newRule & RULE_REJECT_METERED) != 0
+                    || (oldRule & RULE_REJECT_METERED) != 0) {
                 // Flip state because app was explicitly added or removed to blacklist.
-                setMeteredNetworkBlacklist(uid, isDsBlacklisted);
-                if ((oldDsRule & RULE_REJECT_METERED) != 0 && isDsWhitelisted) {
+                setMeteredNetworkBlacklist(uid, isBlacklisted);
+                if ((oldRule & RULE_REJECT_METERED) != 0 && isWhitelisted) {
                     // Since blacklist prevails over whitelist, we need to handle the special case
                     // where app is whitelisted and blacklisted at the same time (although such
                     // scenario should be blocked by the UI), then blacklist is removed.
-                    setMeteredNetworkWhitelist(uid, isDsWhitelisted);
+                    setMeteredNetworkWhitelist(uid, isWhitelisted);
                 }
-            } else if ((newDsRule & RULE_ALLOW_METERED) != 0
-                    || (oldDsRule & RULE_ALLOW_METERED) != 0) {
+            } else if ((newRule & RULE_ALLOW_METERED) != 0
+                    || (oldRule & RULE_ALLOW_METERED) != 0) {
                 // Flip state because app was explicitly added or removed to whitelist.
-                setMeteredNetworkWhitelist(uid, isDsWhitelisted);
+                setMeteredNetworkWhitelist(uid, isWhitelisted);
             } else {
-                // All scenarios should have been covered above
+                // All scenarios should have been covered above.
                 Log.wtf(TAG, "Unexpected change of metered UID state for " + uid
                         + ": foreground=" + isForeground
-                        + ", whitelisted=" + isDsWhitelisted
-                        + ", blacklisted=" + isDsBlacklisted
+                        + ", whitelisted=" + isWhitelisted
+                        + ", blacklisted=" + isBlacklisted
                         + ", newRule=" + uidRulesToString(newUidRules)
                         + ", oldRule=" + uidRulesToString(oldUidRules));
             }
+
+            // Dispatch changed rule to existing listeners.
+            mHandler.obtainMessage(MSG_RULES_CHANGED, uid, newUidRules).sendToTarget();
+        }
+    }
+
+    /**
+     * Updates the power-related part of the {@link #mUidRules} for a given map, and notify external
+     * listeners in case of change.
+     * <p>
+     * There are 3 power-related rules that affects whether an app has background access on
+     * non-metered networks, and when the condition applies and the UID is not whitelisted for power
+     * restriction, it's added to the equivalent firewall chain:
+     * <ul>
+     * <li>App is idle: {@code fw_standby} firewall chain.
+     * <li>Device is idle: {@code fw_dozable} firewall chain.
+     * <li>Battery Saver Mode is on: {@code fw_powersave} firewall chain.
+     * </ul>
+     * <p>
+     * This method updates the power-related part of the {@link #mUidRules} for a given uid based on
+     * these modes, the UID process state (foreground or not), and the UIDwhitelist state.
+     * <p>
+     * <strong>NOTE: </strong>This method does not update the firewall rules on {@code netd}.
+     */
+    private void updateRulesForPowerRestrictionsLocked(int uid) {
+        if (!isUidValidForBlacklistRules(uid)) {
+            if (LOGD) Slog.d(TAG, "no need to update restrict power rules for uid " + uid);
+            return;
         }
 
-        // Apply Battery Saver rules.
-        // NOTE: the firewall rules are changed outside this method, but it's still necessary to
-        // send the MSG_RULES_CHANGED so ConnectivityService can update its internal status.
-        if (newBsRule != oldBsRule) {
-            changed = true;
-            if (newBsRule == RULE_NONE || (newBsRule & RULE_ALLOW_ALL) != 0) {
+        final boolean isIdle = isUidIdle(uid);
+        final boolean restrictMode = isIdle || mRestrictPower || mDeviceIdleMode;
+        final int uidPolicy = mUidPolicy.get(uid, POLICY_NONE);
+        final int oldUidRules = mUidRules.get(uid, RULE_NONE);
+        final boolean isForeground = isUidForegroundOnRestrictPowerLocked(uid);
+
+        final boolean isWhitelisted = isWhitelistedBatterySaverLocked(uid);
+        final int oldRule = oldUidRules & MASK_ALL_NETWORKS;
+        int newRule = RULE_NONE;
+
+        // First step: define the new rule based on user restrictions and foreground state.
+
+        // NOTE: if statements below could be inlined, but it's easier to understand the logic
+        // by considering the foreground and non-foreground states.
+        if (isForeground) {
+            if (restrictMode) {
+                newRule = RULE_ALLOW_ALL;
+            }
+        } else if (restrictMode) {
+            newRule = isWhitelisted ? RULE_ALLOW_ALL : RULE_REJECT_ALL;
+        }
+
+        final int newUidRules = (oldUidRules & MASK_METERED_NETWORKS) | newRule;
+
+        if (LOGV) {
+            Log.v(TAG, "updateRulesForNonMeteredNetworksLocked(" + uid + ")"
+                    + ", isIdle: " + isIdle
+                    + ", mRestrictPower: " + mRestrictPower
+                    + ", mDeviceIdleMode: " + mDeviceIdleMode
+                    + ", isForeground=" + isForeground
+                    + ", isWhitelisted=" + isWhitelisted
+                    + ", oldRule=" + uidRulesToString(oldRule)
+                    + ", newRule=" + uidRulesToString(newRule)
+                    + ", newUidRules=" + uidRulesToString(newUidRules)
+                    + ", oldUidRules=" + uidRulesToString(oldUidRules));
+        }
+
+        if (newUidRules == RULE_NONE) {
+            mUidRules.delete(uid);
+        } else {
+            mUidRules.put(uid, newUidRules);
+        }
+
+        // Second step: notify listeners if state changed.
+        if (newRule != oldRule) {
+            if (newRule == RULE_NONE || (newRule & RULE_ALLOW_ALL) != 0) {
                 if (LOGV) Log.v(TAG, "Allowing non-metered access for UID " + uid);
-            } else if ((newBsRule & RULE_REJECT_ALL) != 0) {
+            } else if ((newRule & RULE_REJECT_ALL) != 0) {
                 if (LOGV) Log.v(TAG, "Rejecting non-metered access for UID " + uid);
             } else {
                 // All scenarios should have been covered above
                 Log.wtf(TAG, "Unexpected change of non-metered UID state for " + uid
                         + ": foreground=" + isForeground
-                        + ", whitelisted=" + isBsWhitelisted
+                        + ", whitelisted=" + isWhitelisted
                         + ", newRule=" + uidRulesToString(newUidRules)
                         + ", oldRule=" + uidRulesToString(oldUidRules));
             }
-        }
-
-        // Final step: dispatch changed rule to existing listeners
-        if (changed) {
             mHandler.obtainMessage(MSG_RULES_CHANGED, uid, newUidRules).sendToTarget();
         }
     }
@@ -2982,8 +3040,10 @@
             try {
                 final int uid = mContext.getPackageManager().getPackageUidAsUser(packageName,
                         PackageManager.MATCH_UNINSTALLED_PACKAGES, userId);
+                if (LOGV) Log.v(TAG, "onAppIdleStateChanged(): uid=" + uid + ", idle=" + idle);
                 synchronized (mRulesLock) {
                     updateRuleForAppIdleLocked(uid);
+                    updateRulesForPowerRestrictionsLocked(uid);
                 }
             } catch (NameNotFoundException nnfe) {
             }
@@ -3036,16 +3096,6 @@
         }
     }
 
-    private void dispatchRestrictPowerChanged(INetworkPolicyListener listener,
-            boolean restrictPower) {
-        if (listener != null) {
-            try {
-                listener.onRestrictPowerChanged(restrictPower);
-            } catch (RemoteException ignored) {
-            }
-        }
-    }
-
     private Handler.Callback mHandlerCallback = new Handler.Callback() {
         @Override
         public boolean handleMessage(Message msg) {
@@ -3093,11 +3143,6 @@
                     }
                     return true;
                 }
-                case MSG_RESTRICT_POWER_CHANGED: {
-                    final boolean restrictPower = msg.arg1 != 0;
-                    dispatchRestrictPowerChanged(mConnectivityListener, restrictPower);
-                    return true;
-                }
                 case MSG_RESTRICT_BACKGROUND_CHANGED: {
                     final boolean restrictBackground = msg.arg1 != 0;
                     dispatchRestrictBackgroundChanged(mConnectivityListener, restrictBackground);
@@ -3410,6 +3455,7 @@
             if (LOGV) Slog.v(TAG, "onPackageRemoved: " + packageName + " ->" + uid);
             synchronized (mRulesLock) {
                 removeRestrictBackgroundWhitelistedUidLocked(uid, true, true);
+                updateRestrictionRulesForUidLocked(uid);
             }
         }
     }
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index 29e2e44..53c5a6d 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -868,7 +868,7 @@
                 return false;
             }
             if (this.userid == UserHandle.USER_ALL) return true;
-            if (this.userid == UserHandle.USER_SYSTEM) return true;
+            if (this.isSystem) return true;
             if (nid == UserHandle.USER_ALL || nid == this.userid) return true;
             return supportsProfiles() && mUserProfiles.isCurrentProfile(nid);
         }
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 60e00a9..6864ed8 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -55,6 +55,7 @@
 import android.service.notification.ZenModeConfig.ScheduleInfo;
 import android.service.notification.ZenModeConfig.ZenRule;
 import android.text.TextUtils;
+import android.util.AndroidRuntimeException;
 import android.util.Log;
 import android.util.SparseArray;
 
@@ -293,7 +294,9 @@
 
         ZenModeConfig newConfig;
         synchronized (mConfig) {
-            if (mConfig == null) return null;
+            if (mConfig == null) {
+                throw new AndroidRuntimeException("Could not create rule");
+            }
             if (DEBUG) {
                 Log.d(TAG, "addAutomaticZenRule rule= " + automaticZenRule + " reason=" + reason);
             }
@@ -304,7 +307,7 @@
             if (setConfigLocked(newConfig, reason, true)) {
                 return rule.id;
             } else {
-                return null;
+                throw new AndroidRuntimeException("Could not create rule");
             }
         }
     }
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 41a563c..faec844 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -164,7 +164,6 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.hardware.display.DisplayManager;
-import android.net.INetworkPolicyManager;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Build;
@@ -1043,6 +1042,7 @@
     static final int CHECK_PENDING_VERIFICATION = 16;
     static final int START_INTENT_FILTER_VERIFICATIONS = 17;
     static final int INTENT_FILTER_VERIFIED = 18;
+    static final int WRITE_PACKAGE_LIST = 19;
 
     static final int WRITE_SETTINGS_DELAY = 10*1000;  // 10 seconds
 
@@ -1665,6 +1665,14 @@
                     }
                     Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
                 } break;
+                case WRITE_PACKAGE_LIST: {
+                    Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
+                    synchronized (mPackages) {
+                        removeMessages(WRITE_PACKAGE_LIST);
+                        mSettings.writePackageListLPr(msg.arg1);
+                    }
+                    Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+                } break;
                 case CHECK_PENDING_VERIFICATION: {
                     final int verificationId = msg.arg1;
                     final PackageVerificationState state = mPendingVerification.get(verificationId);
@@ -2112,6 +2120,14 @@
         }
     }
 
+    void scheduleWritePackageListLocked(int userId) {
+        if (!mHandler.hasMessages(WRITE_PACKAGE_LIST)) {
+            Message msg = mHandler.obtainMessage(WRITE_PACKAGE_LIST);
+            msg.arg1 = userId;
+            mHandler.sendMessageDelayed(msg, WRITE_SETTINGS_DELAY);
+        }
+    }
+
     void scheduleWritePackageRestrictionsLocked(UserHandle user) {
         final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier();
         scheduleWritePackageRestrictionsLocked(userId);
@@ -2708,6 +2724,7 @@
                                 StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE
                                         | Installer.FLAG_CLEAR_CODE_CACHE_ONLY);
                     }
+                    clearAppProfilesLIF(ps.pkg, UserHandle.USER_ALL);
                 }
                 ver.fingerprint = Build.FINGERPRINT;
             }
@@ -5011,6 +5028,25 @@
                 ri = new ResolveInfo(mResolveInfo);
                 ri.activityInfo = new ActivityInfo(ri.activityInfo);
                 ri.activityInfo.labelRes = ResolverActivity.getLabelRes(intent.getAction());
+                // If all of the options come from the same package, show the application's
+                // label and icon instead of the generic resolver's.
+                // Some calls like Intent.resolveActivityInfo query the ResolveInfo from here
+                // and then throw away the ResolveInfo itself, meaning that the caller loses
+                // the resolvePackageName. Therefore the activityInfo.labelRes above provides
+                // a fallback for this case; we only set the target package's resources on
+                // the ResolveInfo, not the ActivityInfo.
+                final String intentPackage = intent.getPackage();
+                if (!TextUtils.isEmpty(intentPackage) && allHavePackage(query, intentPackage)) {
+                    final ApplicationInfo appi = query.get(0).activityInfo.applicationInfo;
+                    ri.resolvePackageName = intentPackage;
+                    if (userNeedsBadging(userId)) {
+                        ri.noResourceId = true;
+                    } else {
+                        ri.icon = appi.icon;
+                    }
+                    ri.iconResourceId = appi.icon;
+                    ri.labelRes = appi.labelRes;
+                }
                 ri.activityInfo.applicationInfo = new ApplicationInfo(
                         ri.activityInfo.applicationInfo);
                 if (userId != 0) {
@@ -5026,6 +5062,24 @@
         return null;
     }
 
+    /**
+     * Return true if the given list is not empty and all of its contents have
+     * an activityInfo with the given package name.
+     */
+    private boolean allHavePackage(List<ResolveInfo> list, String packageName) {
+        if (ArrayUtils.isEmpty(list)) {
+            return false;
+        }
+        for (int i = 0, N = list.size(); i < N; i++) {
+            final ResolveInfo ri = list.get(i);
+            final ActivityInfo ai = ri != null ? ri.activityInfo : null;
+            if (ai == null || !packageName.equals(ai.packageName)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     private ResolveInfo findPersistentPreferredActivityLP(Intent intent, String resolvedType,
             int flags, List<ResolveInfo> query, boolean debug, int userId) {
         final int N = query.size();
@@ -7528,15 +7582,61 @@
         }
     }
 
-    private void destroyAppProfilesLIF(PackageParser.Package pkg) {
+    private void destroyAppProfilesLIF(PackageParser.Package pkg, int userId) {
         if (pkg == null) {
             Slog.wtf(TAG, "Package was null!", new Throwable());
             return;
         }
         destroyAppProfilesLeafLIF(pkg);
+        destroyAppReferenceProfileLeafLIF(pkg, userId);
         final int childCount = (pkg.childPackages != null) ? pkg.childPackages.size() : 0;
         for (int i = 0; i < childCount; i++) {
             destroyAppProfilesLeafLIF(pkg.childPackages.get(i));
+            destroyAppReferenceProfileLeafLIF(pkg.childPackages.get(i), userId);
+        }
+    }
+
+    private void destroyAppReferenceProfileLeafLIF(PackageParser.Package pkg, int userId) {
+        if (pkg.isForwardLocked()) {
+            return;
+        }
+
+        for (String path : pkg.getAllCodePathsExcludingResourceOnly()) {
+            try {
+                path = new File(path).getCanonicalPath();
+            } catch (IOException e) {
+                // TODO: Should we return early here ?
+                Slog.w(TAG, "Failed to get canonical path", e);
+            }
+
+            final String useMarker = path.replace('/', '@');
+            for (int realUserId : resolveUserIds(userId)) {
+                File profileDir = Environment.getDataProfilesDeForeignDexDirectory(realUserId);
+                File foreignUseMark = new File(profileDir, useMarker);
+                if (foreignUseMark.exists()) {
+                    if (!foreignUseMark.delete()) {
+                        Slog.w(TAG, "Unable to delete foreign user mark for package: "
+                            + pkg.packageName);
+                    }
+                }
+
+                File[] markers = profileDir.listFiles();
+                if (markers != null) {
+                    final String searchString = "@" + pkg.packageName + "@";
+                    // We also delete all markers that contain the package name we're
+                    // uninstalling. These are associated with secondary dex-files belonging
+                    // to the package. Reconstructing the path of these dex files is messy
+                    // in general.
+                    for (File marker : markers) {
+                        if (marker.getName().indexOf(searchString) > 0) {
+                            if (!marker.delete()) {
+                                Slog.w(TAG, "Unable to delete foreign user mark for package: "
+                                    + pkg.packageName);
+                            }
+                        }
+                    }
+                }
+            }
         }
     }
 
@@ -7548,12 +7648,13 @@
         }
     }
 
-    private void clearAppProfilesLIF(PackageParser.Package pkg) {
+    private void clearAppProfilesLIF(PackageParser.Package pkg, int userId) {
         if (pkg == null) {
             Slog.wtf(TAG, "Package was null!", new Throwable());
             return;
         }
         clearAppProfilesLeafLIF(pkg);
+        destroyAppReferenceProfileLeafLIF(pkg, userId);
         final int childCount = (pkg.childPackages != null) ? pkg.childPackages.size() : 0;
         for (int i = 0; i < childCount; i++) {
             clearAppProfilesLeafLIF(pkg.childPackages.get(i));
@@ -7757,7 +7858,7 @@
                 // DELETE_DATA_ON_FAILURES is only used by frozen paths
                 destroyAppDataLIF(pkg, UserHandle.USER_ALL,
                         StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
-                destroyAppProfilesLIF(pkg);
+                destroyAppProfilesLIF(pkg, UserHandle.USER_ALL);
             }
         }
     }
@@ -14105,7 +14206,7 @@
 
             clearAppDataLIF(pkg, UserHandle.USER_ALL, StorageManager.FLAG_STORAGE_DE
                     | StorageManager.FLAG_STORAGE_CE | Installer.FLAG_CLEAR_CODE_CACHE_ONLY);
-            clearAppProfilesLIF(pkg);
+            clearAppProfilesLIF(deletedPackage, UserHandle.USER_ALL);
 
             try {
                 final PackageParser.Package newPackage = scanPackageTracedLI(pkg, policyFlags,
@@ -14231,7 +14332,7 @@
         // Successfully disabled the old package. Now proceed with re-installation
         clearAppDataLIF(pkg, UserHandle.USER_ALL, StorageManager.FLAG_STORAGE_DE
                 | StorageManager.FLAG_STORAGE_CE | Installer.FLAG_CLEAR_CODE_CACHE_ONLY);
-        clearAppProfilesLIF(pkg);
+        clearAppProfilesLIF(deletedPackage, UserHandle.USER_ALL);
 
         res.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
         pkg.setApplicationInfoFlags(ApplicationInfo.FLAG_UPDATED_SYSTEM_APP,
@@ -15475,7 +15576,7 @@
             }
             destroyAppDataLIF(resolvedPkg, UserHandle.USER_ALL,
                     StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
-            destroyAppProfilesLIF(resolvedPkg);
+            destroyAppProfilesLIF(resolvedPkg, UserHandle.USER_ALL);
             if (outInfo != null) {
                 outInfo.dataRemoved = true;
             }
@@ -16010,6 +16111,7 @@
 
             destroyAppDataLIF(pkg, userId,
                     StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
+            destroyAppProfilesLIF(pkg, userId);
             removeKeystoreDataIfNeeded(nextUserId, ps.appId);
             schedulePackageCleaning(ps.name, nextUserId, false);
             synchronized (mPackages) {
@@ -16115,7 +16217,7 @@
 
         try (PackageFreezer freezer = freezePackage(packageName, "clearApplicationProfileData")) {
             synchronized (mInstallLock) {
-                clearAppProfilesLIF(pkg);
+                clearAppProfilesLIF(pkg, UserHandle.USER_ALL);
             }
         }
     }
@@ -17447,6 +17549,14 @@
                 throw new IllegalArgumentException(
                         "Unknown component: " + packageName + "/" + className);
             }
+            // Don't allow other apps to disable an active profile owner
+            if (!UserHandle.isSameApp(uid, pkgSetting.appId)) {
+                final DevicePolicyManagerInternal dpmi = LocalServices
+                        .getService(DevicePolicyManagerInternal.class);
+                if (dpmi != null && dpmi.hasDeviceOwnerOrProfileOwner(packageName, userId)) {
+                    throw new SecurityException("Cannot disable a device owner or a profile owner");
+                }
+            }
             // Allow root and verify that userId is not being specified by a different user
             if (!allowedByPermission && !UserHandle.isSameApp(uid, pkgSetting.appId)) {
                 throw new SecurityException(
@@ -17454,6 +17564,25 @@
                         + Binder.getCallingPid()
                         + ", uid=" + uid + ", package uid=" + pkgSetting.appId);
             }
+            if (uid == Process.SHELL_UID) {
+                // Shell can only change whole packages between ENABLED and DISABLED_USER states
+                int oldState = pkgSetting.getEnabled(userId);
+                if (className == null
+                    &&
+                    (oldState == COMPONENT_ENABLED_STATE_DISABLED_USER
+                     || oldState == COMPONENT_ENABLED_STATE_DEFAULT
+                     || oldState == COMPONENT_ENABLED_STATE_ENABLED)
+                    &&
+                    (newState == COMPONENT_ENABLED_STATE_DISABLED_USER
+                     || newState == COMPONENT_ENABLED_STATE_DEFAULT
+                     || newState == COMPONENT_ENABLED_STATE_ENABLED)) {
+                    // ok
+                } else {
+                    throw new SecurityException(
+                            "Shell cannot change component state for " + packageName + "/"
+                            + className + " to " + newState);
+                }
+            }
             if (className == null) {
                 // We're dealing with an application/package level state change
                 if (pkgSetting.getEnabled(userId) == newState) {
@@ -20002,18 +20131,25 @@
     }
 
     /** Called by UserManagerService */
-    void createNewUser(int userHandle) {
+    void createNewUser(int userId) {
         synchronized (mInstallLock) {
-            mSettings.createNewUserLI(this, mInstaller, userHandle);
+            mSettings.createNewUserLI(this, mInstaller, userId);
         }
         synchronized (mPackages) {
-            applyFactoryDefaultBrowserLPw(userHandle);
-            primeDomainVerificationsLPw(userHandle);
+            scheduleWritePackageRestrictionsLocked(userId);
+            scheduleWritePackageListLocked(userId);
+            applyFactoryDefaultBrowserLPw(userId);
+            primeDomainVerificationsLPw(userId);
         }
     }
 
-    void newUserCreated(final int userHandle) {
-        mDefaultPermissionPolicy.grantDefaultPermissions(userHandle);
+    void onBeforeUserStartUninitialized(final int userId) {
+        synchronized (mPackages) {
+            if (mSettings.areDefaultRuntimePermissionsGrantedLPr(userId)) {
+                return;
+            }
+        }
+        mDefaultPermissionPolicy.grantDefaultPermissions(userId);
         // If permission review for legacy apps is required, we represent
         // dagerous permissions for such apps as always granted runtime
         // permissions to keep per user flag state whether review is needed.
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 4de8b57..1eeff14 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -1463,14 +1463,13 @@
 
         private IIntentSender.Stub mLocalSender = new IIntentSender.Stub() {
             @Override
-            public int send(int code, Intent intent, String resolvedType,
+            public void send(int code, Intent intent, String resolvedType,
                     IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
                 try {
                     mResult.offer(intent, 5, TimeUnit.SECONDS);
                 } catch (InterruptedException e) {
                     throw new RuntimeException(e);
                 }
-                return 0;
             }
         };
 
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 7fc0e8c..75bd35c 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -4014,8 +4014,6 @@
         }
         synchronized (mPackages) {
             applyDefaultPreferredAppsLPw(service, userHandle);
-            writePackageRestrictionsLPr(userHandle);
-            writePackageListLPr(userHandle);
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index e72d233..33ccf16 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (C) 2011 The Android Open Source Project
  *
@@ -23,6 +22,7 @@
 import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.SystemApi;
 import android.annotation.UserIdInt;
 import android.app.Activity;
 import android.app.ActivityManager;
@@ -31,7 +31,9 @@
 import android.app.IActivityManager;
 import android.app.IStopUserCallback;
 import android.app.KeyguardManager;
+import android.app.admin.DevicePolicyManager;
 import android.content.BroadcastReceiver;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -143,6 +145,7 @@
     private static final String TAG_USER = "user";
     private static final String TAG_RESTRICTIONS = "restrictions";
     private static final String TAG_DEVICE_POLICY_RESTRICTIONS = "device_policy_restrictions";
+    private static final String TAG_GLOBAL_RESTRICTION_OWNER_ID = "globalRestrictionOwnerUserId";
     private static final String TAG_ENTRY = "entry";
     private static final String TAG_VALUE = "value";
     private static final String TAG_SEED_ACCOUNT_OPTIONS = "seedAccountOptions";
@@ -276,6 +279,12 @@
     private Bundle mDevicePolicyGlobalUserRestrictions;
 
     /**
+     * Id of the user that set global restrictions.
+     */
+    @GuardedBy("mRestrictionsLock")
+    private int mGlobalRestrictionOwnerUserId = UserHandle.USER_NULL;
+
+    /**
      * User restrictions set by {@link com.android.server.devicepolicy.DevicePolicyManagerService}
      * for each user.
      */
@@ -996,6 +1005,13 @@
                 if (globalChanged) {
                     mDevicePolicyGlobalUserRestrictions = global;
                 }
+                // Remember the global restriction owner userId to be able to make a distinction
+                // in getUserRestrictionSource on who set local policies.
+                mGlobalRestrictionOwnerUserId = userId;
+            } else {
+                // When profile owner sets restrictions it passes null global bundle and we reset 
+                // global restriction owner userId.
+                mGlobalRestrictionOwnerUserId = UserHandle.USER_NULL;
             }
             {
                 // Update local.
@@ -1079,6 +1095,54 @@
     }
 
     /**
+     * @hide
+     *
+     * Returns who set a user restriction on a user.
+     * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
+     * @param restrictionKey the string key representing the restriction
+     * @param userId the id of the user for whom to retrieve the restrictions.
+     * @return The source of user restriction. Any combination of
+     *         {@link UserManager#RESTRICTION_NOT_SET},
+     *         {@link UserManager#RESTRICTION_SOURCE_SYSTEM},
+     *         {@link UserManager#RESTRICTION_SOURCE_DEVICE_OWNER}
+     *         and {@link UserManager#RESTRICTION_SOURCE_PROFILE_OWNER}
+     */
+    @Override
+    public int getUserRestrictionSource(String restrictionKey, int userId) {
+        checkManageUsersPermission("getUserRestrictionSource");
+        int result = UserManager.RESTRICTION_NOT_SET;
+
+        // Shortcut for the most common case
+        if (!hasUserRestriction(restrictionKey, userId)) {
+            return result;
+        }
+
+        if (hasBaseUserRestriction(restrictionKey, userId)) {
+            result |= UserManager.RESTRICTION_SOURCE_SYSTEM;
+        }
+
+        synchronized(mRestrictionsLock) {
+            Bundle localRestrictions = mDevicePolicyLocalUserRestrictions.get(userId);
+            if (!UserRestrictionsUtils.isEmpty(localRestrictions)
+                    && localRestrictions.getBoolean(restrictionKey)) {
+                // Local restrictions may have been set by device owner the userId of which is
+                // stored in mGlobalRestrictionOwnerUserId.
+                if (mGlobalRestrictionOwnerUserId == userId) {
+                    result |= UserManager.RESTRICTION_SOURCE_DEVICE_OWNER;
+                } else {
+                    result |= UserManager.RESTRICTION_SOURCE_PROFILE_OWNER;
+                }
+            }
+            if (!UserRestrictionsUtils.isEmpty(mDevicePolicyGlobalUserRestrictions)
+                    && mDevicePolicyGlobalUserRestrictions.getBoolean(restrictionKey)) {
+                result |= UserManager.RESTRICTION_SOURCE_DEVICE_OWNER;
+            }
+        }
+
+        return result;
+    }
+
+    /**
      * @return UserRestrictions that are in effect currently.  This always returns a new
      * {@link Bundle}.
      */
@@ -1475,6 +1539,11 @@
                                 break;
                             }
                         }
+                    } else if (name.equals(TAG_GLOBAL_RESTRICTION_OWNER_ID)) {
+                        String ownerUserId = parser.getAttributeValue(null, ATTR_ID);
+                        if (ownerUserId != null) {
+                            mGlobalRestrictionOwnerUserId = Integer.parseInt(ownerUserId);
+                        }
                     }
                 }
             }
@@ -1734,6 +1803,9 @@
                 UserRestrictionsUtils.writeRestrictions(serializer,
                         mDevicePolicyGlobalUserRestrictions, TAG_DEVICE_POLICY_RESTRICTIONS);
             }
+            serializer.startTag(null, TAG_GLOBAL_RESTRICTION_OWNER_ID);
+            serializer.attribute(null, ATTR_ID, Integer.toString(mGlobalRestrictionOwnerUserId));
+            serializer.endTag(null, TAG_GLOBAL_RESTRICTION_OWNER_ID);
             int[] userIdsToWrite;
             synchronized (mUsersLock) {
                 userIdsToWrite = new int[mUsers.size()];
@@ -2074,7 +2146,6 @@
             synchronized (mRestrictionsLock) {
                 mBaseUserRestrictions.append(userId, restrictions);
             }
-            mPm.newUserCreated(userId);
             Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
             addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
             mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,
@@ -2634,6 +2705,10 @@
             synchronized (mRestrictionsLock) {
                 applyUserRestrictionsLR(userId);
             }
+            UserInfo userInfo = getUserInfoNoChecks(userId);
+            if (userInfo != null && !userInfo.isInitialized()) {
+                mPm.onBeforeUserStartUninitialized(userId);
+            }
         }
     }
 
@@ -2970,6 +3045,8 @@
                         .dumpRestrictions(pw, "    ", mDevicePolicyGlobalUserRestrictions);
             }
             pw.println();
+            pw.println("  Global restrictions owner id:" + mGlobalRestrictionOwnerUserId);
+            pw.println();
             pw.println("  Guest restrictions:");
             synchronized (mGuestRestrictions) {
                 UserRestrictionsUtils.dumpRestrictions(pw, "    ", mGuestRestrictions);
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index b2cf89b..b30817f 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -553,6 +553,7 @@
     static final Rect mTmpStableFrame = new Rect();
     static final Rect mTmpNavigationFrame = new Rect();
     static final Rect mTmpOutsetFrame = new Rect();
+    private static final Rect mTmpRect = new Rect();
 
     WindowState mTopFullscreenOpaqueWindowState;
     WindowState mTopFullscreenOpaqueOrDimmingWindowState;
@@ -3797,8 +3798,9 @@
     }
 
     @Override
-    public boolean getInsetHintLw(WindowManager.LayoutParams attrs, int displayRotation,
-            Rect outContentInsets, Rect outStableInsets, Rect outOutsets) {
+    public boolean getInsetHintLw(WindowManager.LayoutParams attrs, Rect taskBounds,
+            int displayRotation, int displayWidth, int displayHeight, Rect outContentInsets,
+            Rect outStableInsets, Rect outOutsets) {
         final int fl = PolicyControl.getWindowFlags(null, attrs);
         final int sysuiVis = PolicyControl.getSystemUiVisibility(null, attrs);
         final int systemUiVisibility = (sysuiVis | attrs.subtreeSystemUiVisibility);
@@ -3852,6 +3854,12 @@
 
             outStableInsets.set(mStableLeft, mStableTop,
                     availRight - mStableRight, availBottom - mStableBottom);
+            if (taskBounds != null) {
+                calculateRelevantTaskInsets(taskBounds, outContentInsets,
+                        displayWidth, displayHeight);
+                calculateRelevantTaskInsets(taskBounds, outStableInsets,
+                        displayWidth, displayHeight);
+            }
             return mForceShowSystemBars;
         }
         outContentInsets.setEmpty();
@@ -3859,6 +3867,22 @@
         return mForceShowSystemBars;
     }
 
+    /**
+     * For any given task bounds, the insets relevant for these bounds given the insets relevant
+     * for the entire display.
+     */
+    private void calculateRelevantTaskInsets(Rect taskBounds, Rect inOutInsets, int displayWidth,
+            int displayHeight) {
+        mTmpRect.set(0, 0, displayWidth, displayHeight);
+        mTmpRect.inset(inOutInsets);
+        mTmpRect.intersect(taskBounds);
+        int leftInset = mTmpRect.left - taskBounds.left;
+        int topInset = mTmpRect.top - taskBounds.top;
+        int rightInset = taskBounds.right - mTmpRect.right;
+        int bottomInset = taskBounds.bottom - mTmpRect.bottom;
+        inOutInsets.set(leftInset, topInset, rightInset, bottomInset);
+    }
+
     private boolean shouldUseOutsets(WindowManager.LayoutParams attrs, int fl) {
         return attrs.type == TYPE_WALLPAPER || (fl & (WindowManager.LayoutParams.FLAG_FULLSCREEN
                 | WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN)) != 0;
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 52baa60..2946bb5 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -347,8 +347,8 @@
             TvInputState inputState = userState.inputMap.get(info.getId());
             if (inputState == null) {
                 inputState = new TvInputState();
-                inputState.info = info;
             }
+            inputState.info = info;
             inputMap.put(info.getId(), inputState);
         }
 
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index a234241..b773a4e 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -34,6 +34,7 @@
 
 import android.annotation.NonNull;
 import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.Message;
 import android.os.RemoteException;
@@ -88,6 +89,11 @@
     // case do not clear allDrawn until the animation completes.
     boolean deferClearAllDrawn;
 
+    // These are to track the app's real drawing status if there were no saved surfaces.
+    boolean allDrawnExcludingSaved;
+    int numInterestingWindowsExcludingSaved;
+    int numDrawnWindowsExclusingSaved;
+
     // Is this window's surface needed?  This is almost like hidden, except
     // it will sometimes be true a little earlier: when the token has
     // been shown, but is still waiting for its app transition to execute
@@ -128,6 +134,7 @@
     int mPendingRelaunchCount;
 
     ArrayDeque<Rect> mFrozenBounds = new ArrayDeque<>();
+    ArrayDeque<Configuration> mFrozenMergedConfig = new ArrayDeque<>();
 
     AppWindowToken(WindowManagerService _service, IApplicationToken _token,
             boolean _voiceInteraction) {
@@ -411,6 +418,39 @@
         }
     }
 
+    /**
+     * Whether the app has some window that is invisible in layout, but
+     * animating with saved surface.
+     */
+    boolean isAnimatingInvisibleWithSavedSurface() {
+        for (int i = allAppWindows.size() - 1; i >= 0; i--) {
+            final WindowState w = allAppWindows.get(i);
+            if (w.isAnimatingInvisibleWithSavedSurface()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Hide all window surfaces that's still invisible in layout but animating
+     * with a saved surface, and mark them destroying.
+     */
+    void stopUsingSavedSurfaceLocked() {
+        for (int i = allAppWindows.size() - 1; i >= 0; i--) {
+            final WindowState w = allAppWindows.get(i);
+            if (w.isAnimatingInvisibleWithSavedSurface()) {
+                if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.d(TAG,
+                        "stopUsingSavedSurfaceLocked: " + w);
+                w.clearAnimatingWithSavedSurface();
+                w.mDestroying = true;
+                w.mWinAnimator.hide("stopUsingSavedSurfaceLocked");
+                w.mWinAnimator.mWallpaperControllerLocked.hideWallpapers(w);
+            }
+        }
+        destroySurfaces();
+    }
+
     void restoreSavedSurfaces() {
         if (!canRestoreSurfaces()) {
             clearVisibleBeforeClientHidden();
@@ -456,6 +496,7 @@
     void clearAllDrawn() {
         allDrawn = false;
         deferClearAllDrawn = false;
+        allDrawnExcludingSaved = false;
     }
 
     @Override
@@ -582,10 +623,7 @@
                 w.mSkipEnterAnimationForSeamlessReplacement = !candidate.mAnimateReplacingWindow;
 
                 // if we got a replacement window, reset the timeout to give drawing more time
-                service.mH.removeMessages(H.WINDOW_REPLACEMENT_TIMEOUT);
-                service.mH.sendMessageDelayed(
-                        service.mH.obtainMessage(H.WINDOW_REPLACEMENT_TIMEOUT, this),
-                            WINDOW_REPLACEMENT_TIMEOUT_DURATION);
+                service.scheduleReplacingWindowTimeouts(this);
             }
         }
         allAppWindows.add(w);
@@ -639,6 +677,16 @@
      */
     private void freezeBounds() {
         mFrozenBounds.offer(new Rect(mTask.mPreparedFrozenBounds));
+
+        if (mTask.mPreparedFrozenMergedConfig.equals(Configuration.EMPTY)) {
+            // We didn't call prepareFreezingBounds on the task, so use the current value.
+            final Configuration config = new Configuration(service.mCurConfiguration);
+            config.updateFrom(mTask.mOverrideConfig);
+            mFrozenMergedConfig.offer(config);
+        } else {
+            mFrozenMergedConfig.offer(new Configuration(mTask.mPreparedFrozenMergedConfig));
+        }
+        mTask.mPreparedFrozenMergedConfig.setToDefaults();
     }
 
     /**
@@ -646,6 +694,7 @@
      */
     private void unfreezeBounds() {
         mFrozenBounds.remove();
+        mFrozenMergedConfig.remove();
         for (int i = windows.size() - 1; i >= 0; i--) {
             final WindowState win = windows.get(i);
             if (!win.mHasSurface) {
@@ -711,6 +760,7 @@
         }
         if (!mFrozenBounds.isEmpty()) {
             pw.print(prefix); pw.print("mFrozenBounds="); pw.println(mFrozenBounds);
+            pw.print(prefix); pw.print("mFrozenMergedConfig="); pw.println(mFrozenMergedConfig);
         }
         if (mPendingRelaunchCount != 0) {
             pw.print(prefix); pw.print("mPendingRelaunchCount="); pw.println(mPendingRelaunchCount);
diff --git a/services/core/java/com/android/server/wm/DimLayer.java b/services/core/java/com/android/server/wm/DimLayer.java
index 95be233..052b2f5 100644
--- a/services/core/java/com/android/server/wm/DimLayer.java
+++ b/services/core/java/com/android/server/wm/DimLayer.java
@@ -73,8 +73,8 @@
 
     /** Interface implemented by users of the dim layer */
     interface DimLayerUser {
-        /** Returns true if the user of the dim layer is fullscreen. */
-        boolean isFullscreen();
+        /** Returns true if the  dim should be fullscreen. */
+        boolean dimFullscreen();
         /** Returns the display info. of the dim layer user. */
         DisplayInfo getDisplayInfo();
         /** Gets the bounds of the dim layer user. */
@@ -188,33 +188,40 @@
      * NOTE: Must be called with Surface transaction open.
      */
     private void adjustBounds() {
-        final int dw, dh;
-        final float xPos, yPos;
-        if (!mUser.isFullscreen()) {
-            dw = mBounds.width();
-            dh = mBounds.height();
-            xPos = mBounds.left;
-            yPos = mBounds.top;
-        } else {
-            // Set surface size to screen size.
-            final DisplayInfo info = mUser.getDisplayInfo();
-            // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose
-            // a corner.
-            dw = (int) (info.logicalWidth * 1.5);
-            dh = (int) (info.logicalHeight * 1.5);
-            // back off position so 1/4 of Surface is before and 1/4 is after.
-            xPos = -1 * dw / 6;
-            yPos = -1 * dh / 6;
+        if (mUser.dimFullscreen()) {
+            getBoundsForFullscreen(mBounds);
         }
 
         if (mDimSurface != null) {
-            mDimSurface.setPosition(xPos, yPos);
-            mDimSurface.setSize(dw, dh);
+            mDimSurface.setPosition(mBounds.left, mBounds.top);
+            mDimSurface.setSize(mBounds.width(), mBounds.height());
+            if (DEBUG_DIM_LAYER) Slog.v(TAG,
+                    "adjustBounds user=" + mUser.toShortString() + " mBounds=" + mBounds);
         }
 
         mLastBounds.set(mBounds);
     }
 
+    private void getBoundsForFullscreen(Rect outBounds) {
+        final int dw, dh;
+        final float xPos, yPos;
+        // Set surface size to screen size.
+        final DisplayInfo info = mUser.getDisplayInfo();
+        // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose
+        // a corner.
+        dw = (int) (info.logicalWidth * 1.5);
+        dh = (int) (info.logicalHeight * 1.5);
+        // back off position so 1/4 of Surface is before and 1/4 is after.
+        xPos = -1 * dw / 6;
+        yPos = -1 * dh / 6;
+        outBounds.set((int) xPos, (int) yPos, (int) xPos + dw, (int) yPos + dh);
+    }
+
+    void setBoundsForFullscreen() {
+        getBoundsForFullscreen(mBounds);
+        setBounds(mBounds);
+    }
+
     /** @param bounds The new bounds to set */
     void setBounds(Rect bounds) {
         mBounds.set(bounds);
diff --git a/services/core/java/com/android/server/wm/DimLayerController.java b/services/core/java/com/android/server/wm/DimLayerController.java
index 52146c2..2b9879e 100644
--- a/services/core/java/com/android/server/wm/DimLayerController.java
+++ b/services/core/java/com/android/server/wm/DimLayerController.java
@@ -48,14 +48,15 @@
 
     /** Updates the dim layer bounds, recreating it if needed. */
     void updateDimLayer(DimLayer.DimLayerUser dimLayerUser) {
-        DimLayerState state = getOrCreateDimLayerState(dimLayerUser);
+        final DimLayerState state = getOrCreateDimLayerState(dimLayerUser);
         final boolean previousFullscreen = state.dimLayer != null
                 && state.dimLayer == mSharedFullScreenDimLayer;
         DimLayer newDimLayer;
         final int displayId = mDisplayContent.getDisplayId();
-        if (dimLayerUser.isFullscreen()) {
-            if (previousFullscreen) {
-                // Nothing to do here...
+        if (dimLayerUser.dimFullscreen()) {
+            if (previousFullscreen && mSharedFullScreenDimLayer != null) {
+                // Update the bounds for fullscreen in case of rotation.
+                mSharedFullScreenDimLayer.setBoundsForFullscreen();
                 return;
             }
             // Use shared fullscreen dim layer
@@ -146,7 +147,7 @@
                 || !state.animator.getShown()
                 || state.animator.mAnimLayer <= newWinAnimator.mAnimLayer)) {
             state.animator = newWinAnimator;
-            if (state.animator.mWin.mAppToken == null && !dimLayerUser.isFullscreen()) {
+            if (state.animator.mWin.mAppToken == null && !dimLayerUser.dimFullscreen()) {
                 // Dim should cover the entire screen for system windows.
                 mDisplayContent.getLogicalDisplayRect(mTmpBounds);
             } else {
@@ -190,11 +191,11 @@
         for (int i = mState.size() - 1; i >= 0; i--) {
             DimLayer.DimLayerUser user = mState.keyAt(i);
             DimLayerState state = mState.valueAt(i);
-            // We have to check that we are acutally the shared fullscreen layer
+            // We have to check that we are actually the shared fullscreen layer
             // for this path. If we began as non fullscreen and became fullscreen
             // (e.g. Docked stack closing), then we may not be the shared layer
             // and we have to make sure we always animate the layer.
-            if (user.isFullscreen() && state.dimLayer == mSharedFullScreenDimLayer) {
+            if (user.dimFullscreen() && state.dimLayer == mSharedFullScreenDimLayer) {
                 fullScreen = i;
                 if (mState.valueAt(i).continueDimming) {
                     fullScreenAndDimming = i;
@@ -337,15 +338,18 @@
 
     void dump(String prefix, PrintWriter pw) {
         pw.println(prefix + "DimLayerController");
-        for (int i = 0, n = mState.size(); i < n; i++) {
-            pw.println(prefix + "  " + mState.keyAt(i).toShortString());
-            pw.print(prefix + "    ");
-            DimLayerState state = mState.valueAt(i);
-            pw.print("dimLayer=" + (state.dimLayer == mSharedFullScreenDimLayer ? "shared" :
-                    state.dimLayer));
-            pw.print(", animator=" + state.animator);
-            pw.println(", continueDimming=" + state.continueDimming + "}");
+        final String doubleSpace = "  ";
+        final String prefixPlusDoubleSpace = prefix + doubleSpace;
 
+        for (int i = 0, n = mState.size(); i < n; i++) {
+            pw.println(prefixPlusDoubleSpace + mState.keyAt(i).toShortString());
+            DimLayerState state = mState.valueAt(i);
+            pw.println(prefixPlusDoubleSpace + doubleSpace + "dimLayer="
+                    + (state.dimLayer == mSharedFullScreenDimLayer ? "shared" : state.dimLayer)
+                    + ", animator=" + state.animator + ", continueDimming=" + state.continueDimming);
+            if (state.dimLayer != null) {
+                state.dimLayer.printTo(prefixPlusDoubleSpace + doubleSpace, pw);
+            }
         }
     }
 }
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index 6e1ff06..d2d9363 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -123,6 +123,7 @@
     private final Rect mTouchRegion = new Rect();
     private boolean mAnimatingForIme;
     private boolean mAdjustedForIme;
+    private int mImeHeight;
     private WindowState mDelayedImeWin;
     private boolean mAdjustedForDivider;
     private float mDividerAnimationStart;
@@ -296,8 +297,9 @@
 
     void setAdjustedForIme(
             boolean adjustedForIme, boolean adjustedForDivider,
-            boolean animate, WindowState imeWin) {
-        if (mAdjustedForIme != adjustedForIme || mAdjustedForDivider != adjustedForDivider) {
+            boolean animate, WindowState imeWin, int imeHeight) {
+        if (mAdjustedForIme != adjustedForIme || (adjustedForIme && mImeHeight != imeHeight)
+                || mAdjustedForDivider != adjustedForDivider) {
             if (animate) {
                 startImeAdjustAnimation(adjustedForIme, adjustedForDivider, imeWin);
             } else {
@@ -305,10 +307,15 @@
                 notifyAdjustedForImeChanged(adjustedForIme || adjustedForDivider, 0 /* duration */);
             }
             mAdjustedForIme = adjustedForIme;
+            mImeHeight = imeHeight;
             mAdjustedForDivider = adjustedForDivider;
         }
     }
 
+    int getImeHeightAdjustedFor() {
+        return mImeHeight;
+    }
+
     void positionDockedStackedDivider(Rect frame) {
         TaskStack stack = mDisplayContent.getDockedStackLocked();
         if (stack == null) {
@@ -758,7 +765,7 @@
     }
 
     @Override
-    public boolean isFullscreen() {
+    public boolean dimFullscreen() {
         return false;
     }
 
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index efabe31..0d35354 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -62,6 +62,7 @@
     // Content limits relative to the DisplayContent this sits in.
     private Rect mBounds = new Rect();
     final Rect mPreparedFrozenBounds = new Rect();
+    final Configuration mPreparedFrozenMergedConfig = new Configuration();
 
     private Rect mPreScrollBounds = new Rect();
     private boolean mScrollValid;
@@ -77,7 +78,7 @@
 
     // Contains configurations settings that are different from the global configuration due to
     // stack specific operations. E.g. {@link #setBounds}.
-    Configuration mOverrideConfig;
+    Configuration mOverrideConfig = Configuration.EMPTY;
 
     // For comparison with DisplayContent bounds.
     private Rect mTmpRect = new Rect();
@@ -320,6 +321,8 @@
      */
     void prepareFreezingBounds() {
         mPreparedFrozenBounds.set(mBounds);
+        mPreparedFrozenMergedConfig.setTo(mService.mCurConfiguration);
+        mPreparedFrozenMergedConfig.updateFrom(mOverrideConfig);
     }
 
     /**
@@ -750,7 +753,11 @@
     }
 
     @Override
-    public boolean isFullscreen() {
+    public boolean dimFullscreen() {
+        return isHomeTask() || isFullscreen();
+    }
+
+    boolean isFullscreen() {
         if (useCurrentBounds()) {
             return mFullscreen;
         }
diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java
index 222087d..e823972 100644
--- a/services/core/java/com/android/server/wm/TaskPositioner.java
+++ b/services/core/java/com/android/server/wm/TaskPositioner.java
@@ -515,7 +515,11 @@
     }
 
     @Override /** {@link DimLayer.DimLayerUser} */
-    public boolean isFullscreen() {
+    public boolean dimFullscreen() {
+        return isFullscreen();
+    }
+
+    boolean isFullscreen() {
         return false;
     }
 
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 58468f6..1852b4c 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -383,12 +383,6 @@
     }
 
     private boolean updateBoundsAfterConfigChange() {
-        if (mFullscreen) {
-            // Bounds will already be set correctly when display info is updated in the case of
-            // fullscreen.
-            return false;
-        }
-
         final int newRotation = getDisplayInfo().rotation;
         final int newDensity = getDisplayInfo().logicalDensityDpi;
 
@@ -397,6 +391,13 @@
             return false;
         }
 
+        if (mFullscreen) {
+            // Update stack bounds again since rotation changed since updateDisplayInfo().
+            setBounds(null);
+            // Return false since we don't need the client to resize.
+            return false;
+        }
+
         final int oldDockSide = mStackId == DOCKED_STACK_ID ? getDockSide() : DOCKED_INVALID;
         mTmpRect2.set(mBounds);
         mDisplayContent.rotateBounds(mRotation, newRotation, mTmpRect2);
@@ -849,10 +850,10 @@
      *
      * @param imeWin The IME window.
      */
-    void setAdjustedForIme(WindowState imeWin) {
+    void setAdjustedForIme(WindowState imeWin, boolean forceUpdate) {
         mImeWin = imeWin;
         mImeGoingAway = false;
-        if (!mAdjustedForIme) {
+        if (!mAdjustedForIme || forceUpdate) {
             mAdjustedForIme = true;
             mAdjustImeAmount = 0f;
             mAdjustDividerAmount = 0f;
@@ -1155,7 +1156,11 @@
     }
 
     @Override
-    public boolean isFullscreen() {
+    public boolean dimFullscreen() {
+        return mStackId == HOME_STACK_ID || isFullscreen();
+    }
+
+    boolean isFullscreen() {
         if (useCurrentBounds()) {
             return mFullscreen;
         }
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index eae7838..be060d2 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -788,6 +788,7 @@
             removeReplacedWindowsLocked();
         }
 
+        mService.stopUsingSavedSurfaceLocked();
         mService.destroyPreservedSurfaceLocked();
         mService.mWindowPlacerLocked.destroyPendingSurfaces();
 
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 196b38a..5305fe2 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -415,6 +415,19 @@
     final ArrayList<AppWindowToken> mFinishedStarting = new ArrayList<>();
 
     /**
+     * List of window tokens that have finished drawing their own windows and
+     * no longer need to show any saved surfaces. Windows that's still showing
+     * saved surfaces will be cleaned up after next animation pass.
+     */
+    final ArrayList<AppWindowToken> mFinishedEarlyAnim = new ArrayList<>();
+
+    /**
+     * List of app window tokens that are waiting for replacing windows. If the
+     * replacement doesn't come in time the stale windows needs to be disposed of.
+     */
+    final ArrayList<AppWindowToken> mReplacingWindowTimeouts = new ArrayList<>();
+
+    /**
      * The input consumer added to the window manager which consumes input events to windows below
      * it.
      */
@@ -2104,8 +2117,17 @@
             }
 
             if (displayContent.isDefaultDisplay) {
-                if (mPolicy.getInsetHintLw(win.mAttrs, mRotation, outContentInsets, outStableInsets,
-                        outOutsets)) {
+                final DisplayInfo displayInfo = displayContent.getDisplayInfo();
+                final Rect taskBounds;
+                if (atoken != null && atoken.mTask != null) {
+                    taskBounds = mTmpRect;
+                    atoken.mTask.getBounds(mTmpRect);
+                } else {
+                    taskBounds = null;
+                }
+                if (mPolicy.getInsetHintLw(win.mAttrs, taskBounds, mRotation,
+                        displayInfo.logicalWidth, displayInfo.logicalHeight, outContentInsets,
+                        outStableInsets, outOutsets)) {
                     res |= WindowManagerGlobal.ADD_FLAG_ALWAYS_CONSUME_NAV_BAR;
                 }
             } else {
@@ -2324,6 +2346,23 @@
                 Binder.restoreCallingIdentity(origId);
                 return;
             }
+
+            if (win.isAnimatingWithSavedSurface() && !appToken.allDrawnExcludingSaved) {
+                // We started enter animation early with a saved surface, now the app asks to remove
+                // this window. If we remove it now and the app is not yet drawn, we'll show a
+                // flicker. Delay the removal now until it's really drawn.
+                if (DEBUG_ADD_REMOVE) {
+                    Slog.d(TAG_WM, "removeWindowLocked: delay removal of " + win
+                            + " due to early animation");
+                }
+                // Do not set mAnimatingExit to true here, it will cause the surface to be hidden
+                // immediately after the enter animation is done. If the app is not yet drawn then
+                // it will show up as a flicker.
+                win.mRemoveOnExit = true;
+                win.mWindowRemovalAllowed = true;
+                Binder.restoreCallingIdentity(origId);
+                return;
+            }
             // If we are not currently running the exit animation, we need to see about starting one
             wasVisible = win.isWinVisibleLw();
 
@@ -3510,14 +3549,6 @@
             }
         }
 
-        if ((isStackVisibleLocked(DOCKED_STACK_ID)
-                && !mStackIdToStack.get(DOCKED_STACK_ID).isAdjustedForMinimizedDock())
-                || isStackVisibleLocked(FREEFORM_WORKSPACE_STACK_ID)) {
-            // We don't let app affect the system orientation when in freeform or docked mode since
-            // they don't occupy the entire display and their request can conflict with other apps.
-            return SCREEN_ORIENTATION_UNSPECIFIED;
-        }
-
         // Top system windows are not requesting an orientation. Start searching from apps.
         return getAppSpecifiedOrientation();
     }
@@ -3526,9 +3557,10 @@
         int lastOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
         boolean findingBehind = false;
         boolean lastFullscreen = false;
-        // TODO: Multi window.
         DisplayContent displayContent = getDefaultDisplayContentLocked();
         final ArrayList<Task> tasks = displayContent.getTasks();
+        final boolean inMultiWindow = isStackVisibleLocked(DOCKED_STACK_ID)
+                || isStackVisibleLocked(FREEFORM_WORKSPACE_STACK_ID);
         for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) {
             AppTokenList tokens = tasks.get(taskNdx).mAppTokens;
             final int firstToken = tokens.size() - 1;
@@ -3563,6 +3595,11 @@
                     continue;
                 }
 
+                // No app except the home app may specify the screen orientation in multi-window.
+                if (inMultiWindow && !atoken.mTask.isHomeTask()) {
+                    continue;
+                }
+
                 if (tokenNdx == 0) {
                     // Last token in this task.
                     lastOrientation = atoken.requestedOrientation;
@@ -3590,8 +3627,10 @@
         if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
                 "No app is requesting an orientation, return " + mForcedAppOrientation);
         // The next app has not been requested to be visible, so we keep the current orientation
-        // to prevent freezing/unfreezing the display too early.
-        return mForcedAppOrientation;
+        // to prevent freezing/unfreezing the display too early unless we are in multi-window, in
+        // which we don't let the app customize the orientation unless it was the home task that
+        // is handled above.
+        return inMultiWindow ? SCREEN_ORIENTATION_UNSPECIFIED : mForcedAppOrientation;
     }
 
     @Override
@@ -3707,6 +3746,7 @@
             if (!configChanged) {
                 return null;
             }
+            prepareFreezingAllTaskBounds();
             mCurConfiguration = new Configuration(config);
             return onConfigurationChanged();
         }
@@ -3722,6 +3762,16 @@
         }
     }
 
+    private void prepareFreezingAllTaskBounds() {
+        for (int i = mDisplayContents.size() - 1; i >= 0; i--) {
+            ArrayList<TaskStack> stacks = mDisplayContents.valueAt(i).getStacks();
+            for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
+                final TaskStack stack = stacks.get(stackNdx);
+                stack.prepareFreezingTaskBounds();
+            }
+        }
+
+    }
     private int[] onConfigurationChanged() {
         mPolicy.onConfigurationChanged();
 
@@ -3982,7 +4032,7 @@
     }
 
     @Override
-    public void setAppStartingWindow(IBinder token, String pkg,
+    public boolean setAppStartingWindow(IBinder token, String pkg,
             int theme, CompatibilityInfo compatInfo,
             CharSequence nonLocalizedLabel, int labelRes, int icon, int logo,
             int windowFlags, IBinder transferFrom, boolean createIfNeeded) {
@@ -3999,18 +4049,18 @@
             AppWindowToken wtoken = findAppWindowToken(token);
             if (wtoken == null) {
                 Slog.w(TAG_WM, "Attempted to set icon of non-existing app token: " + token);
-                return;
+                return false;
             }
 
             // If the display is frozen, we won't do anything until the
             // actual window is displayed so there is no reason to put in
             // the starting window.
             if (!okToDisplay()) {
-                return;
+                return false;
             }
 
             if (wtoken.startingData != null) {
-                return;
+                return false;
             }
 
             // If this is a translucent window, then don't
@@ -4025,7 +4075,7 @@
                 if (ent == null) {
                     // Whoops!  App doesn't exist.  Um.  Okay.  We'll just
                     // pretend like we didn't see that.
-                    return;
+                    return false;
                 }
                 final boolean windowIsTranslucent = ent.array.getBoolean(
                         com.android.internal.R.styleable.Window_windowIsTranslucent, false);
@@ -4039,33 +4089,33 @@
                         + " Floating=" + windowIsFloating
                         + " ShowWallpaper=" + windowShowWallpaper);
                 if (windowIsTranslucent) {
-                    return;
+                    return false;
                 }
                 if (windowIsFloating || windowDisableStarting) {
-                    return;
+                    return false;
                 }
                 if (windowShowWallpaper) {
                     if (mWallpaperControllerLocked.getWallpaperTarget() == null) {
                         // If this theme is requesting a wallpaper, and the wallpaper
-                        // is not curently visible, then this effectively serves as
+                        // is not currently visible, then this effectively serves as
                         // an opaque window and our starting window transition animation
                         // can still work.  We just need to make sure the starting window
                         // is also showing the wallpaper.
                         windowFlags |= FLAG_SHOW_WALLPAPER;
                     } else {
-                        return;
+                        return false;
                     }
                 }
             }
 
             if (transferStartingWindow(transferFrom, wtoken)) {
-                return;
+                return true;
             }
 
             // There is no existing starting window, and the caller doesn't
             // want us to create one, so that's it!
             if (!createIfNeeded) {
-                return;
+                return false;
             }
 
             if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Creating StartingData");
@@ -4078,6 +4128,7 @@
             if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Enqueueing ADD_STARTING");
             mH.sendMessageAtFrontOfQueue(m);
         }
+        return true;
     }
 
     private boolean transferStartingWindow(IBinder transferFrom, AppWindowToken wtoken) {
@@ -7536,6 +7587,9 @@
         final boolean imeOnTop = (imeDockSide == DOCKED_TOP);
         final boolean imeOnBottom = (imeDockSide == DOCKED_BOTTOM);
         final boolean dockMinimized = displayContent.mDividerControllerLocked.isMinimizedDock();
+        final int imeHeight = mPolicy.getInputMethodWindowVisibleHeightLw();
+        final boolean imeHeightChanged = imeVisible &&
+                imeHeight != displayContent.mDividerControllerLocked.getImeHeightAdjustedFor();
 
         // The divider could be adjusted for IME position, or be thinner than usual,
         // or both. There are three possible cases:
@@ -7549,13 +7603,13 @@
                 final TaskStack stack = stacks.get(i);
                 final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM;
                 if (stack.isVisibleLocked() && (imeOnBottom || isDockedOnBottom)) {
-                    stack.setAdjustedForIme(imeWin);
+                    stack.setAdjustedForIme(imeWin, imeOnBottom && imeHeightChanged);
                 } else {
                     stack.resetAdjustedForIme(false);
                 }
             }
             displayContent.mDividerControllerLocked.setAdjustedForIme(
-                    imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin);
+                    imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin, imeHeight);
         } else {
             final ArrayList<TaskStack> stacks = displayContent.getStacks();
             for (int i = stacks.size() - 1; i >= 0; --i) {
@@ -7563,7 +7617,7 @@
                 stack.resetAdjustedForIme(!dockVisible);
             }
             displayContent.mDividerControllerLocked.setAdjustedForIme(
-                    false /*ime*/, false /*divider*/, dockVisible /*animate*/, imeWin);
+                    false /*ime*/, false /*divider*/, dockVisible /*animate*/, imeWin, imeHeight);
         }
     }
 
@@ -8497,9 +8551,12 @@
                 }
                 break;
                 case WINDOW_REPLACEMENT_TIMEOUT: {
-                    final AppWindowToken token = (AppWindowToken) msg.obj;
                     synchronized (mWindowMap) {
-                        token.clearTimedoutReplacesLocked();
+                        for (int i = mReplacingWindowTimeouts.size() - 1; i >= 0; i--) {
+                            final AppWindowToken token = mReplacingWindowTimeouts.get(i);
+                            token.clearTimedoutReplacesLocked();
+                        }
+                        mReplacingWindowTimeouts.clear();
                     }
                 }
                 case NOTIFY_APP_TRANSITION_STARTING: {
@@ -8548,6 +8605,15 @@
         }
         mDestroyPreservedSurface.clear();
     }
+
+    void stopUsingSavedSurfaceLocked() {
+        for (int i = mFinishedEarlyAnim.size() - 1; i >= 0 ; i--) {
+            final AppWindowToken wtoken = mFinishedEarlyAnim.get(i);
+            wtoken.stopUsingSavedSurfaceLocked();
+        }
+        mFinishedEarlyAnim.clear();
+    }
+
     // -------------------------------------------------------------
     // IWindowManager API
     // -------------------------------------------------------------
@@ -9172,6 +9238,18 @@
     void updateResizingWindows(final WindowState w) {
         final WindowStateAnimator winAnimator = w.mWinAnimator;
         if (w.mHasSurface && w.mLayoutSeq == mLayoutSeq && !w.isGoneForLayoutLw()) {
+            final Task task = w.getTask();
+            // In the case of stack bound animations, the window frames
+            // will update (unlike other animations which just modifiy
+            // various transformation properties). We don't want to
+            // notify the client of frame changes in this case. Not only
+            // is it a lot of churn, but the frame may not correspond
+            // to the surface size or the onscreen area at various
+            // phases in the animation, and the client will become
+            // sad and confused.
+            if (task != null && task.mStack.getBoundsAnimating()) {
+                return;
+            }
             w.setInsetsChanged();
             boolean configChanged = w.isConfigChanged();
             if (DEBUG_CONFIGURATION && configChanged) {
@@ -10757,16 +10835,22 @@
                 return;
             }
             if (replacing) {
-                mH.removeMessages(H.WINDOW_REPLACEMENT_TIMEOUT);
-                mH.sendMessageDelayed(
-                        mH.obtainMessage(H.WINDOW_REPLACEMENT_TIMEOUT, appWindowToken),
-                        WINDOW_REPLACEMENT_TIMEOUT_DURATION);
+                scheduleReplacingWindowTimeouts(appWindowToken);
             } else {
                 appWindowToken.resetReplacingWindows();
             }
         }
     }
 
+    void scheduleReplacingWindowTimeouts(AppWindowToken appWindowToken) {
+        if (!mReplacingWindowTimeouts.contains(appWindowToken)) {
+            mReplacingWindowTimeouts.add(appWindowToken);
+        }
+        mH.removeMessages(H.WINDOW_REPLACEMENT_TIMEOUT);
+        mH.sendEmptyMessageDelayed(
+                H.WINDOW_REPLACEMENT_TIMEOUT, WINDOW_REPLACEMENT_TIMEOUT_DURATION);
+    }
+
     @Override
     public int getDockedStackSide() {
         synchronized (mWindowMap) {
@@ -11220,6 +11304,13 @@
         }
 
         @Override
+        public void clearLastInputMethodWindowForTransition() {
+            synchronized (mWindowMap) {
+                mPolicy.setLastInputMethodWindowLw(null, null);
+            }
+        }
+
+        @Override
         public boolean isHardKeyboardAvailable() {
             synchronized (mWindowMap) {
                 return mHardKeyboardAvailable;
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index b66de89..c3f2367 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -190,8 +190,7 @@
 
     int mLayoutSeq = -1;
 
-    private Configuration mConfiguration = Configuration.EMPTY;
-    private Configuration mOverrideConfig = Configuration.EMPTY;
+    private final Configuration mTmpConfig = new Configuration();
     // Represents the changes from our override configuration applied
     // to the global configuration. This is the only form of configuration
     // which is suitable for delivery to the client.
@@ -437,7 +436,9 @@
     // used to start an entering animation earlier.
     private boolean mSurfaceSaved = false;
 
-    // Whether we're performing an entering animation with a saved surface.
+    // Whether we're performing an entering animation with a saved surface. This flag is
+    // true during the time we're showing a window with a previously saved surface. It's
+    // cleared when surface is destroyed, saved, or re-drawn by the app.
     private boolean mAnimatingWithSavedSurface;
 
     // Whether the window was visible when we set the app to invisible last time. WM uses
@@ -1256,6 +1257,32 @@
     }
 
     /**
+     * Whether this window's drawn state might affect the drawn states of the app token.
+     *
+     * @param visibleOnly Whether we should consider only the windows that's currently
+     *                    visible in layout. If true, windows that has not relayout to VISIBLE
+     *                    would always return false.
+     *
+     * @return true if the window should be considered while evaluating allDrawn flags.
+     */
+    boolean mightAffectAllDrawn(boolean visibleOnly) {
+        final boolean isViewVisible = (mViewVisibility == View.VISIBLE)
+                && (mAppToken == null || !mAppToken.clientHidden);
+        return (isOnScreenIgnoringKeyguard() && (!visibleOnly || isViewVisible)
+                || mWinAnimator.mAttrType == TYPE_BASE_APPLICATION)
+                && !mAnimatingExit && !mDestroying;
+    }
+
+    /**
+     * Whether this window is "interesting" when evaluating allDrawn. If it's interesting,
+     * it must be drawn before allDrawn can become true.
+     */
+    boolean isInteresting() {
+        return mAppToken != null && !mAppDied
+                && (!mAppToken.mAppAnimator.freezingScreen || !mAppFreezing);
+    }
+
+    /**
      * Like isOnScreen(), but we don't return true if the window is part
      * of a transition that has not yet been started.
      */
@@ -1389,13 +1416,12 @@
     }
 
     boolean isConfigChanged() {
-        final Task task = getTask();
-        final Configuration overrideConfig =
-                (task != null) ? task.mOverrideConfig : Configuration.EMPTY;
-        final Configuration serviceConfig = mService.mCurConfiguration;
-        boolean configChanged =
-                (mConfiguration != serviceConfig && mConfiguration.diff(serviceConfig) != 0)
-                || (mOverrideConfig != overrideConfig && !mOverrideConfig.equals(overrideConfig));
+        getMergedConfig(mTmpConfig);
+
+        // If the merged configuration is still empty, it means that we haven't issues the
+        // configuration to the client yet and we need to return true so the configuration updates.
+        boolean configChanged = mMergedConfiguration.equals(Configuration.EMPTY)
+                || mTmpConfig.diff(mMergedConfiguration) != 0;
 
         if ((mAttrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
             // Retain configuration changed status until resetConfiguration called.
@@ -1429,18 +1455,6 @@
         }
     }
 
-    private void setConfiguration(
-            final Configuration newConfig, final Configuration newOverrideConfig) {
-        mConfiguration = newConfig;
-        mOverrideConfig = newOverrideConfig;
-        mConfigHasChanged = false;
-
-        mMergedConfiguration.setTo(newConfig);
-        if (newOverrideConfig != null && newOverrideConfig != Configuration.EMPTY) {
-            mMergedConfiguration.updateFrom(newOverrideConfig);
-        }
-    }
-
     void setHasSurface(boolean hasSurface) {
         mHasSurface = hasSurface;
     }
@@ -1960,6 +1974,11 @@
         return mAnimatingWithSavedSurface;
     }
 
+    boolean isAnimatingInvisibleWithSavedSurface() {
+        return mAnimatingWithSavedSurface
+                && (mViewVisibility != View.VISIBLE || mWindowRemovalAllowed);
+    }
+
     public void setVisibleBeforeClientHidden() {
         mWasVisibleBeforeClientHidden |=
                 (mViewVisibility == View.VISIBLE || mAnimatingWithSavedSurface);
@@ -2042,6 +2061,7 @@
             if (mWinAnimator.mSurfaceController != null) {
                 mWinAnimator.mSurfaceController.disconnectInTransaction();
             }
+            mAnimatingWithSavedSurface = false;
         } else {
             mWinAnimator.destroySurfaceLocked();
         }
@@ -2232,18 +2252,32 @@
      * @return A configuration suitable for sending to the client.
      */
     private Configuration updateConfiguration() {
-        final Task task = getTask();
-        final Configuration overrideConfig =
-            (task != null) ? task.mOverrideConfig : Configuration.EMPTY;
         final boolean configChanged = isConfigChanged();
+        getMergedConfig(mMergedConfiguration);
+        mConfigHasChanged = false;
         if ((DEBUG_RESIZE || DEBUG_ORIENTATION || DEBUG_CONFIGURATION) && configChanged) {
             Slog.i(TAG, "Sending new config to window " + this + ": " +
-                    " / config=" + mService.mCurConfiguration + " overrideConfig=" + overrideConfig);
+                    " / mergedConfig=" + mMergedConfiguration);
         }
-        setConfiguration(mService.mCurConfiguration, overrideConfig);
         return mMergedConfiguration;
     }
 
+    private void getMergedConfig(Configuration outConfig) {
+        if (mAppToken != null && mAppToken.mFrozenMergedConfig.size() > 0) {
+            outConfig.setTo(mAppToken.mFrozenMergedConfig.peek());
+            return;
+        }
+        final Task task = getTask();
+        final Configuration overrideConfig = task != null
+                ? task.mOverrideConfig
+                : Configuration.EMPTY;
+        final Configuration serviceConfig = mService.mCurConfiguration;
+        outConfig.setTo(serviceConfig);
+        if (overrideConfig != Configuration.EMPTY) {
+            outConfig.updateFrom(overrideConfig);
+        }
+    }
+
     void reportResized() {
         Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "wm.reportResized_" + getWindowTag());
         try {
@@ -2538,10 +2572,7 @@
                 getTouchableRegion(region);
                 pw.print(prefix); pw.print("touchable region="); pw.println(region);
             }
-            pw.print(prefix); pw.print("mConfiguration="); pw.println(mConfiguration);
-            if (mOverrideConfig != Configuration.EMPTY) {
-                pw.print(prefix); pw.print("mOverrideConfig="); pw.println(mOverrideConfig);
-            }
+            pw.print(prefix); pw.print("mMergedConfiguration="); pw.println(mMergedConfiguration);
         }
         pw.print(prefix); pw.print("mHasSurface="); pw.print(mHasSurface);
                 pw.print(" mShownPosition="); mShownPosition.printShortString(pw);
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 9e66c28..52273dc 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -829,8 +829,8 @@
         // Adjust for surface insets.
         mTmpSize.left -= scale * attrs.surfaceInsets.left;
         mTmpSize.top -= scale * attrs.surfaceInsets.top;
-        mTmpSize.right += scale * (attrs.surfaceInsets.left + attrs.surfaceInsets.right);
-        mTmpSize.bottom += scale * (attrs.surfaceInsets.top + attrs.surfaceInsets.bottom);
+        mTmpSize.right += scale * attrs.surfaceInsets.right;
+        mTmpSize.bottom += scale * attrs.surfaceInsets.bottom;
     }
 
     boolean hasSurface() {
@@ -1298,6 +1298,9 @@
         if (!finalClipRect.equals(mLastFinalClipRect)) {
             mLastFinalClipRect.set(finalClipRect);
             mSurfaceController.setFinalCropInTransaction(finalClipRect);
+            if (mDestroyPreservedSurfaceUponRedraw && mPendingDestroySurface != null) {
+                mPendingDestroySurface.setFinalCropInTransaction(finalClipRect);
+            }
         }
     }
 
@@ -1333,7 +1336,7 @@
                     final TaskStack stack = task.mStack;
                     if (stack != null && !stack.isFullscreen()) {
                         stack.getDimBounds(mTmpStackBounds);
-                        clipRect.intersect(mTmpStackBounds);
+                        finalClipRect.set(mTmpStackBounds);
                     }
                 }
             }
@@ -1370,7 +1373,8 @@
 
         // If we are animating, we either apply the clip before applying all the animation
         // transformation or after all the transformation.
-        final boolean useFinalClipRect = isAnimationSet() && stackClip == STACK_CLIP_AFTER_ANIM;
+        final boolean useFinalClipRect = isAnimationSet() && stackClip == STACK_CLIP_AFTER_ANIM
+                || mDestroyPreservedSurfaceUponRedraw;
 
         // We need to do some acrobatics with surface position, because their clip region is
         // relative to the inside of the surface, but the stack bounds aren't.
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index e20e245..7e9993d 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -792,15 +792,16 @@
                             + " isOnScreen=" + w.isOnScreen() + " allDrawn=" + atoken.allDrawn
                             + " freezingScreen=" + atoken.mAppAnimator.freezingScreen);
                 }
-                if (atoken != null && (!atoken.allDrawn || atoken.mAppAnimator.freezingScreen)) {
+                if (atoken != null && (!atoken.allDrawn || !atoken.allDrawnExcludingSaved
+                        || atoken.mAppAnimator.freezingScreen)) {
                     if (atoken.lastTransactionSequence != mService.mTransactionSequence) {
                         atoken.lastTransactionSequence = mService.mTransactionSequence;
                         atoken.numInterestingWindows = atoken.numDrawnWindows = 0;
+                        atoken.numInterestingWindowsExcludingSaved = 0;
+                        atoken.numDrawnWindowsExclusingSaved = 0;
                         atoken.startingDisplayed = false;
                     }
-                    if ((w.isOnScreenIgnoringKeyguard()
-                            || winAnimator.mAttrType == TYPE_BASE_APPLICATION)
-                            && !w.mAnimatingExit && !w.mDestroying) {
+                    if (!atoken.allDrawn && w.mightAffectAllDrawn(false /* visibleOnly */)) {
                         if (DEBUG_VISIBILITY || DEBUG_ORIENTATION) {
                             Slog.v(TAG, "Eval win " + w + ": isDrawn="
                                     + w.isDrawnLw()
@@ -816,13 +817,14 @@
                             }
                         }
                         if (w != atoken.startingWindow) {
-                            if (!w.mAppDied &&
-                                    (!atoken.mAppAnimator.freezingScreen || !w.mAppFreezing)) {
+                            if (w.isInteresting()) {
                                 atoken.numInterestingWindows++;
                                 if (w.isDrawnLw()) {
                                     atoken.numDrawnWindows++;
                                     if (DEBUG_VISIBILITY || DEBUG_ORIENTATION)
                                         Slog.v(TAG, "tokenMayBeDrawn: " + atoken
+                                                + " w=" + w + " numInteresting="
+                                                + atoken.numInterestingWindows
                                                 + " freezingScreen="
                                                 + atoken.mAppAnimator.freezingScreen
                                                 + " mAppFreezing=" + w.mAppFreezing);
@@ -834,6 +836,23 @@
                             atoken.startingDisplayed = true;
                         }
                     }
+                    if (!atoken.allDrawnExcludingSaved
+                            && w.mightAffectAllDrawn(true /* visibleOnly */)) {
+                        if (w != atoken.startingWindow && w.isInteresting()) {
+                            atoken.numInterestingWindowsExcludingSaved++;
+                            if (w.isDrawnLw() && !w.isAnimatingWithSavedSurface()) {
+                                atoken.numDrawnWindowsExclusingSaved++;
+                                if (DEBUG_VISIBILITY || DEBUG_ORIENTATION)
+                                    Slog.v(TAG, "tokenMayBeDrawnExcludingSaved: " + atoken
+                                            + " w=" + w + " numInteresting="
+                                            + atoken.numInterestingWindowsExcludingSaved
+                                            + " freezingScreen="
+                                            + atoken.mAppAnimator.freezingScreen
+                                            + " mAppFreezing=" + w.mAppFreezing);
+                                updateAllDrawn = true;
+                            }
+                        }
+                    }
                 }
 
                 if (isDefaultDisplay && someoneLosingFocus && w == mService.mCurrentFocus
@@ -1539,6 +1558,22 @@
                                     wtoken.token).sendToTarget();
                         }
                     }
+                    if (!wtoken.allDrawnExcludingSaved) {
+                        int numInteresting = wtoken.numInterestingWindowsExcludingSaved;
+                        if (numInteresting > 0
+                                && wtoken.numDrawnWindowsExclusingSaved >= numInteresting) {
+                            if (DEBUG_VISIBILITY)
+                                Slog.v(TAG, "allDrawnExcludingSaved: " + wtoken
+                                    + " interesting=" + numInteresting
+                                    + " drawn=" + wtoken.numDrawnWindowsExclusingSaved);
+                            wtoken.allDrawnExcludingSaved = true;
+                            displayContent.layoutNeeded = true;
+                            if (wtoken.isAnimatingInvisibleWithSavedSurface()
+                                    && !mService.mFinishedEarlyAnim.contains(wtoken)) {
+                                mService.mFinishedEarlyAnim.add(wtoken);
+                            }
+                        }
+                    }
                 }
             }
         }
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 3cc3edf..f729ac4 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -2658,7 +2658,7 @@
             int userHandle = params[0];
 
             if (userHandle == UserHandle.USER_ALL) {
-                for (UserInfo userInfo : mUserManager.getUsers()) {
+                for (UserInfo userInfo : mUserManager.getUsers(true)) {
                     manageNotification(userInfo.getUserHandle());
                 }
             } else {
@@ -2668,7 +2668,7 @@
         }
 
         private void manageNotification(UserHandle userHandle) {
-            if (!mUserManager.isUserRunning(userHandle)) {
+            if (!mUserManager.isUserUnlocked(userHandle)) {
                 return;
             }
 
@@ -5672,7 +5672,10 @@
             // Shutting down backup manager service permanently.
             long ident = mInjector.binderClearCallingIdentity();
             try {
-                mInjector.getIBackupManager().setBackupServiceActive(UserHandle.USER_SYSTEM, false);
+                if (mInjector.getIBackupManager() != null) {
+                    mInjector.getIBackupManager()
+                            .setBackupServiceActive(UserHandle.USER_SYSTEM, false);
+                }
             } catch (RemoteException e) {
                 throw new IllegalStateException("Failed deactivating backup service.", e);
             } finally {
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 00b83841..e306d89 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -643,6 +643,10 @@
             traceBeginAndSlog("ConnectivityMetricsLoggerService");
             mSystemServiceManager.startService(MetricsLoggerService.class);
             Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+
+            traceBeginAndSlog("PinnerService");
+            mSystemServiceManager.startService(PinnerService.class);
+            Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
         } catch (RuntimeException e) {
             Slog.e("System", "******************************************");
             Slog.e("System", "************ Failure starting core service", e);
diff --git a/services/net/java/android/net/apf/ApfCapabilities.java b/services/net/java/android/net/apf/ApfCapabilities.java
index 0ec50c4..b0e0230 100644
--- a/services/net/java/android/net/apf/ApfCapabilities.java
+++ b/services/net/java/android/net/apf/ApfCapabilities.java
@@ -38,7 +38,8 @@
      */
     public final int apfPacketFormat;
 
-    ApfCapabilities(int apfVersionSupported, int maximumApfProgramSize, int apfPacketFormat) {
+    public ApfCapabilities(int apfVersionSupported, int maximumApfProgramSize, int apfPacketFormat)
+    {
         this.apfVersionSupported = apfVersionSupported;
         this.maximumApfProgramSize = maximumApfProgramSize;
         this.apfPacketFormat = apfPacketFormat;
diff --git a/services/net/java/android/net/apf/ApfFilter.java b/services/net/java/android/net/apf/ApfFilter.java
index 5a10275..7079b9e 100644
--- a/services/net/java/android/net/apf/ApfFilter.java
+++ b/services/net/java/android/net/apf/ApfFilter.java
@@ -31,6 +31,7 @@
 import android.util.Pair;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.HexDump;
 import com.android.internal.util.IndentingPrintWriter;
 
@@ -69,7 +70,8 @@
  */
 public class ApfFilter {
     // Thread to listen for RAs.
-    private class ReceiveThread extends Thread {
+    @VisibleForTesting
+    class ReceiveThread extends Thread {
         private final byte[] mPacket = new byte[1514];
         private final FileDescriptor mSocket;
         private volatile boolean mStopped;
@@ -151,8 +153,10 @@
     private final ApfCapabilities mApfCapabilities;
     private final IpManager.Callback mIpManagerCallback;
     private final NetworkInterface mNetworkInterface;
-    private byte[] mHardwareAddress;
-    private ReceiveThread mReceiveThread;
+    @VisibleForTesting
+    byte[] mHardwareAddress;
+    @VisibleForTesting
+    ReceiveThread mReceiveThread;
     @GuardedBy("this")
     private long mUniqueCounter;
     @GuardedBy("this")
@@ -161,7 +165,8 @@
     @GuardedBy("this")
     private byte[] mIPv4Address;
 
-    private ApfFilter(ApfCapabilities apfCapabilities, NetworkInterface networkInterface,
+    @VisibleForTesting
+    ApfFilter(ApfCapabilities apfCapabilities, NetworkInterface networkInterface,
             IpManager.Callback ipManagerCallback, boolean multicastFilter) {
         mApfCapabilities = apfCapabilities;
         mIpManagerCallback = ipManagerCallback;
@@ -184,7 +189,8 @@
      * Attempt to start listening for RAs and, if RAs are received, generating and installing
      * filters to ignore useless RAs.
      */
-    private void maybeStartFilter() {
+    @VisibleForTesting
+    void maybeStartFilter() {
         FileDescriptor socket;
         try {
             mHardwareAddress = mNetworkInterface.getHardwareAddress();
@@ -561,18 +567,21 @@
     private void generateArpFilterLocked(ApfGenerator gen) throws IllegalInstructionException {
         // Here's a basic summary of what the ARP filter program does:
         //
-        // if it's not an ARP IPv4 request:
-        //   pass
-        // if it's not a request for our IPv4 address:
-        //   drop
+        // if interface has IPv4 address:
+        //   if it's not an ARP IPv4 request:
+        //     pass
+        //   if it's not a request for our IPv4 address:
+        //     drop
         // pass
 
-        // if it's not an ARP IPv4 request, pass
-        gen.addLoadImmediate(Register.R0, ARP_HEADER_OFFSET);
-        gen.addJumpIfBytesNotEqual(Register.R0, ARP_IPV4_REQUEST_HEADER, gen.PASS_LABEL);
-        // if it's not a request for our IPv4 address, drop
-        gen.addLoadImmediate(Register.R0, ARP_TARGET_IP_ADDRESS_OFFSET);
-        gen.addJumpIfBytesNotEqual(Register.R0, mIPv4Address, gen.DROP_LABEL);
+        if (mIPv4Address != null) {
+            // if it's not an ARP IPv4 request, pass
+            gen.addLoadImmediate(Register.R0, ARP_HEADER_OFFSET);
+            gen.addJumpIfBytesNotEqual(Register.R0, ARP_IPV4_REQUEST_HEADER, gen.PASS_LABEL);
+            // if it's not a request for our IPv4 address, drop
+            gen.addLoadImmediate(Register.R0, ARP_TARGET_IP_ADDRESS_OFFSET);
+            gen.addJumpIfBytesNotEqual(Register.R0, mIPv4Address, gen.DROP_LABEL);
+        }
 
         // Otherwise, pass
         gen.addJump(gen.PASS_LABEL);
@@ -668,6 +677,7 @@
      * <li>Drop IPv4 broadcast packets, except DHCP destined to our MAC,
      * <li>Drop IPv4 multicast packets, if mMulticastFilter,
      * <li>Pass all other IPv4 packets,
+     * <li>Drop all broadcast non-IP non-ARP packets.
      * <li>Pass all non-ICMPv6 IPv6 packets,
      * <li>Pass all non-IPv4 and non-IPv6 packets,
      * <li>Drop IPv6 ICMPv6 NAs to ff02::1.
@@ -684,24 +694,21 @@
         // Here's a basic summary of what the initial program does:
         //
         // if it's ARP:
-        //   inesrt ARP filter to drop or pass these appropriately
+        //   insert ARP filter to drop or pass these appropriately
         // if it's IPv4:
         //   insert IPv4 filter to drop or pass these appropriately
         // if it's not IPv6:
+        //   if it's broadcast:
+        //     drop
         //   pass
         // insert IPv6 filter to drop, pass, or fall off the end for ICMPv6 packets
 
+        // Add ARP filters:
+        String skipArpFiltersLabel = "skipArpFilters";
         gen.addLoad16(Register.R0, ETH_ETHERTYPE_OFFSET);
-
-        if (mIPv4Address != null) {
-            // Add ARP filters:
-            String skipArpFiltersLabel = "skipArpFilters";
-            // If not ARP, skip ARP filters
-            // NOTE: Relies on R0 containing ethertype.
-            gen.addJumpIfR0NotEquals(ETH_P_ARP, skipArpFiltersLabel);
-            generateArpFilterLocked(gen);
-            gen.defineLabel(skipArpFiltersLabel);
-        }
+        gen.addJumpIfR0NotEquals(ETH_P_ARP, skipArpFiltersLabel);
+        generateArpFilterLocked(gen);
+        gen.defineLabel(skipArpFiltersLabel);
 
         // Add IPv4 filters:
         String skipIPv4FiltersLabel = "skipIPv4Filters";
@@ -709,22 +716,30 @@
         // execute the ARP filter, since that filter does not fall through, but either drops or
         // passes.
         gen.addJumpIfR0NotEquals(ETH_P_IP, skipIPv4FiltersLabel);
-        // NOTE: Relies on R1 being initialized to 0.
         generateIPv4FilterLocked(gen);
         gen.defineLabel(skipIPv4FiltersLabel);
 
-        // Add IPv6 filters:
-        // If not IPv6, pass
+        // Check for IPv6:
         // NOTE: Relies on R0 containing ethertype. This is safe because if we got here, we did not
         // execute the ARP or IPv4 filters, since those filters do not fall through, but either
         // drop or pass.
-        gen.addJumpIfR0NotEquals(ETH_P_IPV6, gen.PASS_LABEL);
+        String ipv6FilterLabel = "IPv6Filters";
+        gen.addJumpIfR0Equals(ETH_P_IPV6, ipv6FilterLabel);
+
+        // Drop non-IP non-ARP broadcasts, pass the rest
+        gen.addLoadImmediate(Register.R0, ETH_DEST_ADDR_OFFSET);
+        gen.addJumpIfBytesNotEqual(Register.R0, ETH_BROADCAST_MAC_ADDRESS, gen.PASS_LABEL);
+        gen.addJump(gen.DROP_LABEL);
+
+        // Add IPv6 filters:
+        gen.defineLabel(ipv6FilterLabel);
         generateIPv6FilterLocked(gen);
         return gen;
     }
 
     @GuardedBy("this")
-    private void installNewProgramLocked() {
+    @VisibleForTesting
+    void installNewProgramLocked() {
         purgeExpiredRasLocked();
         final byte[] program;
         long programMinLifetime = Long.MAX_VALUE;
diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java
index 34152cf..d8eab35 100644
--- a/services/net/java/android/net/ip/IpManager.java
+++ b/services/net/java/android/net/ip/IpManager.java
@@ -276,6 +276,16 @@
         public static class Builder {
             private ProvisioningConfiguration mConfig = new ProvisioningConfiguration();
 
+            public Builder withoutIPv4() {
+                mConfig.mEnableIPv4 = false;
+                return this;
+            }
+
+            public Builder withoutIPv6() {
+                mConfig.mEnableIPv6 = false;
+                return this;
+            }
+
             public Builder withoutIpReachabilityMonitor() {
                 mConfig.mUsingIpReachabilityMonitor = false;
                 return this;
@@ -311,6 +321,8 @@
             }
         }
 
+        /* package */ boolean mEnableIPv4 = true;
+        /* package */ boolean mEnableIPv6 = true;
         /* package */ boolean mUsingIpReachabilityMonitor = true;
         /* package */ int mRequestedPreDhcpActionMs;
         /* package */ StaticIpConfiguration mStaticIpConfig;
@@ -320,6 +332,8 @@
         public ProvisioningConfiguration() {}
 
         public ProvisioningConfiguration(ProvisioningConfiguration other) {
+            mEnableIPv4 = other.mEnableIPv4;
+            mEnableIPv6 = other.mEnableIPv6;
             mUsingIpReachabilityMonitor = other.mUsingIpReachabilityMonitor;
             mRequestedPreDhcpActionMs = other.mRequestedPreDhcpActionMs;
             mStaticIpConfig = other.mStaticIpConfig;
@@ -330,6 +344,8 @@
         @Override
         public String toString() {
             return new StringJoiner(", ", getClass().getSimpleName() + "{", "}")
+                    .add("mEnableIPv4: " + mEnableIPv4)
+                    .add("mEnableIPv6: " + mEnableIPv6)
                     .add("mUsingIpReachabilityMonitor: " + mUsingIpReachabilityMonitor)
                     .add("mRequestedPreDhcpActionMs: " + mRequestedPreDhcpActionMs)
                     .add("mStaticIpConfig: " + mStaticIpConfig)
@@ -883,6 +899,51 @@
         }
     }
 
+    private boolean startIPv4() {
+        // If we have a StaticIpConfiguration attempt to apply it and
+        // handle the result accordingly.
+        if (mConfiguration.mStaticIpConfig != null) {
+            if (setIPv4Address(mConfiguration.mStaticIpConfig.ipAddress)) {
+                handleIPv4Success(new DhcpResults(mConfiguration.mStaticIpConfig));
+            } else {
+                if (VDBG) { Log.d(mTag, "onProvisioningFailure()"); }
+                recordMetric(IpManagerEvent.PROVISIONING_FAIL);
+                mCallback.onProvisioningFailure(new LinkProperties(mLinkProperties));
+                return false;
+            }
+        } else {
+            // Start DHCPv4.
+            mDhcpClient = DhcpClient.makeDhcpClient(mContext, IpManager.this, mInterfaceName);
+            mDhcpClient.registerForPreDhcpNotification();
+            mDhcpClient.sendMessage(DhcpClient.CMD_START_DHCP);
+
+            if (mConfiguration.mProvisioningTimeoutMs > 0) {
+                final long alarmTime = SystemClock.elapsedRealtime() +
+                        mConfiguration.mProvisioningTimeoutMs;
+                mProvisioningTimeoutAlarm.schedule(alarmTime);
+            }
+        }
+
+        return true;
+    }
+
+    private boolean startIPv6() {
+        // Set privacy extensions.
+        try {
+            mNwService.setInterfaceIpv6PrivacyExtensions(mInterfaceName, true);
+            mNwService.enableIpv6(mInterfaceName);
+        } catch (RemoteException re) {
+            Log.e(mTag, "Unable to change interface settings: " + re);
+            return false;
+        } catch (IllegalStateException ie) {
+            Log.e(mTag, "Unable to change interface settings: " + ie);
+            return false;
+        }
+
+        return true;
+    }
+
+
     class StoppedState extends State {
         @Override
         public void enter() {
@@ -978,15 +1039,9 @@
                 mCallback.setFallbackMulticastFilter(mMulticastFiltering);
             }
 
-            // Set privacy extensions.
-            try {
-                mNwService.setInterfaceIpv6PrivacyExtensions(mInterfaceName, true);
-                mNwService.enableIpv6(mInterfaceName);
-                // TODO: Perhaps clearIPv4Address() as well.
-            } catch (RemoteException re) {
-                Log.e(mTag, "Unable to change interface settings: " + re);
-            } catch (IllegalStateException ie) {
-                Log.e(mTag, "Unable to change interface settings: " + ie);
+            if (mConfiguration.mEnableIPv6) {
+                // TODO: Consider transitionTo(mStoppingState) if this fails.
+                startIPv6();
             }
 
             if (mConfiguration.mUsingIpReachabilityMonitor) {
@@ -1001,31 +1056,10 @@
                         });
             }
 
-            // If we have a StaticIpConfiguration attempt to apply it and
-            // handle the result accordingly.
-            if (mConfiguration.mStaticIpConfig != null) {
-                if (setIPv4Address(mConfiguration.mStaticIpConfig.ipAddress)) {
-                    handleIPv4Success(new DhcpResults(mConfiguration.mStaticIpConfig));
-                } else {
-                    if (VDBG) { Log.d(mTag, "onProvisioningFailure()"); }
-                    recordMetric(IpManagerEvent.PROVISIONING_FAIL);
-                    mCallback.onProvisioningFailure(new LinkProperties(mLinkProperties));
+            if (mConfiguration.mEnableIPv4) {
+                if (!startIPv4()) {
                     transitionTo(mStoppingState);
                 }
-            } else {
-                // Start DHCPv4.
-                mDhcpClient = DhcpClient.makeDhcpClient(
-                        mContext,
-                        IpManager.this,
-                        mInterfaceName);
-                mDhcpClient.registerForPreDhcpNotification();
-                mDhcpClient.sendMessage(DhcpClient.CMD_START_DHCP);
-
-                if (mConfiguration.mProvisioningTimeoutMs > 0) {
-                    final long alarmTime = SystemClock.elapsedRealtime() +
-                            mConfiguration.mProvisioningTimeoutMs;
-                    mProvisioningTimeoutAlarm.schedule(alarmTime);
-                }
             }
         }
 
diff --git a/services/tests/servicestests/jni/apf_jni.cpp b/services/tests/servicestests/jni/apf_jni.cpp
index 7d142eb..ee43dd4 100644
--- a/services/tests/servicestests/jni/apf_jni.cpp
+++ b/services/tests/servicestests/jni/apf_jni.cpp
@@ -175,7 +175,7 @@
                     (void*)com_android_server_ApfTest_compareBpfApf },
     };
 
-    jniRegisterNativeMethods(env, "com/android/server/ApfTest",
+    jniRegisterNativeMethods(env, "android/net/apf/ApfTest",
             gMethods, ARRAY_SIZE(gMethods));
 
     return JNI_VERSION_1_6;
diff --git a/services/tests/servicestests/src/android/net/apf/ApfTest.java b/services/tests/servicestests/src/android/net/apf/ApfTest.java
new file mode 100644
index 0000000..e9c5bdd
--- /dev/null
+++ b/services/tests/servicestests/src/android/net/apf/ApfTest.java
@@ -0,0 +1,952 @@
+/*
+ * 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.net.apf;
+
+import static android.system.OsConstants.*;
+
+import com.android.frameworks.servicestests.R;
+
+import android.net.apf.ApfCapabilities;
+import android.net.apf.ApfFilter;
+import android.net.apf.ApfGenerator;
+import android.net.apf.ApfGenerator.IllegalInstructionException;
+import android.net.apf.ApfGenerator.Register;
+import android.net.ip.IpManager;
+import android.net.LinkAddress;
+import android.net.LinkProperties;
+import android.os.ConditionVariable;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.nio.ByteBuffer;
+
+import libcore.io.IoUtils;
+import libcore.io.Streams;
+
+/**
+ * Tests for APF program generator and interpreter.
+ *
+ * Build, install and run with:
+ *  runtest frameworks-services -c com.android.server.ApfTest
+ */
+public class ApfTest extends AndroidTestCase {
+    private static final int TIMEOUT_MS = 500;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        // Load up native shared library containing APF interpreter exposed via JNI.
+        System.loadLibrary("servicestestsjni");
+    }
+
+    // Expected return codes from APF interpreter.
+    private final static int PASS = 1;
+    private final static int DROP = 0;
+    // Interpreter will just accept packets without link layer headers, so pad fake packet to at
+    // least the minimum packet size.
+    private final static int MIN_PKT_SIZE = 15;
+
+    private void assertVerdict(int expected, byte[] program, byte[] packet, int filterAge) {
+        assertEquals(expected, apfSimulate(program, packet, filterAge));
+    }
+
+    private void assertPass(byte[] program, byte[] packet, int filterAge) {
+        assertVerdict(PASS, program, packet, filterAge);
+    }
+
+    private void assertDrop(byte[] program, byte[] packet, int filterAge) {
+        assertVerdict(DROP, program, packet, filterAge);
+    }
+
+    private void assertVerdict(int expected, ApfGenerator gen, byte[] packet, int filterAge)
+            throws IllegalInstructionException {
+        assertEquals(expected, apfSimulate(gen.generate(), packet, filterAge));
+    }
+
+    private void assertPass(ApfGenerator gen, byte[] packet, int filterAge)
+            throws IllegalInstructionException {
+        assertVerdict(PASS, gen, packet, filterAge);
+    }
+
+    private void assertDrop(ApfGenerator gen, byte[] packet, int filterAge)
+            throws IllegalInstructionException {
+        assertVerdict(DROP, gen, packet, filterAge);
+    }
+
+    private void assertPass(ApfGenerator gen)
+            throws IllegalInstructionException {
+        assertVerdict(PASS, gen, new byte[MIN_PKT_SIZE], 0);
+    }
+
+    private void assertDrop(ApfGenerator gen)
+            throws IllegalInstructionException {
+        assertVerdict(DROP, gen, new byte[MIN_PKT_SIZE], 0);
+    }
+
+    /**
+     * Test each instruction by generating a program containing the instruction,
+     * generating bytecode for that program and running it through the
+     * interpreter to verify it functions correctly.
+     */
+    @LargeTest
+    public void testApfInstructions() throws IllegalInstructionException {
+        // Empty program should pass because having the program counter reach the
+        // location immediately after the program indicates the packet should be
+        // passed to the AP.
+        ApfGenerator gen = new ApfGenerator();
+        assertPass(gen);
+
+        // Test jumping to pass label.
+        gen = new ApfGenerator();
+        gen.addJump(gen.PASS_LABEL);
+        byte[] program = gen.generate();
+        assertEquals(1, program.length);
+        assertEquals((14 << 3) | (0 << 1) | 0, program[0]);
+        assertPass(program, new byte[MIN_PKT_SIZE], 0);
+
+        // Test jumping to drop label.
+        gen = new ApfGenerator();
+        gen.addJump(gen.DROP_LABEL);
+        program = gen.generate();
+        assertEquals(2, program.length);
+        assertEquals((14 << 3) | (1 << 1) | 0, program[0]);
+        assertEquals(1, program[1]);
+        assertDrop(program, new byte[15], 15);
+
+        // Test jumping if equal to 0.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jumping if not equal to 0.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0NotEquals(0, gen.DROP_LABEL);
+        assertPass(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfR0NotEquals(0, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jumping if registers equal.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0EqualsR1(gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jumping if registers not equal.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0NotEqualsR1(gen.DROP_LABEL);
+        assertPass(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfR0NotEqualsR1(gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test load immediate.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test add.
+        gen = new ApfGenerator();
+        gen.addAdd(1234567890);
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test subtract.
+        gen = new ApfGenerator();
+        gen.addAdd(-1234567890);
+        gen.addJumpIfR0Equals(-1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test or.
+        gen = new ApfGenerator();
+        gen.addOr(1234567890);
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test and.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addAnd(123456789);
+        gen.addJumpIfR0Equals(1234567890 & 123456789, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test left shift.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addLeftShift(1);
+        gen.addJumpIfR0Equals(1234567890 << 1, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test right shift.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addRightShift(1);
+        gen.addJumpIfR0Equals(1234567890 >> 1, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test multiply.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addMul(2);
+        gen.addJumpIfR0Equals(1234567890 * 2, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test divide.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addDiv(2);
+        gen.addJumpIfR0Equals(1234567890 / 2, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test divide by zero.
+        gen = new ApfGenerator();
+        gen.addDiv(0);
+        gen.addJump(gen.DROP_LABEL);
+        assertPass(gen);
+
+        // Test add.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1234567890);
+        gen.addAddR1();
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test subtract.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, -1234567890);
+        gen.addAddR1();
+        gen.addJumpIfR0Equals(-1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test or.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1234567890);
+        gen.addOrR1();
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test and.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addLoadImmediate(Register.R1, 123456789);
+        gen.addAndR1();
+        gen.addJumpIfR0Equals(1234567890 & 123456789, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test left shift.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addLoadImmediate(Register.R1, 1);
+        gen.addLeftShiftR1();
+        gen.addJumpIfR0Equals(1234567890 << 1, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test right shift.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addLoadImmediate(Register.R1, -1);
+        gen.addLeftShiftR1();
+        gen.addJumpIfR0Equals(1234567890 >> 1, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test multiply.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addLoadImmediate(Register.R1, 2);
+        gen.addMulR1();
+        gen.addJumpIfR0Equals(1234567890 * 2, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test divide.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addLoadImmediate(Register.R1, 2);
+        gen.addDivR1();
+        gen.addJumpIfR0Equals(1234567890 / 2, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test divide by zero.
+        gen = new ApfGenerator();
+        gen.addDivR1();
+        gen.addJump(gen.DROP_LABEL);
+        assertPass(gen);
+
+        // Test byte load.
+        gen = new ApfGenerator();
+        gen.addLoad8(Register.R0, 1);
+        gen.addJumpIfR0Equals(45, gen.DROP_LABEL);
+        assertDrop(gen, new byte[]{123,45,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
+
+        // Test out of bounds load.
+        gen = new ApfGenerator();
+        gen.addLoad8(Register.R0, 16);
+        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
+        assertPass(gen, new byte[]{123,45,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
+
+        // Test half-word load.
+        gen = new ApfGenerator();
+        gen.addLoad16(Register.R0, 1);
+        gen.addJumpIfR0Equals((45 << 8) | 67, gen.DROP_LABEL);
+        assertDrop(gen, new byte[]{123,45,67,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
+
+        // Test word load.
+        gen = new ApfGenerator();
+        gen.addLoad32(Register.R0, 1);
+        gen.addJumpIfR0Equals((45 << 24) | (67 << 16) | (89 << 8) | 12, gen.DROP_LABEL);
+        assertDrop(gen, new byte[]{123,45,67,89,12,0,0,0,0,0,0,0,0,0,0}, 0);
+
+        // Test byte indexed load.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1);
+        gen.addLoad8Indexed(Register.R0, 0);
+        gen.addJumpIfR0Equals(45, gen.DROP_LABEL);
+        assertDrop(gen, new byte[]{123,45,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
+
+        // Test out of bounds indexed load.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 8);
+        gen.addLoad8Indexed(Register.R0, 8);
+        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
+        assertPass(gen, new byte[]{123,45,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
+
+        // Test half-word indexed load.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1);
+        gen.addLoad16Indexed(Register.R0, 0);
+        gen.addJumpIfR0Equals((45 << 8) | 67, gen.DROP_LABEL);
+        assertDrop(gen, new byte[]{123,45,67,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
+
+        // Test word indexed load.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1);
+        gen.addLoad32Indexed(Register.R0, 0);
+        gen.addJumpIfR0Equals((45 << 24) | (67 << 16) | (89 << 8) | 12, gen.DROP_LABEL);
+        assertDrop(gen, new byte[]{123,45,67,89,12,0,0,0,0,0,0,0,0,0,0}, 0);
+
+        // Test jumping if greater than.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0GreaterThan(0, gen.DROP_LABEL);
+        assertPass(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfR0GreaterThan(0, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jumping if less than.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0LessThan(0, gen.DROP_LABEL);
+        assertPass(gen);
+        gen = new ApfGenerator();
+        gen.addJumpIfR0LessThan(1, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jumping if any bits set.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0AnyBitsSet(3, gen.DROP_LABEL);
+        assertPass(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfR0AnyBitsSet(3, gen.DROP_LABEL);
+        assertDrop(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 3);
+        gen.addJumpIfR0AnyBitsSet(3, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jumping if register greater than.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0GreaterThanR1(gen.DROP_LABEL);
+        assertPass(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 2);
+        gen.addLoadImmediate(Register.R1, 1);
+        gen.addJumpIfR0GreaterThanR1(gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jumping if register less than.
+        gen = new ApfGenerator();
+        gen.addJumpIfR0LessThanR1(gen.DROP_LABEL);
+        assertPass(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1);
+        gen.addJumpIfR0LessThanR1(gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jumping if any bits set in register.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 3);
+        gen.addJumpIfR0AnyBitsSetR1(gen.DROP_LABEL);
+        assertPass(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 3);
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfR0AnyBitsSetR1(gen.DROP_LABEL);
+        assertDrop(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 3);
+        gen.addLoadImmediate(Register.R0, 3);
+        gen.addJumpIfR0AnyBitsSetR1(gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test load from memory.
+        gen = new ApfGenerator();
+        gen.addLoadFromMemory(Register.R0, 0);
+        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test store to memory.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1234567890);
+        gen.addStoreToMemory(Register.R1, 12);
+        gen.addLoadFromMemory(Register.R0, 12);
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test filter age pre-filled memory.
+        gen = new ApfGenerator();
+        gen.addLoadFromMemory(Register.R0, gen.FILTER_AGE_MEMORY_SLOT);
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen, new byte[MIN_PKT_SIZE], 1234567890);
+
+        // Test packet size pre-filled memory.
+        gen = new ApfGenerator();
+        gen.addLoadFromMemory(Register.R0, gen.PACKET_SIZE_MEMORY_SLOT);
+        gen.addJumpIfR0Equals(MIN_PKT_SIZE, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test IPv4 header size pre-filled memory.
+        gen = new ApfGenerator();
+        gen.addLoadFromMemory(Register.R0, gen.IPV4_HEADER_SIZE_MEMORY_SLOT);
+        gen.addJumpIfR0Equals(20, gen.DROP_LABEL);
+        assertDrop(gen, new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x45}, 0);
+
+        // Test not.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addNot(Register.R0);
+        gen.addJumpIfR0Equals(~1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test negate.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addNeg(Register.R0);
+        gen.addJumpIfR0Equals(-1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test move.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1234567890);
+        gen.addMove(Register.R0);
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addMove(Register.R1);
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test swap.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R1, 1234567890);
+        gen.addSwap();
+        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
+        assertDrop(gen);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1234567890);
+        gen.addSwap();
+        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
+        assertDrop(gen);
+
+        // Test jump if bytes not equal.
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{123}, gen.DROP_LABEL);
+        program = gen.generate();
+        assertEquals(6, program.length);
+        assertEquals((13 << 3) | (1 << 1) | 0, program[0]);
+        assertEquals(1, program[1]);
+        assertEquals(((20 << 3) | (1 << 1) | 0) - 256, program[2]);
+        assertEquals(1, program[3]);
+        assertEquals(1, program[4]);
+        assertEquals(123, program[5]);
+        assertDrop(program, new byte[MIN_PKT_SIZE], 0);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{123}, gen.DROP_LABEL);
+        byte[] packet123 = new byte[]{0,123,0,0,0,0,0,0,0,0,0,0,0,0,0};
+        assertPass(gen, packet123, 0);
+        gen = new ApfGenerator();
+        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{123}, gen.DROP_LABEL);
+        assertDrop(gen, packet123, 0);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{1,2,30,4,5}, gen.DROP_LABEL);
+        byte[] packet12345 = new byte[]{0,1,2,3,4,5,0,0,0,0,0,0,0,0,0};
+        assertDrop(gen, packet12345, 0);
+        gen = new ApfGenerator();
+        gen.addLoadImmediate(Register.R0, 1);
+        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{1,2,3,4,5}, gen.DROP_LABEL);
+        assertPass(gen, packet12345, 0);
+    }
+
+    /**
+     * Generate some BPF programs, translate them to APF, then run APF and BPF programs
+     * over packet traces and verify both programs filter out the same packets.
+     */
+    @LargeTest
+    public void testApfAgainstBpf() throws Exception {
+        String[] tcpdump_filters = new String[]{ "udp", "tcp", "icmp", "icmp6", "udp port 53",
+                "arp", "dst 239.255.255.250", "arp or tcp or udp port 53", "net 192.168.1.0/24",
+                "arp or icmp6 or portrange 53-54", "portrange 53-54 or portrange 100-50000",
+                "tcp[tcpflags] & (tcp-ack|tcp-fin) != 0 and (ip[2:2] > 57 or icmp)" };
+        String pcap_filename = stageFile(R.raw.apf);
+        for (String tcpdump_filter : tcpdump_filters) {
+            byte[] apf_program = Bpf2Apf.convert(compileToBpf(tcpdump_filter));
+            assertTrue("Failed to match for filter: " + tcpdump_filter,
+                    compareBpfApf(tcpdump_filter, pcap_filename, apf_program));
+        }
+    }
+
+    private class MockIpManagerCallback extends IpManager.Callback {
+        private final ConditionVariable mGotApfProgram = new ConditionVariable();
+        private byte[] mLastApfProgram;
+
+        @Override
+        public void installPacketFilter(byte[] filter) {
+            mLastApfProgram = filter;
+            mGotApfProgram.open();
+        }
+
+        public void resetApfProgramWait() {
+            mGotApfProgram.close();
+        }
+
+        public byte[] getApfProgram() {
+            assertTrue(mGotApfProgram.block(TIMEOUT_MS));
+            return mLastApfProgram;
+        }
+    }
+
+    private static class TestApfFilter extends ApfFilter {
+        public final static byte[] MOCK_MAC_ADDR = new byte[]{1,2,3,4,5,6};
+        private FileDescriptor mWriteSocket;
+
+        public TestApfFilter(IpManager.Callback ipManagerCallback, boolean multicastFilter) throws
+                Exception {
+            super(new ApfCapabilities(2, 1000, ARPHRD_ETHER), NetworkInterface.getByName("lo"),
+                    ipManagerCallback, multicastFilter);
+        }
+
+        // Pretend an RA packet has been received and show it to ApfFilter.
+        public void pretendPacketReceived(byte[] packet) throws IOException, ErrnoException {
+            // ApfFilter's ReceiveThread will be waiting to read this.
+            Os.write(mWriteSocket, packet, 0, packet.length);
+        }
+
+        @Override
+        void maybeStartFilter() {
+            mHardwareAddress = MOCK_MAC_ADDR;
+            installNewProgramLocked();
+
+            // Create two sockets, "readSocket" and "mWriteSocket" and connect them together.
+            FileDescriptor readSocket = new FileDescriptor();
+            mWriteSocket = new FileDescriptor();
+            try {
+                Os.socketpair(AF_UNIX, SOCK_STREAM, 0, mWriteSocket, readSocket);
+            } catch (ErrnoException e) {
+                fail();
+                return;
+            }
+            // Now pass readSocket to ReceiveThread as if it was setup to read raw RAs.
+            // This allows us to pretend RA packets have been recieved via pretendPacketReceived().
+            mReceiveThread = new ReceiveThread(readSocket);
+            mReceiveThread.start();
+        }
+
+        @Override
+        public void shutdown() {
+            super.shutdown();
+            IoUtils.closeQuietly(mWriteSocket);
+        }
+    }
+
+    private static final int ETH_HEADER_LEN = 14;
+    private static final int ETH_ETHERTYPE_OFFSET = 12;
+    private static final byte[] ETH_BROADCAST_MAC_ADDRESS = new byte[]{
+        (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff };
+
+    private static final int IPV4_VERSION_IHL_OFFSET = ETH_HEADER_LEN + 0;
+    private static final int IPV4_PROTOCOL_OFFSET = ETH_HEADER_LEN + 9;
+    private static final int IPV4_DEST_ADDR_OFFSET = ETH_HEADER_LEN + 16;
+
+    private static final int IPV6_NEXT_HEADER_OFFSET = ETH_HEADER_LEN + 6;
+    private static final int IPV6_HEADER_LEN = 40;
+    private static final int IPV6_DEST_ADDR_OFFSET = ETH_HEADER_LEN + 24;
+    // The IPv6 all nodes address ff02::1
+    private static final byte[] IPV6_ALL_NODES_ADDRESS =
+            new byte[]{ (byte) 0xff, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+
+    private static final int ICMP6_TYPE_OFFSET = ETH_HEADER_LEN + IPV6_HEADER_LEN;
+    private static final int ICMP6_ROUTER_ADVERTISEMENT = 134;
+    private static final int ICMP6_NEIGHBOR_ANNOUNCEMENT = 136;
+
+    private static final int ICMP6_RA_HEADER_LEN = 16;
+    private static final int ICMP6_RA_ROUTER_LIFETIME_OFFSET =
+            ETH_HEADER_LEN + IPV6_HEADER_LEN + 6;
+    private static final int ICMP6_RA_CHECKSUM_OFFSET =
+            ETH_HEADER_LEN + IPV6_HEADER_LEN + 2;
+    private static final int ICMP6_RA_OPTION_OFFSET =
+            ETH_HEADER_LEN + IPV6_HEADER_LEN + ICMP6_RA_HEADER_LEN;
+
+    private static final int ICMP6_PREFIX_OPTION_TYPE = 3;
+    private static final int ICMP6_PREFIX_OPTION_LEN = 32;
+    private static final int ICMP6_PREFIX_OPTION_VALID_LIFETIME_OFFSET = 4;
+    private static final int ICMP6_PREFIX_OPTION_PREFERRED_LIFETIME_OFFSET = 8;
+
+    // From RFC6106: Recursive DNS Server option
+    private static final int ICMP6_RDNSS_OPTION_TYPE = 25;
+    // From RFC6106: DNS Search List option
+    private static final int ICMP6_DNSSL_OPTION_TYPE = 31;
+
+    // From RFC4191: Route Information option
+    private static final int ICMP6_ROUTE_INFO_OPTION_TYPE = 24;
+    // Above three options all have the same format:
+    private static final int ICMP6_4_BYTE_OPTION_LEN = 8;
+    private static final int ICMP6_4_BYTE_LIFETIME_OFFSET = 4;
+    private static final int ICMP6_4_BYTE_LIFETIME_LEN = 4;
+
+    private static final int UDP_HEADER_LEN = 8;
+    private static final int UDP_DESTINATION_PORT_OFFSET = ETH_HEADER_LEN + 22;
+
+    private static final int DHCP_CLIENT_PORT = 68;
+    private static final int DHCP_CLIENT_MAC_OFFSET = ETH_HEADER_LEN + UDP_HEADER_LEN + 48;
+
+    private static int ARP_HEADER_OFFSET = ETH_HEADER_LEN;
+    private static final byte[] ARP_IPV4_REQUEST_HEADER = new byte[]{
+            0, 1, // Hardware type: Ethernet (1)
+            8, 0, // Protocol type: IP (0x0800)
+            6,    // Hardware size: 6
+            4,    // Protocol size: 4
+            0, 1  // Opcode: request (1)
+    };
+    private static int ARP_TARGET_IP_ADDRESS_OFFSET = ETH_HEADER_LEN + 24;
+
+    private static byte[] MOCK_IPV4_ADDR = new byte[]{10, 0, 0, 1};
+
+    @LargeTest
+    public void testApfFilterIPv4() throws Exception {
+        MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback();
+        ApfFilter apfFilter = new TestApfFilter(ipManagerCallback, false /* multicastFilter */);
+        byte[] program = ipManagerCallback.getApfProgram();
+
+        // Verify empty packet of 100 zero bytes is passed
+        ByteBuffer packet = ByteBuffer.wrap(new byte[100]);
+        assertPass(program, packet.array(), 0);
+
+        // Verify unicast IPv4 packet is passed
+        packet.putShort(ETH_ETHERTYPE_OFFSET, (short)ETH_P_IP);
+        assertPass(program, packet.array(), 0);
+
+        // Verify broadcast IPv4, not DHCP to us, is dropped
+        packet.put(ETH_BROADCAST_MAC_ADDRESS);
+        assertDrop(program, packet.array(), 0);
+        packet.put(IPV4_VERSION_IHL_OFFSET, (byte)0x45);
+        assertDrop(program, packet.array(), 0);
+        packet.put(IPV4_PROTOCOL_OFFSET, (byte)IPPROTO_UDP);
+        assertDrop(program, packet.array(), 0);
+        packet.putShort(UDP_DESTINATION_PORT_OFFSET, (short)DHCP_CLIENT_PORT);
+        assertDrop(program, packet.array(), 0);
+
+        // Verify broadcast IPv4 DHCP to us is passed
+        packet.position(DHCP_CLIENT_MAC_OFFSET);
+        packet.put(TestApfFilter.MOCK_MAC_ADDR);
+        assertPass(program, packet.array(), 0);
+
+        apfFilter.shutdown();
+    }
+
+    @LargeTest
+    public void testApfFilterIPv6() throws Exception {
+        MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback();
+        ApfFilter apfFilter = new TestApfFilter(ipManagerCallback, false /* multicastFilter */);
+        byte[] program = ipManagerCallback.getApfProgram();
+
+        // Verify empty IPv6 packet is passed
+        ByteBuffer packet = ByteBuffer.wrap(new byte[100]);
+        packet.putShort(ETH_ETHERTYPE_OFFSET, (short)ETH_P_IPV6);
+        assertPass(program, packet.array(), 0);
+
+        // Verify empty ICMPv6 packet is passed
+        packet.put(IPV6_NEXT_HEADER_OFFSET, (byte)IPPROTO_ICMPV6);
+        assertPass(program, packet.array(), 0);
+
+        // Verify empty ICMPv6 NA packet is passed
+        packet.put(ICMP6_TYPE_OFFSET, (byte)ICMP6_NEIGHBOR_ANNOUNCEMENT);
+        assertPass(program, packet.array(), 0);
+
+        // Verify ICMPv6 NA to ff02::1 is dropped
+        packet.position(IPV6_DEST_ADDR_OFFSET);
+        packet.put(IPV6_ALL_NODES_ADDRESS);
+        assertDrop(program, packet.array(), 0);
+
+        apfFilter.shutdown();
+    }
+
+    @LargeTest
+    public void testApfFilterIPv4Multicast() throws Exception {
+        MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback();
+        ApfFilter apfFilter = new TestApfFilter(ipManagerCallback, false /* multicastFilter */);
+        byte[] program = ipManagerCallback.getApfProgram();
+
+        // Verify initially disabled multicast filter is off
+        ByteBuffer packet = ByteBuffer.wrap(new byte[100]);
+        packet.putShort(ETH_ETHERTYPE_OFFSET, (short)ETH_P_IP);
+        packet.position(IPV4_DEST_ADDR_OFFSET);
+        packet.put(new byte[]{(byte)224,0,0,1});
+        assertPass(program, packet.array(), 0);
+
+        // Turn on multicast filter and verify it works
+        ipManagerCallback.resetApfProgramWait();
+        apfFilter.setMulticastFilter(true);
+        program = ipManagerCallback.getApfProgram();
+        assertDrop(program, packet.array(), 0);
+
+        // Turn off multicast filter and verify it's off
+        ipManagerCallback.resetApfProgramWait();
+        apfFilter.setMulticastFilter(false);
+        program = ipManagerCallback.getApfProgram();
+        assertPass(program, packet.array(), 0);
+
+        // Verify it can be initialized to on
+        ipManagerCallback.resetApfProgramWait();
+        apfFilter.shutdown();
+        apfFilter = new TestApfFilter(ipManagerCallback, true /* multicastFilter */);
+        program = ipManagerCallback.getApfProgram();
+        assertDrop(program, packet.array(), 0);
+
+        apfFilter.shutdown();
+    }
+
+    private void verifyArpFilter(MockIpManagerCallback ipManagerCallback, ApfFilter apfFilter,
+            LinkProperties linkProperties, int filterResult) {
+        ipManagerCallback.resetApfProgramWait();
+        apfFilter.setLinkProperties(linkProperties);
+        byte[] program = ipManagerCallback.getApfProgram();
+        ByteBuffer packet = ByteBuffer.wrap(new byte[100]);
+        packet.putShort(ETH_ETHERTYPE_OFFSET, (short)ETH_P_ARP);
+        assertPass(program, packet.array(), 0);
+        packet.position(ARP_HEADER_OFFSET);
+        packet.put(ARP_IPV4_REQUEST_HEADER);
+        assertVerdict(filterResult, program, packet.array(), 0);
+        packet.position(ARP_TARGET_IP_ADDRESS_OFFSET);
+        packet.put(MOCK_IPV4_ADDR);
+        assertPass(program, packet.array(), 0);
+    }
+
+    @LargeTest
+    public void testApfFilterArp() throws Exception {
+        MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback();
+        ApfFilter apfFilter = new TestApfFilter(ipManagerCallback, false /* multicastFilter */);
+        byte[] program = ipManagerCallback.getApfProgram();
+
+        // Verify initially ARP filter is off
+        ByteBuffer packet = ByteBuffer.wrap(new byte[100]);
+        packet.putShort(ETH_ETHERTYPE_OFFSET, (short)ETH_P_ARP);
+        assertPass(program, packet.array(), 0);
+        packet.position(ARP_HEADER_OFFSET);
+        packet.put(ARP_IPV4_REQUEST_HEADER);
+        assertPass(program, packet.array(), 0);
+        packet.position(ARP_TARGET_IP_ADDRESS_OFFSET);
+        packet.put(MOCK_IPV4_ADDR);
+        assertPass(program, packet.array(), 0);
+
+        // Inform ApfFilter of our address and verify ARP filtering is on
+        LinkProperties lp = new LinkProperties();
+        assertTrue(lp.addLinkAddress(
+                new LinkAddress(InetAddress.getByAddress(MOCK_IPV4_ADDR), 24)));
+        verifyArpFilter(ipManagerCallback, apfFilter, lp, DROP);
+
+        // Inform ApfFilter of loss of IP and verify ARP filtering is off
+        verifyArpFilter(ipManagerCallback, apfFilter, new LinkProperties(), PASS);
+
+        apfFilter.shutdown();
+    }
+
+    // Verify that the last program pushed to the IpManager.Callback properly filters the
+    // given packet for the given lifetime.
+    private void verifyRaLifetime(MockIpManagerCallback ipManagerCallback, ByteBuffer packet,
+            int lifetime) {
+        byte[] program = ipManagerCallback.getApfProgram();
+
+        // Verify new program should drop RA for 1/6th its lifetime
+        assertDrop(program, packet.array(), 0);
+        assertDrop(program, packet.array(), lifetime/6);
+        assertPass(program, packet.array(), lifetime/6 + 1);
+        assertPass(program, packet.array(), lifetime);
+
+        // Verify RA checksum is ignored
+        packet.putShort(ICMP6_RA_CHECKSUM_OFFSET, (short)12345);
+        assertDrop(program, packet.array(), 0);
+        packet.putShort(ICMP6_RA_CHECKSUM_OFFSET, (short)-12345);
+        assertDrop(program, packet.array(), 0);
+
+        // Verify other changes to RA make it not match filter
+        packet.put(0, (byte)-1);
+        assertPass(program, packet.array(), 0);
+        packet.put(0, (byte)0);
+        assertDrop(program, packet.array(), 0);
+    }
+
+    // Test that when ApfFilter is shown the given packet, it generates a program to filter it
+    // for the given lifetime.
+    private void testRaLifetime(TestApfFilter apfFilter, MockIpManagerCallback ipManagerCallback,
+            ByteBuffer packet, int lifetime) throws IOException, ErrnoException {
+        // Verify new program generated if ApfFilter witnesses RA
+        ipManagerCallback.resetApfProgramWait();
+        apfFilter.pretendPacketReceived(packet.array());
+        ipManagerCallback.getApfProgram();
+
+        verifyRaLifetime(ipManagerCallback, packet, lifetime);
+    }
+
+    @LargeTest
+    public void testApfFilterRa() throws Exception {
+        MockIpManagerCallback ipManagerCallback = new MockIpManagerCallback();
+        TestApfFilter apfFilter = new TestApfFilter(ipManagerCallback, false /* multicastFilter */);
+        byte[] program = ipManagerCallback.getApfProgram();
+
+        // Verify RA is passed the first time
+        ByteBuffer basePacket = ByteBuffer.wrap(new byte[ICMP6_RA_OPTION_OFFSET]);
+        basePacket.putShort(ETH_ETHERTYPE_OFFSET, (short)ETH_P_IPV6);
+        basePacket.put(IPV6_NEXT_HEADER_OFFSET, (byte)IPPROTO_ICMPV6);
+        basePacket.put(ICMP6_TYPE_OFFSET, (byte)ICMP6_ROUTER_ADVERTISEMENT);
+        basePacket.putShort(ICMP6_RA_ROUTER_LIFETIME_OFFSET, (short)1000);
+        assertPass(program, basePacket.array(), 0);
+
+        testRaLifetime(apfFilter, ipManagerCallback, basePacket, 1000);
+
+        // Generate several RAs with different options and lifetimes, and verify when
+        // ApfFilter is shown these packets, it generates programs to filter them for the
+        // appropriate lifetime.
+        ByteBuffer prefixOptionPacket = ByteBuffer.wrap(
+                new byte[ICMP6_RA_OPTION_OFFSET + ICMP6_PREFIX_OPTION_LEN]);
+        basePacket.clear();
+        prefixOptionPacket.put(basePacket);
+        prefixOptionPacket.put((byte)ICMP6_PREFIX_OPTION_TYPE);
+        prefixOptionPacket.put((byte)(ICMP6_PREFIX_OPTION_LEN / 8));
+        prefixOptionPacket.putInt(
+                ICMP6_RA_OPTION_OFFSET + ICMP6_PREFIX_OPTION_PREFERRED_LIFETIME_OFFSET, 100);
+        prefixOptionPacket.putInt(
+                ICMP6_RA_OPTION_OFFSET + ICMP6_PREFIX_OPTION_VALID_LIFETIME_OFFSET, 200);
+        testRaLifetime(apfFilter, ipManagerCallback, prefixOptionPacket, 100);
+
+        ByteBuffer rdnssOptionPacket = ByteBuffer.wrap(
+                new byte[ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_OPTION_LEN]);
+        basePacket.clear();
+        rdnssOptionPacket.put(basePacket);
+        rdnssOptionPacket.put((byte)ICMP6_RDNSS_OPTION_TYPE);
+        rdnssOptionPacket.put((byte)(ICMP6_4_BYTE_OPTION_LEN / 8));
+        rdnssOptionPacket.putInt(
+                ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_LIFETIME_OFFSET, 300);
+        testRaLifetime(apfFilter, ipManagerCallback, rdnssOptionPacket, 300);
+
+        ByteBuffer routeInfoOptionPacket = ByteBuffer.wrap(
+                new byte[ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_OPTION_LEN]);
+        basePacket.clear();
+        routeInfoOptionPacket.put(basePacket);
+        routeInfoOptionPacket.put((byte)ICMP6_ROUTE_INFO_OPTION_TYPE);
+        routeInfoOptionPacket.put((byte)(ICMP6_4_BYTE_OPTION_LEN / 8));
+        routeInfoOptionPacket.putInt(
+                ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_LIFETIME_OFFSET, 400);
+        testRaLifetime(apfFilter, ipManagerCallback, routeInfoOptionPacket, 400);
+
+        ByteBuffer dnsslOptionPacket = ByteBuffer.wrap(
+                new byte[ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_OPTION_LEN]);
+        basePacket.clear();
+        dnsslOptionPacket.put(basePacket);
+        dnsslOptionPacket.put((byte)ICMP6_DNSSL_OPTION_TYPE);
+        dnsslOptionPacket.put((byte)(ICMP6_4_BYTE_OPTION_LEN / 8));
+        dnsslOptionPacket.putInt(
+                ICMP6_RA_OPTION_OFFSET + ICMP6_4_BYTE_LIFETIME_OFFSET, 2000);
+        // Note that lifetime of 2000 will be ignored in favor of shorter
+        // route lifetime of 1000.
+        testRaLifetime(apfFilter, ipManagerCallback, dnsslOptionPacket, 1000);
+
+        // Verify that current program filters all five RAs:
+        verifyRaLifetime(ipManagerCallback, basePacket, 1000);
+        verifyRaLifetime(ipManagerCallback, prefixOptionPacket, 100);
+        verifyRaLifetime(ipManagerCallback, rdnssOptionPacket, 300);
+        verifyRaLifetime(ipManagerCallback, routeInfoOptionPacket, 400);
+        verifyRaLifetime(ipManagerCallback, dnsslOptionPacket, 1000);
+
+        apfFilter.shutdown();
+    }
+
+    /**
+     * Stage a file for testing, i.e. make it native accessible. Given a resource ID,
+     * copy that resource into the app's data directory and return the path to it.
+     */
+    private String stageFile(int rawId) throws Exception {
+        File file = new File(getContext().getFilesDir(), "staged_file");
+        new File(file.getParent()).mkdirs();
+        InputStream in = null;
+        OutputStream out = null;
+        try {
+            in = getContext().getResources().openRawResource(rawId);
+            out = new FileOutputStream(file);
+            Streams.copy(in, out);
+        } finally {
+            if (in != null) in.close();
+            if (out != null) out.close();
+        }
+        return file.getAbsolutePath();
+    }
+
+    /**
+     * Call the APF interpreter the run {@code program} on {@code packet} pretending the
+     * filter was installed {@code filter_age} seconds ago.
+     */
+    private native static int apfSimulate(byte[] program, byte[] packet, int filter_age);
+
+    /**
+     * Compile a tcpdump human-readable filter (e.g. "icmp" or "tcp port 54") into a BPF
+     * prorgam and return a human-readable dump of the BPF program identical to "tcpdump -d".
+     */
+    private native static String compileToBpf(String filter);
+
+    /**
+     * Open packet capture file {@code pcap_filename} and filter the packets using tcpdump
+     * human-readable filter (e.g. "icmp" or "tcp port 54") compiled to a BPF program and
+     * at the same time using APF program {@code apf_program}.  Return {@code true} if
+     * both APF and BPF programs filter out exactly the same packets.
+     */
+    private native static boolean compareBpfApf(String filter, String pcap_filename,
+            byte[] apf_program);
+}
diff --git a/services/tests/servicestests/src/com/android/server/Bpf2Apf.java b/services/tests/servicestests/src/android/net/apf/Bpf2Apf.java
similarity index 98%
rename from services/tests/servicestests/src/com/android/server/Bpf2Apf.java
rename to services/tests/servicestests/src/android/net/apf/Bpf2Apf.java
index 29594a8..220e54d 100644
--- a/services/tests/servicestests/src/com/android/server/Bpf2Apf.java
+++ b/services/tests/servicestests/src/android/net/apf/Bpf2Apf.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.server;
+package android.net.apf;
 
 import android.net.apf.ApfGenerator;
 import android.net.apf.ApfGenerator.IllegalInstructionException;
@@ -31,9 +31,9 @@
  *
  * Example usage:
  *   javac net/java/android/net/apf/ApfGenerator.java \
- *         tests/servicestests/src/com/android/server/Bpf2Apf.java
+ *         tests/servicestests/src/android/net/apf/Bpf2Apf.java
  *   sudo tcpdump -i em1 -d icmp | java -classpath tests/servicestests/src:net/java \
- *                                      com.android.server.Bpf2Apf
+ *                                      android.net.apf.Bpf2Apf
  */
 public class Bpf2Apf {
     private static int parseImm(String line, String arg) {
diff --git a/services/tests/servicestests/src/com/android/server/ApfTest.java b/services/tests/servicestests/src/com/android/server/ApfTest.java
deleted file mode 100644
index 9ba27cb..0000000
--- a/services/tests/servicestests/src/com/android/server/ApfTest.java
+++ /dev/null
@@ -1,560 +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 com.android.server;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-import com.android.frameworks.servicestests.R;
-import android.net.apf.ApfGenerator;
-import android.net.apf.ApfGenerator.IllegalInstructionException;
-import android.net.apf.ApfGenerator.Register;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import libcore.io.IoUtils;
-import libcore.io.Streams;
-
-/**
- * Tests for APF program generator and interpreter.
- *
- * Build, install and run with:
- *  runtest frameworks-services -c com.android.server.ApfTest
- */
-public class ApfTest extends AndroidTestCase {
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        // Load up native shared library containing APF interpreter exposed via JNI.
-        System.loadLibrary("servicestestsjni");
-    }
-
-    // Expected return codes from APF interpreter.
-    private final static int PASS = 1;
-    private final static int DROP = 0;
-    // Interpreter will just accept packets without link layer headers, so pad fake packet to at
-    // least the minimum packet size.
-    private final static int MIN_PKT_SIZE = 15;
-
-    private void assertVerdict(int expected, byte[] program, byte[] packet, int filterAge) {
-        assertEquals(expected, apfSimulate(program, packet, filterAge));
-    }
-
-    private void assertPass(byte[] program, byte[] packet, int filterAge) {
-        assertVerdict(PASS, program, packet, filterAge);
-    }
-
-    private void assertDrop(byte[] program, byte[] packet, int filterAge) {
-        assertVerdict(DROP, program, packet, filterAge);
-    }
-
-    private void assertVerdict(int expected, ApfGenerator gen, byte[] packet, int filterAge)
-            throws IllegalInstructionException {
-        assertEquals(expected, apfSimulate(gen.generate(), packet, filterAge));
-    }
-
-    private void assertPass(ApfGenerator gen, byte[] packet, int filterAge)
-            throws IllegalInstructionException {
-        assertVerdict(PASS, gen, packet, filterAge);
-    }
-
-    private void assertDrop(ApfGenerator gen, byte[] packet, int filterAge)
-            throws IllegalInstructionException {
-        assertVerdict(DROP, gen, packet, filterAge);
-    }
-
-    private void assertPass(ApfGenerator gen)
-            throws IllegalInstructionException {
-        assertVerdict(PASS, gen, new byte[MIN_PKT_SIZE], 0);
-    }
-
-    private void assertDrop(ApfGenerator gen)
-            throws IllegalInstructionException {
-        assertVerdict(DROP, gen, new byte[MIN_PKT_SIZE], 0);
-    }
-
-    /**
-     * Test each instruction by generating a program containing the instruction,
-     * generating bytecode for that program and running it through the
-     * interpreter to verify it functions correctly.
-     */
-    @LargeTest
-    public void testApfInstructions() throws IllegalInstructionException {
-        // Empty program should pass because having the program counter reach the
-        // location immediately after the program indicates the packet should be
-        // passed to the AP.
-        ApfGenerator gen = new ApfGenerator();
-        assertPass(gen);
-
-        // Test jumping to pass label.
-        gen = new ApfGenerator();
-        gen.addJump(gen.PASS_LABEL);
-        byte[] program = gen.generate();
-        assertEquals(1, program.length);
-        assertEquals((14 << 3) | (0 << 1) | 0, program[0]);
-        assertPass(program, new byte[MIN_PKT_SIZE], 0);
-
-        // Test jumping to drop label.
-        gen = new ApfGenerator();
-        gen.addJump(gen.DROP_LABEL);
-        program = gen.generate();
-        assertEquals(2, program.length);
-        assertEquals((14 << 3) | (1 << 1) | 0, program[0]);
-        assertEquals(1, program[1]);
-        assertDrop(program, new byte[15], 15);
-
-        // Test jumping if equal to 0.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jumping if not equal to 0.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0NotEquals(0, gen.DROP_LABEL);
-        assertPass(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfR0NotEquals(0, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jumping if registers equal.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0EqualsR1(gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jumping if registers not equal.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0NotEqualsR1(gen.DROP_LABEL);
-        assertPass(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfR0NotEqualsR1(gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test load immediate.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test add.
-        gen = new ApfGenerator();
-        gen.addAdd(1234567890);
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test subtract.
-        gen = new ApfGenerator();
-        gen.addAdd(-1234567890);
-        gen.addJumpIfR0Equals(-1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test or.
-        gen = new ApfGenerator();
-        gen.addOr(1234567890);
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test and.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addAnd(123456789);
-        gen.addJumpIfR0Equals(1234567890 & 123456789, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test left shift.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addLeftShift(1);
-        gen.addJumpIfR0Equals(1234567890 << 1, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test right shift.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addRightShift(1);
-        gen.addJumpIfR0Equals(1234567890 >> 1, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test multiply.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addMul(2);
-        gen.addJumpIfR0Equals(1234567890 * 2, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test divide.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addDiv(2);
-        gen.addJumpIfR0Equals(1234567890 / 2, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test divide by zero.
-        gen = new ApfGenerator();
-        gen.addDiv(0);
-        gen.addJump(gen.DROP_LABEL);
-        assertPass(gen);
-
-        // Test add.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1234567890);
-        gen.addAddR1();
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test subtract.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, -1234567890);
-        gen.addAddR1();
-        gen.addJumpIfR0Equals(-1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test or.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1234567890);
-        gen.addOrR1();
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test and.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addLoadImmediate(Register.R1, 123456789);
-        gen.addAndR1();
-        gen.addJumpIfR0Equals(1234567890 & 123456789, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test left shift.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addLoadImmediate(Register.R1, 1);
-        gen.addLeftShiftR1();
-        gen.addJumpIfR0Equals(1234567890 << 1, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test right shift.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addLoadImmediate(Register.R1, -1);
-        gen.addLeftShiftR1();
-        gen.addJumpIfR0Equals(1234567890 >> 1, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test multiply.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addLoadImmediate(Register.R1, 2);
-        gen.addMulR1();
-        gen.addJumpIfR0Equals(1234567890 * 2, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test divide.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addLoadImmediate(Register.R1, 2);
-        gen.addDivR1();
-        gen.addJumpIfR0Equals(1234567890 / 2, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test divide by zero.
-        gen = new ApfGenerator();
-        gen.addDivR1();
-        gen.addJump(gen.DROP_LABEL);
-        assertPass(gen);
-
-        // Test byte load.
-        gen = new ApfGenerator();
-        gen.addLoad8(Register.R0, 1);
-        gen.addJumpIfR0Equals(45, gen.DROP_LABEL);
-        assertDrop(gen, new byte[]{123,45,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
-
-        // Test out of bounds load.
-        gen = new ApfGenerator();
-        gen.addLoad8(Register.R0, 16);
-        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
-        assertPass(gen, new byte[]{123,45,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
-
-        // Test half-word load.
-        gen = new ApfGenerator();
-        gen.addLoad16(Register.R0, 1);
-        gen.addJumpIfR0Equals((45 << 8) | 67, gen.DROP_LABEL);
-        assertDrop(gen, new byte[]{123,45,67,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
-
-        // Test word load.
-        gen = new ApfGenerator();
-        gen.addLoad32(Register.R0, 1);
-        gen.addJumpIfR0Equals((45 << 24) | (67 << 16) | (89 << 8) | 12, gen.DROP_LABEL);
-        assertDrop(gen, new byte[]{123,45,67,89,12,0,0,0,0,0,0,0,0,0,0}, 0);
-
-        // Test byte indexed load.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1);
-        gen.addLoad8Indexed(Register.R0, 0);
-        gen.addJumpIfR0Equals(45, gen.DROP_LABEL);
-        assertDrop(gen, new byte[]{123,45,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
-
-        // Test out of bounds indexed load.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 8);
-        gen.addLoad8Indexed(Register.R0, 8);
-        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
-        assertPass(gen, new byte[]{123,45,0,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
-
-        // Test half-word indexed load.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1);
-        gen.addLoad16Indexed(Register.R0, 0);
-        gen.addJumpIfR0Equals((45 << 8) | 67, gen.DROP_LABEL);
-        assertDrop(gen, new byte[]{123,45,67,0,0,0,0,0,0,0,0,0,0,0,0}, 0);
-
-        // Test word indexed load.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1);
-        gen.addLoad32Indexed(Register.R0, 0);
-        gen.addJumpIfR0Equals((45 << 24) | (67 << 16) | (89 << 8) | 12, gen.DROP_LABEL);
-        assertDrop(gen, new byte[]{123,45,67,89,12,0,0,0,0,0,0,0,0,0,0}, 0);
-
-        // Test jumping if greater than.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0GreaterThan(0, gen.DROP_LABEL);
-        assertPass(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfR0GreaterThan(0, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jumping if less than.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0LessThan(0, gen.DROP_LABEL);
-        assertPass(gen);
-        gen = new ApfGenerator();
-        gen.addJumpIfR0LessThan(1, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jumping if any bits set.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0AnyBitsSet(3, gen.DROP_LABEL);
-        assertPass(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfR0AnyBitsSet(3, gen.DROP_LABEL);
-        assertDrop(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 3);
-        gen.addJumpIfR0AnyBitsSet(3, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jumping if register greater than.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0GreaterThanR1(gen.DROP_LABEL);
-        assertPass(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 2);
-        gen.addLoadImmediate(Register.R1, 1);
-        gen.addJumpIfR0GreaterThanR1(gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jumping if register less than.
-        gen = new ApfGenerator();
-        gen.addJumpIfR0LessThanR1(gen.DROP_LABEL);
-        assertPass(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1);
-        gen.addJumpIfR0LessThanR1(gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jumping if any bits set in register.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 3);
-        gen.addJumpIfR0AnyBitsSetR1(gen.DROP_LABEL);
-        assertPass(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 3);
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfR0AnyBitsSetR1(gen.DROP_LABEL);
-        assertDrop(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 3);
-        gen.addLoadImmediate(Register.R0, 3);
-        gen.addJumpIfR0AnyBitsSetR1(gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test load from memory.
-        gen = new ApfGenerator();
-        gen.addLoadFromMemory(Register.R0, 0);
-        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test store to memory.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1234567890);
-        gen.addStoreToMemory(Register.R1, 12);
-        gen.addLoadFromMemory(Register.R0, 12);
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test filter age pre-filled memory.
-        gen = new ApfGenerator();
-        gen.addLoadFromMemory(Register.R0, gen.FILTER_AGE_MEMORY_SLOT);
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen, new byte[MIN_PKT_SIZE], 1234567890);
-
-        // Test packet size pre-filled memory.
-        gen = new ApfGenerator();
-        gen.addLoadFromMemory(Register.R0, gen.PACKET_SIZE_MEMORY_SLOT);
-        gen.addJumpIfR0Equals(MIN_PKT_SIZE, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test IPv4 header size pre-filled memory.
-        gen = new ApfGenerator();
-        gen.addLoadFromMemory(Register.R0, gen.IPV4_HEADER_SIZE_MEMORY_SLOT);
-        gen.addJumpIfR0Equals(20, gen.DROP_LABEL);
-        assertDrop(gen, new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x45}, 0);
-
-        // Test not.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addNot(Register.R0);
-        gen.addJumpIfR0Equals(~1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test negate.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addNeg(Register.R0);
-        gen.addJumpIfR0Equals(-1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test move.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1234567890);
-        gen.addMove(Register.R0);
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addMove(Register.R1);
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test swap.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R1, 1234567890);
-        gen.addSwap();
-        gen.addJumpIfR0Equals(1234567890, gen.DROP_LABEL);
-        assertDrop(gen);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1234567890);
-        gen.addSwap();
-        gen.addJumpIfR0Equals(0, gen.DROP_LABEL);
-        assertDrop(gen);
-
-        // Test jump if bytes not equal.
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{123}, gen.DROP_LABEL);
-        program = gen.generate();
-        assertEquals(6, program.length);
-        assertEquals((13 << 3) | (1 << 1) | 0, program[0]);
-        assertEquals(1, program[1]);
-        assertEquals(((20 << 3) | (1 << 1) | 0) - 256, program[2]);
-        assertEquals(1, program[3]);
-        assertEquals(1, program[4]);
-        assertEquals(123, program[5]);
-        assertDrop(program, new byte[MIN_PKT_SIZE], 0);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{123}, gen.DROP_LABEL);
-        byte[] packet123 = new byte[]{0,123,0,0,0,0,0,0,0,0,0,0,0,0,0};
-        assertPass(gen, packet123, 0);
-        gen = new ApfGenerator();
-        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{123}, gen.DROP_LABEL);
-        assertDrop(gen, packet123, 0);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{1,2,30,4,5}, gen.DROP_LABEL);
-        byte[] packet12345 = new byte[]{0,1,2,3,4,5,0,0,0,0,0,0,0,0,0};
-        assertDrop(gen, packet12345, 0);
-        gen = new ApfGenerator();
-        gen.addLoadImmediate(Register.R0, 1);
-        gen.addJumpIfBytesNotEqual(Register.R0, new byte[]{1,2,3,4,5}, gen.DROP_LABEL);
-        assertPass(gen, packet12345, 0);
-    }
-
-    /**
-     * Generate some BPF programs, translate them to APF, then run APF and BPF programs
-     * over packet traces and verify both programs filter out the same packets.
-     */
-    @LargeTest
-    public void testApfAgainstBpf() throws Exception {
-        String[] tcpdump_filters = new String[]{ "udp", "tcp", "icmp", "icmp6", "udp port 53",
-                "arp", "dst 239.255.255.250", "arp or tcp or udp port 53", "net 192.168.1.0/24",
-                "arp or icmp6 or portrange 53-54", "portrange 53-54 or portrange 100-50000",
-                "tcp[tcpflags] & (tcp-ack|tcp-fin) != 0 and (ip[2:2] > 57 or icmp)" };
-        String pcap_filename = stageFile(R.raw.apf);
-        for (String tcpdump_filter : tcpdump_filters) {
-            byte[] apf_program = Bpf2Apf.convert(compileToBpf(tcpdump_filter));
-            assertTrue("Failed to match for filter: " + tcpdump_filter,
-                    compareBpfApf(tcpdump_filter, pcap_filename, apf_program));
-        }
-    }
-
-    /**
-     * Stage a file for testing, i.e. make it native accessible. Given a resource ID,
-     * copy that resource into the app's data directory and return the path to it.
-     */
-    private String stageFile(int rawId) throws Exception {
-        File file = new File(getContext().getFilesDir(), "staged_file");
-        new File(file.getParent()).mkdirs();
-        InputStream in = null;
-        OutputStream out = null;
-        try {
-            in = getContext().getResources().openRawResource(rawId);
-            out = new FileOutputStream(file);
-            Streams.copy(in, out);
-        } finally {
-            if (in != null) in.close();
-            if (out != null) out.close();
-        }
-        return file.getAbsolutePath();
-    }
-
-    /**
-     * Call the APF interpreter the run {@code program} on {@code packet} pretending the
-     * filter was installed {@code filter_age} seconds ago.
-     */
-    private native static int apfSimulate(byte[] program, byte[] packet, int filter_age);
-
-    /**
-     * Compile a tcpdump human-readable filter (e.g. "icmp" or "tcp port 54") into a BPF
-     * prorgam and return a human-readable dump of the BPF program identical to "tcpdump -d".
-     */
-    private native static String compileToBpf(String filter);
-
-    /**
-     * Open packet capture file {@code pcap_filename} and filter the packets using tcpdump
-     * human-readable filter (e.g. "icmp" or "tcp port 54") compiled to a BPF program and
-     * at the same time using APF program {@code apf_program}.  Return {@code true} if
-     * both APF and BPF programs filter out exactly the same packets.
-     */
-    private native static boolean compareBpfApf(String filter, String pcap_filename,
-            byte[] apf_program);
-}
diff --git a/services/tests/servicestests/src/com/android/server/connectivity/VpnTest.java b/services/tests/servicestests/src/com/android/server/connectivity/VpnTest.java
new file mode 100644
index 0000000..3295bf5
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/connectivity/VpnTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2016 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.connectivity;
+
+import static android.content.pm.UserInfo.FLAG_ADMIN;
+import static android.content.pm.UserInfo.FLAG_MANAGED_PROFILE;
+import static android.content.pm.UserInfo.FLAG_PRIMARY;
+import static android.content.pm.UserInfo.FLAG_RESTRICTED;
+import static org.mockito.Mockito.*;
+
+import android.annotation.UserIdInt;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.net.UidRange;
+import android.os.INetworkManagementService;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Set;
+
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for {@link Vpn}.
+ *
+ * Build, install and run with:
+ *  runtest --path src/com/android/server/connectivity/VpnTest.java
+ */
+public class VpnTest extends AndroidTestCase {
+    private static final String TAG = "VpnTest";
+
+    // Mock users
+    static final UserInfo primaryUser = new UserInfo(27, "Primary", FLAG_ADMIN | FLAG_PRIMARY);
+    static final UserInfo secondaryUser = new UserInfo(15, "Secondary", FLAG_ADMIN);
+    static final UserInfo restrictedProfileA = new UserInfo(40, "RestrictedA", FLAG_RESTRICTED);
+    static final UserInfo restrictedProfileB = new UserInfo(42, "RestrictedB", FLAG_RESTRICTED);
+    static final UserInfo managedProfileA = new UserInfo(45, "ManagedA", FLAG_MANAGED_PROFILE);
+    static {
+        restrictedProfileA.restrictedProfileParentId = primaryUser.id;
+        restrictedProfileB.restrictedProfileParentId = secondaryUser.id;
+        managedProfileA.profileGroupId = primaryUser.id;
+    }
+
+    @Mock private Context mContext;
+    @Mock private UserManager mUserManager;
+    @Mock private PackageManager mPackageManager;
+    @Mock private INetworkManagementService mNetService;
+
+    @Override
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mContext.getSystemService(eq(Context.USER_SERVICE))).thenReturn(mUserManager);
+        doNothing().when(mNetService).registerObserver(any());
+    }
+
+    @SmallTest
+    public void testRestrictedProfilesAreAddedToVpn() {
+        setMockedUsers(primaryUser, secondaryUser, restrictedProfileA, restrictedProfileB);
+
+        final Vpn vpn = createVpn(primaryUser.id);
+        final Set<UidRange> ranges = vpn.createUserAndRestrictedProfilesRanges(primaryUser.id,
+                null, null);
+
+        assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+            UidRange.createForUser(primaryUser.id),
+            UidRange.createForUser(restrictedProfileA.id)
+        })), ranges);
+    }
+
+    @SmallTest
+    public void testManagedProfilesAreNotAddedToVpn() {
+        setMockedUsers(primaryUser, managedProfileA);
+
+        final Vpn vpn = createVpn(primaryUser.id);
+        final Set<UidRange> ranges = vpn.createUserAndRestrictedProfilesRanges(primaryUser.id,
+                null, null);
+
+        assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+            UidRange.createForUser(primaryUser.id)
+        })), ranges);
+    }
+
+    @SmallTest
+    public void testAddUserToVpnOnlyAddsOneUser() {
+        setMockedUsers(primaryUser, restrictedProfileA, managedProfileA);
+
+        final Vpn vpn = createVpn(primaryUser.id);
+        final Set<UidRange> ranges = new ArraySet<>();
+        vpn.addUserToRanges(ranges, primaryUser.id, null, null);
+
+        assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+            UidRange.createForUser(primaryUser.id)
+        })), ranges);
+    }
+
+    @SmallTest
+    public void testUidWhiteAndBlacklist() throws Exception {
+        final Map<String, Integer> packages = new ArrayMap<>();
+        packages.put("com.example", 66);
+        packages.put("org.example", 77);
+        packages.put("net.example", 78);
+        setMockedPackages(packages);
+
+        final Vpn vpn = createVpn(primaryUser.id);
+        final UidRange user = UidRange.createForUser(primaryUser.id);
+
+        // Whitelist
+        final Set<UidRange> allow = vpn.createUserAndRestrictedProfilesRanges(primaryUser.id,
+                new ArrayList<String>(packages.keySet()), null);
+        assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+            new UidRange(user.start + 66, user.start + 66),
+            new UidRange(user.start + 77, user.start + 78)
+        })), allow);
+
+        // Blacklist
+        final Set<UidRange> disallow = vpn.createUserAndRestrictedProfilesRanges(primaryUser.id,
+                null, new ArrayList<String>(packages.keySet()));
+        assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+            new UidRange(user.start, user.start + 65),
+            new UidRange(user.start + 67, user.start + 76),
+            new UidRange(user.start + 79, user.stop)
+        })), disallow);
+    }
+
+    /**
+     * @return A subclass of {@link Vpn} which is reliably:
+     * <ul>
+     *   <li>Associated with a specific user ID</li>
+     *   <li>Not in always-on mode</li>
+     * </ul>
+     */
+    private Vpn createVpn(@UserIdInt int userId) {
+        return new Vpn(Looper.myLooper(), mContext, mNetService, userId);
+    }
+
+    /**
+     * Populate {@link #mUserManager} with a list of fake users.
+     */
+    private void setMockedUsers(UserInfo... users) {
+        final Map<Integer, UserInfo> userMap = new ArrayMap<>();
+        for (UserInfo user : users) {
+            userMap.put(user.id, user);
+        }
+
+        doAnswer(invocation -> {
+            return new ArrayList(userMap.values());
+        }).when(mUserManager).getUsers();
+
+        doAnswer(invocation -> {
+            final int id = (int) invocation.getArguments()[0];
+            return userMap.get(id);
+        }).when(mUserManager).getUserInfo(anyInt());
+
+        doAnswer(invocation -> {
+            final int id = (int) invocation.getArguments()[0];
+            return (userMap.get(id).flags & UserInfo.FLAG_ADMIN) != 0;
+        }).when(mUserManager).canHaveRestrictedProfile(anyInt());
+    }
+
+    /**
+     * Populate {@link #mPackageManager} with a fake packageName-to-UID mapping.
+     */
+    private void setMockedPackages(final Map<String, Integer> packages) {
+        try {
+            doAnswer(invocation -> {
+                final String appName = (String) invocation.getArguments()[0];
+                final int userId = (int) invocation.getArguments()[1];
+                return UserHandle.getUid(userId, packages.get(appName));
+            }).when(mPackageManager).getPackageUidAsUser(anyString(), anyInt());
+        } catch (Exception e) {
+        }
+    }
+}
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 8f09bda..33e6cea 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -699,7 +699,7 @@
         sDefaults.putBoolean(KEY_CARRIER_VOLTE_AVAILABLE_BOOL, false);
         sDefaults.putBoolean(KEY_CARRIER_VT_AVAILABLE_BOOL, false);
         sDefaults.putBoolean(KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL, false);
-        sDefaults.putBoolean(KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, true);
+        sDefaults.putBoolean(KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, false);
         sDefaults.putBoolean(KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL, false);
         sDefaults.putBoolean(KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_ENABLED_BOOL, false);
         sDefaults.putInt(KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT, 2);
diff --git a/telephony/java/com/android/internal/telephony/TelephonyIntents.java b/telephony/java/com/android/internal/telephony/TelephonyIntents.java
index eafb3d4..46b0fbd 100644
--- a/telephony/java/com/android/internal/telephony/TelephonyIntents.java
+++ b/telephony/java/com/android/internal/telephony/TelephonyIntents.java
@@ -384,6 +384,9 @@
      *   <li><em>phones radio access family </em> - A RadioAccessFamily
      *   array, contain phone ID and new radio access family for each phone.</li>
      * </ul>
+     *
+     * <p class="note">
+     * Requires the READ_PHONE_STATE permission.
      */
     public static final String ACTION_SET_RADIO_CAPABILITY_DONE =
             "android.intent.action.ACTION_SET_RADIO_CAPABILITY_DONE";
@@ -423,4 +426,10 @@
      */
     public static final String ACTION_REQUEST_NETWORK_FAILED =
             "android.intent.action.REQUEST_NETWORK_FAILED";
+
+    /**
+     * Broadcast action to trigger CI OMA-DM Session.
+     */
+    public static final String ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE =
+            "com.android.omadm.service.CONFIGURATION_UPDATE";
 }
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index 8e7045b..e640733 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -2255,6 +2255,9 @@
                 if (comment.size() <= 0) {
                     comment = getAttributeComment(assets, name8);
                 }
+                if (comment.contains(u"@removed")) {
+                    continue;
+                }
                 if (comment.size() > 0) {
                     const char16_t* p = comment.string();
                     while (*p != 0 && *p != '.') {
diff --git a/tools/aapt2/java/JavaClassGenerator.cpp b/tools/aapt2/java/JavaClassGenerator.cpp
index 24347a1..84df0b4 100644
--- a/tools/aapt2/java/JavaClassGenerator.cpp
+++ b/tools/aapt2/java/JavaClassGenerator.cpp
@@ -284,6 +284,13 @@
                 continue;
             }
 
+            StringPiece16 attrCommentLine = entry.symbol->attribute->getComment();
+            if (attrCommentLine.contains(StringPiece16(u"@removed"))) {
+                // Removed attributes are public but hidden from the documentation, so don't emit
+                // them as part of the class documentation.
+                continue;
+            }
+
             const ResourceName& attrName = entry.attrRef->name.value();
             styleableComment << "<tr><td>";
             styleableComment << "<code>{@link #"
@@ -299,7 +306,6 @@
             // Only use the comment up until the first '.'. This is to stay compatible with
             // the way old AAPT did it (presumably to keep it short and to avoid including
             // annotations like @hide which would affect this Styleable).
-            StringPiece16 attrCommentLine = entry.symbol->attribute->getComment();
             auto iter = std::find(attrCommentLine.begin(), attrCommentLine.end(), u'.');
             if (iter != attrCommentLine.end()) {
                 attrCommentLine = attrCommentLine.substr(
@@ -348,6 +354,17 @@
             continue;
         }
 
+        StringPiece16 comment = styleableAttr.attrRef->getComment();
+        if (styleableAttr.symbol->attribute && comment.empty()) {
+            comment = styleableAttr.symbol->attribute->getComment();
+        }
+
+        if (comment.contains(StringPiece16(u"@removed"))) {
+            // Removed attributes are public but hidden from the documentation, so don't emit them
+            // as part of the class documentation.
+            continue;
+        }
+
         const ResourceName& attrName = styleableAttr.attrRef->name.value();
 
         StringPiece16 packageName = attrName.package;
@@ -360,11 +377,6 @@
 
         AnnotationProcessor* attrProcessor = indexMember->getCommentBuilder();
 
-        StringPiece16 comment = styleableAttr.attrRef->getComment();
-        if (styleableAttr.symbol->attribute && comment.empty()) {
-            comment = styleableAttr.symbol->attribute->getComment();
-        }
-
         if (!comment.empty()) {
             attrProcessor->appendComment("<p>\n@attr description");
             attrProcessor->appendComment(comment);
diff --git a/tools/aapt2/java/JavaClassGenerator_test.cpp b/tools/aapt2/java/JavaClassGenerator_test.cpp
index 7d0aa83..46266b3 100644
--- a/tools/aapt2/java/JavaClassGenerator_test.cpp
+++ b/tools/aapt2/java/JavaClassGenerator_test.cpp
@@ -289,4 +289,37 @@
     EXPECT_NE(std::string::npos, actual.find(util::utf16ToUtf8(styleable.getComment())));
 }
 
+TEST(JavaClassGeneratorTest, CommentsForRemovedAttributesAreNotPresentInClass) {
+    Attribute attr(false);
+    attr.setComment(StringPiece16(u"@removed"));
+
+
+    std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder()
+            .setPackageId(u"android", 0x01)
+            .addValue(u"@android:attr/one", util::make_unique<Attribute>(attr))
+            .build();
+
+    std::unique_ptr<IAaptContext> context = test::ContextBuilder()
+            .addSymbolSource(util::make_unique<ResourceTableSymbolSource>(table.get()))
+            .setNameManglerPolicy(NameManglerPolicy{ u"android" })
+            .build();
+    JavaClassGeneratorOptions options;
+    options.useFinal = false;
+    JavaClassGenerator generator(context.get(), table.get(), options);
+    std::stringstream out;
+    ASSERT_TRUE(generator.generate(u"android", &out));
+    std::string actual = out.str();
+
+    std::cout << actual << std::endl;
+
+    EXPECT_EQ(std::string::npos, actual.find("@attr name android:one"));
+    EXPECT_EQ(std::string::npos, actual.find("@attr description"));
+
+    // We should find @removed only in the attribute javadoc and not anywhere else (i.e. the class
+    // javadoc).
+    const size_t pos = actual.find("@removed");
+    EXPECT_NE(std::string::npos, pos);
+    EXPECT_EQ(std::string::npos, actual.find("@removed", pos + 1));
+}
+
 } // namespace aapt
diff --git a/tools/aapt2/util/StringPiece.h b/tools/aapt2/util/StringPiece.h
index 31deb45..f91bccc 100644
--- a/tools/aapt2/util/StringPiece.h
+++ b/tools/aapt2/util/StringPiece.h
@@ -57,6 +57,7 @@
     bool empty() const;
     std::basic_string<TChar> toString() const;
 
+    bool contains(const BasicStringPiece<TChar>& rhs) const;
     int compare(const BasicStringPiece<TChar>& rhs) const;
     bool operator<(const BasicStringPiece<TChar>& rhs) const;
     bool operator>(const BasicStringPiece<TChar>& rhs) const;
@@ -164,6 +165,17 @@
 }
 
 template <>
+inline bool BasicStringPiece<char>::contains(const BasicStringPiece<char>& rhs) const {
+    if (!mData || !rhs.mData) {
+        return false;
+    }
+    if (rhs.mLength > mLength) {
+        return false;
+    }
+    return strstr(mData, rhs.mData) != nullptr;
+}
+
+template <>
 inline int BasicStringPiece<char>::compare(const BasicStringPiece<char>& rhs) const {
     const char nullStr = '\0';
     const char* b1 = mData != nullptr ? mData : &nullStr;
@@ -185,6 +197,16 @@
     return out.write(utf8.string(), utf8.size());
 }
 
+template <>
+inline bool BasicStringPiece<char16_t>::contains(const BasicStringPiece<char16_t>& rhs) const {
+    if (!mData || !rhs.mData) {
+        return false;
+    }
+    if (rhs.mLength > mLength) {
+        return false;
+    }
+    return strstr16(mData, rhs.mData) != nullptr;
+}
 
 template <>
 inline int BasicStringPiece<char16_t>::compare(const BasicStringPiece<char16_t>& rhs) const {
diff --git a/tools/aapt2/util/StringPiece_test.cpp b/tools/aapt2/util/StringPiece_test.cpp
index d49b67f..853a9a4 100644
--- a/tools/aapt2/util/StringPiece_test.cpp
+++ b/tools/aapt2/util/StringPiece_test.cpp
@@ -59,4 +59,36 @@
     EXPECT_TRUE(StringPiece(car) > banana);
 }
 
+TEST(StringPieceTest, ContainsOtherStringPiece) {
+    StringPiece text("I am a leaf on the wind.");
+    StringPiece startNeedle("I am");
+    StringPiece endNeedle("wind.");
+    StringPiece middleNeedle("leaf");
+    StringPiece emptyNeedle("");
+    StringPiece missingNeedle("soar");
+    StringPiece longNeedle("This string is longer than the text.");
+
+    EXPECT_TRUE(text.contains(startNeedle));
+    EXPECT_TRUE(text.contains(endNeedle));
+    EXPECT_TRUE(text.contains(middleNeedle));
+    EXPECT_TRUE(text.contains(emptyNeedle));
+    EXPECT_FALSE(text.contains(missingNeedle));
+    EXPECT_FALSE(text.contains(longNeedle));
+
+    StringPiece16 text16(u"I am a leaf on the wind.");
+    StringPiece16 startNeedle16(u"I am");
+    StringPiece16 endNeedle16(u"wind.");
+    StringPiece16 middleNeedle16(u"leaf");
+    StringPiece16 emptyNeedle16(u"");
+    StringPiece16 missingNeedle16(u"soar");
+    StringPiece16 longNeedle16(u"This string is longer than the text.");
+
+    EXPECT_TRUE(text16.contains(startNeedle16));
+    EXPECT_TRUE(text16.contains(endNeedle16));
+    EXPECT_TRUE(text16.contains(middleNeedle16));
+    EXPECT_TRUE(text16.contains(emptyNeedle16));
+    EXPECT_FALSE(text16.contains(missingNeedle16));
+    EXPECT_FALSE(text16.contains(longNeedle16));
+}
+
 } // namespace aapt
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index f9e008e..ceebdd5 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -336,10 +336,11 @@
     }
 
     @Override
-    public void setAppStartingWindow(IBinder arg0, String arg1, int arg2, CompatibilityInfo arg3,
+    public boolean setAppStartingWindow(IBinder arg0, String arg1, int arg2, CompatibilityInfo arg3,
             CharSequence arg4, int arg5, int arg6, int arg7, int arg8, IBinder arg9, boolean arg10)
             throws RemoteException {
         // TODO Auto-generated method stub
+        return false;
     }
 
     @Override
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
index 0cf51a4..3f276c9 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
@@ -219,6 +219,11 @@
     }
 
     @Override
+    public void clearLastInputMethodWindowForTransition(IBinder arg0) throws RemoteException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
     public InputBindResult startInputOrWindowGainedFocus(
             /* @InputMethodClient.StartInputReason */ int startInputReason,
             IInputMethodClient client, IBinder windowToken, int controlFlags, int softInputMode,