Merge "Fix for missing location icon" into pi-dev
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 15aedd7..63de8bf 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1664,7 +1664,8 @@
     /**
      * Feature for {@link #getSystemAvailableFeatures} and
      * {@link #hasSystemFeature}: The device includes at least one form of audio
-     * output, such as speakers, audio jack or streaming over bluetooth
+     * output, as defined in the Android Compatibility Definition Document (CDD)
+     * <a href="https://source.android.com/compatibility/android-cdd#7_8_audio">section 7.8 Audio</a>.
      */
     @SdkConstant(SdkConstantType.FEATURE)
     public static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java
index 0ae5394..3d76c25 100644
--- a/core/java/android/os/Binder.java
+++ b/core/java/android/os/Binder.java
@@ -138,6 +138,15 @@
     }
 
     /**
+     * Dump proxy debug information.
+     *
+     * @hide
+     */
+    public static void dumpProxyDebugInfo() {
+        BinderProxy.dumpProxyDebugInfo();
+    }
+
+    /**
      * Check if binder transaction tracing is enabled.
      *
      * @hide
@@ -941,8 +950,7 @@
                     // about to crash.
                     final int totalUnclearedSize = unclearedSize();
                     if (totalUnclearedSize >= CRASH_AT_SIZE) {
-                        dumpProxyInterfaceCounts();
-                        dumpPerUidProxyCounts();
+                        dumpProxyDebugInfo();
                         Runtime.getRuntime().gc();
                         throw new AssertionError("Binder ProxyMap has too many entries: "
                                 + totalSize + " (total), " + totalUnclearedSize + " (uncleared), "
@@ -1027,6 +1035,14 @@
     private static ProxyMap sProxyMap = new ProxyMap();
 
     /**
+      * @hide
+      */
+    public static void dumpProxyDebugInfo() {
+        sProxyMap.dumpProxyInterfaceCounts();
+        sProxyMap.dumpPerUidProxyCounts();
+    }
+
+    /**
      * Return a BinderProxy for IBinder.
      * This method is thread-hostile!  The (native) caller serializes getInstance() calls using
      * gProxyLock.
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index 2d8b4d4..c861499 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -43,7 +43,7 @@
         DEFAULT_FLAGS.put("settings_bluetooth_while_driving", "false");
         DEFAULT_FLAGS.put("settings_data_usage_v2", "true");
         DEFAULT_FLAGS.put("settings_audio_switcher", "true");
-        DEFAULT_FLAGS.put("settings_systemui_theme", "false");
+        DEFAULT_FLAGS.put("settings_systemui_theme", "true");
     }
 
     /**
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 7c814f4..ed67075 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1630,6 +1630,8 @@
                         contentInsets.top + outsets.top, contentInsets.right + outsets.right,
                         contentInsets.bottom + outsets.bottom);
             }
+            contentInsets = ensureInsetsNonNegative(contentInsets, "content");
+            stableInsets = ensureInsetsNonNegative(stableInsets, "stable");
             mLastWindowInsets = new WindowInsets(contentInsets,
                     null /* windowDecorInsets */, stableInsets,
                     mContext.getResources().getConfiguration().isScreenRound(),
@@ -1638,6 +1640,17 @@
         return mLastWindowInsets;
     }
 
+    private Rect ensureInsetsNonNegative(Rect insets, String kind) {
+        if (insets.left < 0  || insets.top < 0  || insets.right < 0  || insets.bottom < 0) {
+            Log.wtf(mTag, "Negative " + kind + "Insets: " + insets + ", mFirst=" + mFirst);
+            return new Rect(Math.max(0, insets.left),
+                    Math.max(0, insets.top),
+                    Math.max(0, insets.right),
+                    Math.max(0, insets.bottom));
+        }
+        return insets;
+    }
+
     void dispatchApplyInsets(View host) {
         WindowInsets insets = getWindowInsets(true /* forceConstruct */);
         final boolean dispatchCutout = (mWindowAttributes.layoutInDisplayCutoutMode
diff --git a/core/java/com/android/internal/app/AssistUtils.java b/core/java/com/android/internal/app/AssistUtils.java
index 2940079..9171959 100644
--- a/core/java/com/android/internal/app/AssistUtils.java
+++ b/core/java/com/android/internal/app/AssistUtils.java
@@ -156,9 +156,12 @@
         if (activeServiceSupportsAssistGesture()) {
             return getActiveServiceComponentName();
         }
-
-        Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                .getAssistIntent(false);
+        final SearchManager searchManager =
+            (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
+        if (searchManager == null) {
+            return null;
+        }
+        final Intent intent = searchManager.getAssistIntent(false);
         PackageManager pm = mContext.getPackageManager();
         ResolveInfo info = pm.resolveActivityAsUser(intent, PackageManager.MATCH_DEFAULT_ONLY,
                 userId);
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 571878d..4f567d2 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -76,6 +76,7 @@
 
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.app.ResolverActivity;
 import com.android.internal.app.ResolverActivity.TargetInfo;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -932,7 +933,7 @@
         public static final int TARGET_SERVICE = 1;
         public static final int TARGET_STANDARD = 2;
 
-        private static final int MAX_SERVICE_TARGETS = 8;
+        private static final int MAX_SERVICE_TARGETS = 4;
         private static final int MAX_TARGETS_PER_SERVICE = 4;
 
         private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>();
@@ -1189,123 +1190,20 @@
         }
     }
 
-    static class RowScale {
-        private static final int DURATION = 400;
-
-        float mScale;
-        ChooserRowAdapter mAdapter;
-        private final ObjectAnimator mAnimator;
-
-        public static final FloatProperty<RowScale> PROPERTY =
-                new FloatProperty<RowScale>("scale") {
-            @Override
-            public void setValue(RowScale object, float value) {
-                object.mScale = value;
-                object.mAdapter.notifyDataSetChanged();
-            }
-
-            @Override
-            public Float get(RowScale object) {
-                return object.mScale;
-            }
-        };
-
-        public RowScale(@NonNull ChooserRowAdapter adapter, float from, float to) {
-            mAdapter = adapter;
-            mScale = from;
-            if (from == to) {
-                mAnimator = null;
-                return;
-            }
-
-            mAnimator = ObjectAnimator.ofFloat(this, PROPERTY, from, to)
-                .setDuration(DURATION);
-            mAnimator.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animation) {
-                    mAdapter.onAnimationStart();
-                }
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    mAdapter.onAnimationEnd();
-                }
-            });
-        }
-
-        public RowScale setInterpolator(Interpolator interpolator) {
-            if (mAnimator != null) {
-                mAnimator.setInterpolator(interpolator);
-            }
-            return this;
-        }
-
-        public float get() {
-            return mScale;
-        }
-
-        public void startAnimation() {
-            if (mAnimator != null) {
-                mAnimator.start();
-            }
-        }
-
-        public void cancelAnimation() {
-            if (mAnimator != null) {
-                mAnimator.cancel();
-            }
-        }
-    }
-
     class ChooserRowAdapter extends BaseAdapter {
         private ChooserListAdapter mChooserListAdapter;
         private final LayoutInflater mLayoutInflater;
         private final int mColumnCount = 4;
-        private RowScale[] mServiceTargetScale;
-        private final Interpolator mInterpolator;
         private int mAnimationCount = 0;
 
         public ChooserRowAdapter(ChooserListAdapter wrappedAdapter) {
             mChooserListAdapter = wrappedAdapter;
             mLayoutInflater = LayoutInflater.from(ChooserActivity.this);
 
-            mInterpolator = AnimationUtils.loadInterpolator(ChooserActivity.this,
-                    android.R.interpolator.decelerate_quint);
-
             wrappedAdapter.registerDataSetObserver(new DataSetObserver() {
                 @Override
                 public void onChanged() {
                     super.onChanged();
-                    final int rcount = getServiceTargetRowCount();
-                    if (mServiceTargetScale == null
-                            || mServiceTargetScale.length != rcount) {
-                        RowScale[] old = mServiceTargetScale;
-                        int oldRCount = old != null ? old.length : 0;
-                        mServiceTargetScale = new RowScale[rcount];
-                        if (old != null && rcount > 0) {
-                            System.arraycopy(old, 0, mServiceTargetScale, 0,
-                                    Math.min(old.length, rcount));
-                        }
-
-                        for (int i = rcount; i < oldRCount; i++) {
-                            old[i].cancelAnimation();
-                        }
-
-                        for (int i = oldRCount; i < rcount; i++) {
-                            final RowScale rs = new RowScale(ChooserRowAdapter.this, 0.f, 1.f)
-                                    .setInterpolator(mInterpolator);
-                            mServiceTargetScale[i] = rs;
-                        }
-
-                        // Start the animations in a separate loop.
-                        // The process of starting animations will result in
-                        // binding views to set up initial values, and we must
-                        // have ALL of the new RowScale objects created above before
-                        // we get started.
-                        for (int i = oldRCount; i < rcount; i++) {
-                            mServiceTargetScale[i].startAnimation();
-                        }
-                    }
-
                     notifyDataSetChanged();
                 }
 
@@ -1313,39 +1211,10 @@
                 public void onInvalidated() {
                     super.onInvalidated();
                     notifyDataSetInvalidated();
-                    if (mServiceTargetScale != null) {
-                        for (RowScale rs : mServiceTargetScale) {
-                            rs.cancelAnimation();
-                        }
-                    }
                 }
             });
         }
 
-        private float getRowScale(int rowPosition) {
-            final int start = getCallerTargetRowCount();
-            final int end = start + getServiceTargetRowCount();
-            if (rowPosition >= start && rowPosition < end) {
-                return mServiceTargetScale[rowPosition - start].get();
-            }
-            return 1.f;
-        }
-
-        public void onAnimationStart() {
-            final boolean lock = mAnimationCount == 0;
-            mAnimationCount++;
-            if (lock) {
-                mResolverDrawerLayout.setDismissLocked(true);
-            }
-        }
-
-        public void onAnimationEnd() {
-            mAnimationCount--;
-            if (mAnimationCount == 0) {
-                mResolverDrawerLayout.setDismissLocked(false);
-            }
-        }
-
         @Override
         public int getCount() {
             return (int) (
@@ -1360,9 +1229,9 @@
                     (float) mChooserListAdapter.getCallerTargetCount() / mColumnCount);
         }
 
+        // There can be at most one row of service targets.
         public int getServiceTargetRowCount() {
-            return (int) Math.ceil(
-                    (float) mChooserListAdapter.getServiceTargetCount() / mColumnCount);
+            return (int) mChooserListAdapter.getServiceTargetCount() == 0 ? 0 : 1;
         }
 
         @Override
@@ -1485,8 +1354,7 @@
             }
 
             final int oldHeight = holder.row.getLayoutParams().height;
-            holder.row.getLayoutParams().height = Math.max(1,
-                    (int) (holder.measuredRowHeight * getRowScale(rowPosition)));
+            holder.row.getLayoutParams().height = Math.max(1, holder.measuredRowHeight);
             if (holder.row.getLayoutParams().height != oldHeight) {
                 holder.row.requestLayout();
             }
@@ -1728,7 +1596,7 @@
                 final View v = mChooserRowAdapter.getView(pos, mCachedView, mListView);
                 int height = ((RowViewHolder) (v.getTag())).measuredRowHeight;
 
-                offset += (int) (height * mChooserRowAdapter.getRowScale(pos));
+                offset += (int) (height);
 
                 if (vt >= 0) {
                     mCachedViewType = vt;
diff --git a/core/tests/coretests/src/android/view/ViewRootImplTest.java b/core/tests/coretests/src/android/view/ViewRootImplTest.java
new file mode 100644
index 0000000..c8e46fc
--- /dev/null
+++ b/core/tests/coretests/src/android/view/ViewRootImplTest.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2018 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.view;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.platform.test.annotations.Presubmit;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+@Presubmit
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class ViewRootImplTest {
+
+    private Context mContext;
+    private ViewRootImplAccessor mViewRootImpl;
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getContext();
+
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+            mViewRootImpl = new ViewRootImplAccessor(
+                    new ViewRootImpl(mContext, mContext.getDisplay()));
+        });
+    }
+
+    @Test
+    public void negativeInsets_areSetToZero() throws Exception {
+        mViewRootImpl.getAttachInfo().getContentInsets().set(-10, -20, -30 , -40);
+        mViewRootImpl.getAttachInfo().getStableInsets().set(-10, -20, -30 , -40);
+        final WindowInsets insets = mViewRootImpl.getWindowInsets(true /* forceConstruct */);
+
+        assertThat(insets.getSystemWindowInsets(), equalTo(new Rect()));
+        assertThat(new Rect(insets.getStableInsetLeft(), insets.getStableInsetTop(),
+                insets.getStableInsetRight(), insets.getStableInsetBottom()), equalTo(new Rect()));
+    }
+
+    @Test
+    public void negativeInsets_areSetToZero_positiveAreLeftAsIs() throws Exception {
+        mViewRootImpl.getAttachInfo().getContentInsets().set(-10, 20, -30 , 40);
+        mViewRootImpl.getAttachInfo().getStableInsets().set(10, -20, 30 , -40);
+        final WindowInsets insets = mViewRootImpl.getWindowInsets(true /* forceConstruct */);
+
+        assertThat(insets.getSystemWindowInsets(), equalTo(new Rect(0, 20, 0, 40)));
+        assertThat(new Rect(insets.getStableInsetLeft(), insets.getStableInsetTop(),
+                insets.getStableInsetRight(), insets.getStableInsetBottom()),
+                equalTo(new Rect(10, 0, 30, 0)));
+    }
+
+    @Test
+    public void positiveInsets_areLeftAsIs() throws Exception {
+        mViewRootImpl.getAttachInfo().getContentInsets().set(10, 20, 30 , 40);
+        mViewRootImpl.getAttachInfo().getStableInsets().set(10, 20, 30 , 40);
+        final WindowInsets insets = mViewRootImpl.getWindowInsets(true /* forceConstruct */);
+
+        assertThat(insets.getSystemWindowInsets(), equalTo(new Rect(10, 20, 30, 40)));
+        assertThat(new Rect(insets.getStableInsetLeft(), insets.getStableInsetTop(),
+                insets.getStableInsetRight(), insets.getStableInsetBottom()),
+                equalTo(new Rect(10, 20, 30, 40)));
+    }
+
+    private static class ViewRootImplAccessor {
+
+        private final ViewRootImpl mViewRootImpl;
+
+        ViewRootImplAccessor(ViewRootImpl viewRootImpl) {
+            mViewRootImpl = viewRootImpl;
+        }
+
+        public ViewRootImpl get() {
+            return mViewRootImpl;
+        }
+
+        AttachInfoAccessor getAttachInfo() throws Exception {
+            return new AttachInfoAccessor(
+                    getField(mViewRootImpl, ViewRootImpl.class.getDeclaredField("mAttachInfo")));
+        }
+
+        WindowInsets getWindowInsets(boolean forceConstruct) throws Exception {
+            return (WindowInsets) invokeMethod(mViewRootImpl,
+                    ViewRootImpl.class.getDeclaredMethod("getWindowInsets", boolean.class),
+                    forceConstruct);
+        }
+
+        class AttachInfoAccessor {
+
+            private final Class<?> mClass;
+            private final Object mAttachInfo;
+
+            AttachInfoAccessor(Object attachInfo) throws Exception {
+                mAttachInfo = attachInfo;
+                mClass = ViewRootImpl.class.getClassLoader().loadClass(
+                        "android.view.View$AttachInfo");
+            }
+
+            Rect getContentInsets() throws Exception {
+                return (Rect) getField(mAttachInfo, mClass.getDeclaredField("mContentInsets"));
+            }
+
+            Rect getStableInsets() throws Exception {
+                return (Rect) getField(mAttachInfo, mClass.getDeclaredField("mStableInsets"));
+            }
+        }
+
+        private static Object getField(Object o, Field field) throws Exception {
+            field.setAccessible(true);
+            return field.get(o);
+        }
+
+        private static Object invokeMethod(Object o, Method method, Object... args)
+                throws Exception {
+            method.setAccessible(true);
+            return method.invoke(o, args);
+        }
+    }
+}
diff --git a/docs/html/reference/_book.yaml b/docs/html/reference/_book.yaml
deleted file mode 100644
index b902a61..0000000
--- a/docs/html/reference/_book.yaml
+++ /dev/null
@@ -1,853 +0,0 @@
-reference:
-- title: Class Index
-  path: /reference/classes.html
-  status_text: no-toggle
-- title: Package Index
-  path: /reference/packages.html
-  status_text: no-toggle
-- title: android
-  path: /reference/android/package-summary.html
-  status_text: apilevel-1
-- title: android.accessibilityservice
-  path: /reference/android/accessibilityservice/package-summary.html
-  status_text: apilevel-4
-- title: android.accounts
-  path: /reference/android/accounts/package-summary.html
-  status_text: apilevel-5
-- title: android.animation
-  path: /reference/android/animation/package-summary.html
-  status_text: apilevel-11
-- title: android.annotation
-  path: /reference/android/annotation/package-summary.html
-  status_text: apilevel-16
-- title: android.app
-  path: /reference/android/app/package-summary.html
-  status_text: apilevel-1
-- title: android.app.admin
-  path: /reference/android/app/admin/package-summary.html
-  status_text: apilevel-8
-- title: android.app.assist
-  path: /reference/android/app/assist/package-summary.html
-  status_text: apilevel-23
-- title: android.app.backup
-  path: /reference/android/app/backup/package-summary.html
-  status_text: apilevel-8
-- title: android.app.job
-  path: /reference/android/app/job/package-summary.html
-  status_text: apilevel-21
-- title: android.app.usage
-  path: /reference/android/app/usage/package-summary.html
-  status_text: apilevel-21
-- title: android.appwidget
-  path: /reference/android/appwidget/package-summary.html
-  status_text: apilevel-3
-- title: android.bluetooth
-  path: /reference/android/bluetooth/package-summary.html
-  status_text: apilevel-5
-- title: android.bluetooth.le
-  path: /reference/android/bluetooth/le/package-summary.html
-  status_text: apilevel-21
-- title: android.companion
-  path: /reference/android/companion/package-summary.html
-  status_text: apilevel-O
-- title: android.content
-  path: /reference/android/content/package-summary.html
-  status_text: apilevel-1
-- title: android.content.pm
-  path: /reference/android/content/pm/package-summary.html
-  status_text: apilevel-1
-- title: android.content.res
-  path: /reference/android/content/res/package-summary.html
-  status_text: apilevel-1
-- title: android.database
-  path: /reference/android/database/package-summary.html
-  status_text: apilevel-1
-- title: android.database.sqlite
-  path: /reference/android/database/sqlite/package-summary.html
-  status_text: apilevel-1
-- title: android.databinding
-  path: /reference/android/databinding/package-summary.html
-  status_text: apilevel-
-- title: android.drm
-  path: /reference/android/drm/package-summary.html
-  status_text: apilevel-11
-- title: android.gesture
-  path: /reference/android/gesture/package-summary.html
-  status_text: apilevel-4
-- title: android.graphics
-  path: /reference/android/graphics/package-summary.html
-  status_text: apilevel-1
-- title: android.graphics.drawable
-  path: /reference/android/graphics/drawable/package-summary.html
-  status_text: apilevel-1
-- title: android.graphics.drawable.shapes
-  path: /reference/android/graphics/drawable/shapes/package-summary.html
-  status_text: apilevel-1
-- title: android.graphics.fonts
-  path: /reference/android/graphics/fonts/package-summary.html
-  status_text: apilevel-O
-- title: android.graphics.pdf
-  path: /reference/android/graphics/pdf/package-summary.html
-  status_text: apilevel-19
-- title: android.hardware
-  path: /reference/android/hardware/package-summary.html
-  status_text: apilevel-1
-- title: android.hardware.camera2
-  path: /reference/android/hardware/camera2/package-summary.html
-  status_text: apilevel-21
-- title: android.hardware.camera2.params
-  path: /reference/android/hardware/camera2/params/package-summary.html
-  status_text: apilevel-21
-- title: android.hardware.display
-  path: /reference/android/hardware/display/package-summary.html
-  status_text: apilevel-17
-- title: android.hardware.fingerprint
-  path: /reference/android/hardware/fingerprint/package-summary.html
-  status_text: apilevel-23
-- title: android.hardware.input
-  path: /reference/android/hardware/input/package-summary.html
-  status_text: apilevel-16
-- title: android.hardware.usb
-  path: /reference/android/hardware/usb/package-summary.html
-  status_text: apilevel-12
-- title: android.icu.lang
-  path: /reference/android/icu/lang/package-summary.html
-  status_text: apilevel-24
-- title: android.icu.math
-  path: /reference/android/icu/math/package-summary.html
-  status_text: apilevel-24
-- title: android.icu.text
-  path: /reference/android/icu/text/package-summary.html
-  status_text: apilevel-24
-- title: android.icu.util
-  path: /reference/android/icu/util/package-summary.html
-  status_text: apilevel-24
-- title: android.inputmethodservice
-  path: /reference/android/inputmethodservice/package-summary.html
-  status_text: apilevel-3
-- title: android.location
-  path: /reference/android/location/package-summary.html
-  status_text: apilevel-1
-- title: android.media
-  path: /reference/android/media/package-summary.html
-  status_text: apilevel-1
-- title: android.media.audiofx
-  path: /reference/android/media/audiofx/package-summary.html
-  status_text: apilevel-9
-- title: android.media.browse
-  path: /reference/android/media/browse/package-summary.html
-  status_text: apilevel-21
-- title: android.media.effect
-  path: /reference/android/media/effect/package-summary.html
-  status_text: apilevel-14
-- title: android.media.midi
-  path: /reference/android/media/midi/package-summary.html
-  status_text: apilevel-23
-- title: android.media.projection
-  path: /reference/android/media/projection/package-summary.html
-  status_text: apilevel-21
-- title: android.media.session
-  path: /reference/android/media/session/package-summary.html
-  status_text: apilevel-21
-- title: android.media.tv
-  path: /reference/android/media/tv/package-summary.html
-  status_text: apilevel-21
-- title: android.mtp
-  path: /reference/android/mtp/package-summary.html
-  status_text: apilevel-12
-- title: android.net
-  path: /reference/android/net/package-summary.html
-  status_text: apilevel-1
-- title: android.net.http
-  path: /reference/android/net/http/package-summary.html
-  status_text: apilevel-1
-- title: android.net.nsd
-  path: /reference/android/net/nsd/package-summary.html
-  status_text: apilevel-16
-- title: android.net.rtp
-  path: /reference/android/net/rtp/package-summary.html
-  status_text: apilevel-12
-- title: android.net.sip
-  path: /reference/android/net/sip/package-summary.html
-  status_text: apilevel-9
-- title: android.net.wifi
-  path: /reference/android/net/wifi/package-summary.html
-  status_text: apilevel-1
-- title: android.net.wifi.aware
-  path: /reference/android/net/wifi/aware/package-summary.html
-  status_text: apilevel-O
-- title: android.net.wifi.hotspot2
-  path: /reference/android/net/wifi/hotspot2/package-summary.html
-  status_text: apilevel-O
-- title: android.net.wifi.hotspot2.omadm
-  path: /reference/android/net/wifi/hotspot2/omadm/package-summary.html
-  status_text: apilevel-O
-- title: android.net.wifi.hotspot2.pps
-  path: /reference/android/net/wifi/hotspot2/pps/package-summary.html
-  status_text: apilevel-O
-- title: android.net.wifi.p2p
-  path: /reference/android/net/wifi/p2p/package-summary.html
-  status_text: apilevel-14
-- title: android.net.wifi.p2p.nsd
-  path: /reference/android/net/wifi/p2p/nsd/package-summary.html
-  status_text: apilevel-16
-- title: android.nfc
-  path: /reference/android/nfc/package-summary.html
-  status_text: apilevel-9
-- title: android.nfc.cardemulation
-  path: /reference/android/nfc/cardemulation/package-summary.html
-  status_text: apilevel-19
-- title: android.nfc.tech
-  path: /reference/android/nfc/tech/package-summary.html
-  status_text: apilevel-10
-- title: android.opengl
-  path: /reference/android/opengl/package-summary.html
-  status_text: apilevel-1
-- title: android.os
-  path: /reference/android/os/package-summary.html
-  status_text: apilevel-1
-- title: android.os.health
-  path: /reference/android/os/health/package-summary.html
-  status_text: apilevel-24
-- title: android.os.storage
-  path: /reference/android/os/storage/package-summary.html
-  status_text: apilevel-9
-- title: android.preference
-  path: /reference/android/preference/package-summary.html
-  status_text: apilevel-1
-- title: android.print
-  path: /reference/android/print/package-summary.html
-  status_text: apilevel-19
-- title: android.print.pdf
-  path: /reference/android/print/pdf/package-summary.html
-  status_text: apilevel-19
-- title: android.printservice
-  path: /reference/android/printservice/package-summary.html
-  status_text: apilevel-19
-- title: android.provider
-  path: /reference/android/provider/package-summary.html
-  status_text: apilevel-1
-- title: android.renderscript
-  path: /reference/android/renderscript/package-summary.html
-  status_text: apilevel-11
-- title: android.sax
-  path: /reference/android/sax/package-summary.html
-  status_text: apilevel-1
-- title: android.security
-  path: /reference/android/security/package-summary.html
-  status_text: apilevel-14
-- title: android.security.keystore
-  path: /reference/android/security/keystore/package-summary.html
-  status_text: apilevel-23
-- title: android.service.autofill
-  path: /reference/android/service/autofill/package-summary.html
-  status_text: apilevel-O
-- title: android.service.carrier
-  path: /reference/android/service/carrier/package-summary.html
-  status_text: apilevel-22
-- title: android.service.chooser
-  path: /reference/android/service/chooser/package-summary.html
-  status_text: apilevel-23
-- title: android.service.dreams
-  path: /reference/android/service/dreams/package-summary.html
-  status_text: apilevel-17
-- title: android.service.media
-  path: /reference/android/service/media/package-summary.html
-  status_text: apilevel-21
-- title: android.service.notification
-  path: /reference/android/service/notification/package-summary.html
-  status_text: apilevel-18
-- title: android.service.quicksettings
-  path: /reference/android/service/quicksettings/package-summary.html
-  status_text: apilevel-24
-- title: android.service.restrictions
-  path: /reference/android/service/restrictions/package-summary.html
-  status_text: apilevel-21
-- title: android.service.textservice
-  path: /reference/android/service/textservice/package-summary.html
-  status_text: apilevel-14
-- title: android.service.voice
-  path: /reference/android/service/voice/package-summary.html
-  status_text: apilevel-21
-- title: android.service.vr
-  path: /reference/android/service/vr/package-summary.html
-  status_text: apilevel-24
-- title: android.service.wallpaper
-  path: /reference/android/service/wallpaper/package-summary.html
-  status_text: apilevel-7
-- title: android.speech
-  path: /reference/android/speech/package-summary.html
-  status_text: apilevel-3
-- title: android.speech.tts
-  path: /reference/android/speech/tts/package-summary.html
-  status_text: apilevel-4
-- title: android.support.animation
-  path: /reference/android/support/animation/package-summary.html
-  status_text: apilevel-25.3.0
-- title: android.support.annotation
-  path: /reference/android/support/annotation/package-summary.html
-  status_text: apilevel-
-- title: android.support.app.recommendation
-  path: /reference/android/support/app/recommendation/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.compat
-  path: /reference/android/support/compat/package-summary.html
-  status_text: apilevel-
-- title: android.support.coreui
-  path: /reference/android/support/coreui/package-summary.html
-  status_text: apilevel-
-- title: android.support.coreutils
-  path: /reference/android/support/coreutils/package-summary.html
-  status_text: apilevel-
-- title: android.support.customtabs
-  path: /reference/android/support/customtabs/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.design
-  path: /reference/android/support/design/package-summary.html
-  status_text: apilevel-
-- title: android.support.design.widget
-  path: /reference/android/support/design/widget/package-summary.html
-  status_text: apilevel-22.2.0
-- title: android.support.dynamicanimation
-  path: /reference/android/support/dynamicanimation/package-summary.html
-  status_text: apilevel-
-- title: android.support.exifinterface
-  path: /reference/android/support/exifinterface/package-summary.html
-  status_text: apilevel-
-- title: android.support.fragment
-  path: /reference/android/support/fragment/package-summary.html
-  status_text: apilevel-
-- title: android.support.graphics.drawable
-  path: /reference/android/support/graphics/drawable/package-summary.html
-  status_text: apilevel-23.2.0
-- title: android.support.graphics.drawable.animated
-  path: /reference/android/support/graphics/drawable/animated/package-summary.html
-  status_text: apilevel-
-- title: android.support.media
-  path: /reference/android/support/media/package-summary.html
-  status_text: apilevel-25.1.0
-- title: android.support.media.instantvideo
-  path: /reference/android/support/media/instantvideo/package-summary.html
-  status_text: apilevel-
-- title: android.support.media.instantvideo.preload
-  path: /reference/android/support/media/instantvideo/preload/package-summary.html
-  status_text: apilevel-26.0.0-alpha1
-- title: android.support.media.instantvideo.widget
-  path: /reference/android/support/media/instantvideo/widget/package-summary.html
-  status_text: apilevel-26.0.0-alpha1
-- title: android.support.media.tv
-  path: /reference/android/support/media/tv/package-summary.html
-  status_text: apilevel-26.0.0-alpha1
-- title: android.support.mediacompat
-  path: /reference/android/support/mediacompat/package-summary.html
-  status_text: apilevel-
-- title: android.support.multidex
-  path: /reference/android/support/multidex/package-summary.html
-  status_text: apilevel-
-- title: android.support.percent
-  path: /reference/android/support/percent/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.recommendation
-  path: /reference/android/support/recommendation/package-summary.html
-  status_text: apilevel-
-- title: android.support.transition
-  path: /reference/android/support/transition/package-summary.html
-  status_text: apilevel-24.2.0
-- title: android.support.v13
-  path: /reference/android/support/v13/package-summary.html
-  status_text: apilevel-
-- title: android.support.v13.app
-  path: /reference/android/support/v13/app/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v13.view
-  path: /reference/android/support/v13/view/package-summary.html
-  status_text: apilevel-24.0.0
-- title: android.support.v13.view.inputmethod
-  path: /reference/android/support/v13/view/inputmethod/package-summary.html
-  status_text: apilevel-25.0.0
-- title: android.support.v14.preference
-  path: /reference/android/support/v14/preference/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.v17.leanback
-  path: /reference/android/support/v17/leanback/package-summary.html
-  status_text: apilevel-
-- title: android.support.v17.leanback.app
-  path: /reference/android/support/v17/leanback/app/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v17.leanback.database
-  path: /reference/android/support/v17/leanback/database/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v17.leanback.graphics
-  path: /reference/android/support/v17/leanback/graphics/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v17.leanback.media
-  path: /reference/android/support/v17/leanback/media/package-summary.html
-  status_text: apilevel-25.1.0
-- title: android.support.v17.leanback.system
-  path: /reference/android/support/v17/leanback/system/package-summary.html
-  status_text: apilevel-22.2.1
-- title: android.support.v17.leanback.widget
-  path: /reference/android/support/v17/leanback/widget/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v17.leanback.widget.picker
-  path: /reference/android/support/v17/leanback/widget/picker/package-summary.html
-  status_text: apilevel-23.2.0
-- title: android.support.v17.preference
-  path: /reference/android/support/v17/preference/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.v4
-  path: /reference/android/support/v4/package-summary.html
-  status_text: apilevel-
-- title: android.support.v4.accessibilityservice
-  path: /reference/android/support/v4/accessibilityservice/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.app
-  path: /reference/android/support/v4/app/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.content
-  path: /reference/android/support/v4/content/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.content.pm
-  path: /reference/android/support/v4/content/pm/package-summary.html
-  status_text: apilevel-22.2.0
-- title: android.support.v4.content.res
-  path: /reference/android/support/v4/content/res/package-summary.html
-  status_text: apilevel-22.2.0
-- title: android.support.v4.database
-  path: /reference/android/support/v4/database/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.graphics
-  path: /reference/android/support/v4/graphics/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.graphics.drawable
-  path: /reference/android/support/v4/graphics/drawable/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.hardware.display
-  path: /reference/android/support/v4/hardware/display/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.hardware.fingerprint
-  path: /reference/android/support/v4/hardware/fingerprint/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.v4.math
-  path: /reference/android/support/v4/math/package-summary.html
-  status_text: apilevel-26.0.0-alpha1
-- title: android.support.v4.media
-  path: /reference/android/support/v4/media/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.media.session
-  path: /reference/android/support/v4/media/session/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.net
-  path: /reference/android/support/v4/net/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.os
-  path: /reference/android/support/v4/os/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.print
-  path: /reference/android/support/v4/print/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.provider
-  path: /reference/android/support/v4/provider/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.text
-  path: /reference/android/support/v4/text/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.text.util
-  path: /reference/android/support/v4/text/util/package-summary.html
-  status_text: apilevel-24.2.0
-- title: android.support.v4.util
-  path: /reference/android/support/v4/util/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.view
-  path: /reference/android/support/v4/view/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.view.accessibility
-  path: /reference/android/support/v4/view/accessibility/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v4.view.animation
-  path: /reference/android/support/v4/view/animation/package-summary.html
-  status_text: apilevel-22.1.0
-- title: android.support.v4.widget
-  path: /reference/android/support/v4/widget/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v7.app
-  path: /reference/android/support/v7/app/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v7.appcompat
-  path: /reference/android/support/v7/appcompat/package-summary.html
-  status_text: apilevel-22.2.0
-- title: android.support.v7.cardview
-  path: /reference/android/support/v7/cardview/package-summary.html
-  status_text: apilevel-
-- title: android.support.v7.content.res
-  path: /reference/android/support/v7/content/res/package-summary.html
-  status_text: apilevel-24.0.0
-- title: android.support.v7.graphics
-  path: /reference/android/support/v7/graphics/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v7.graphics.drawable
-  path: /reference/android/support/v7/graphics/drawable/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.v7.gridlayout
-  path: /reference/android/support/v7/gridlayout/package-summary.html
-  status_text: apilevel-
-- title: android.support.v7.media
-  path: /reference/android/support/v7/media/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v7.mediarouter
-  path: /reference/android/support/v7/mediarouter/package-summary.html
-  status_text: apilevel-
-- title: android.support.v7.palette
-  path: /reference/android/support/v7/palette/package-summary.html
-  status_text: apilevel-
-- title: android.support.v7.preference
-  path: /reference/android/support/v7/preference/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.v7.recyclerview
-  path: /reference/android/support/v7/recyclerview/package-summary.html
-  status_text: apilevel-22.2.0
-- title: android.support.v7.util
-  path: /reference/android/support/v7/util/package-summary.html
-  status_text: apilevel-22.1.0
-- title: android.support.v7.view
-  path: /reference/android/support/v7/view/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v7.widget
-  path: /reference/android/support/v7/widget/package-summary.html
-  status_text: apilevel-22.0.0
-- title: android.support.v7.widget.helper
-  path: /reference/android/support/v7/widget/helper/package-summary.html
-  status_text: apilevel-22.2.0
-- title: android.support.v7.widget.util
-  path: /reference/android/support/v7/widget/util/package-summary.html
-  status_text: apilevel-22.1.0
-- title: android.support.v8.renderscript
-  path: /reference/android/support/v8/renderscript/package-summary.html
-  status_text: apilevel-23.0.0
-- title: android.support.wearable
-  path: /reference/android/support/wearable/package-summary.html
-  status_text: apilevel-
-- title: android.support.wearable.view
-  path: /reference/android/support/wearable/view/package-summary.html
-  status_text: apilevel-26.0.0-alpha1
-- title: android.system
-  path: /reference/android/system/package-summary.html
-  status_text: apilevel-21
-- title: android.telecom
-  path: /reference/android/telecom/package-summary.html
-  status_text: apilevel-21
-- title: android.telephony
-  path: /reference/android/telephony/package-summary.html
-  status_text: apilevel-1
-- title: android.telephony.cdma
-  path: /reference/android/telephony/cdma/package-summary.html
-  status_text: apilevel-5
-- title: android.telephony.gsm
-  path: /reference/android/telephony/gsm/package-summary.html
-  status_text: apilevel-1
-- title: android.test
-  path: /reference/android/test/package-summary.html
-  status_text: apilevel-1
-- title: android.test.mock
-  path: /reference/android/test/mock/package-summary.html
-  status_text: apilevel-1
-- title: android.test.suitebuilder
-  path: /reference/android/test/suitebuilder/package-summary.html
-  status_text: apilevel-1
-- title: android.test.suitebuilder.annotation
-  path: /reference/android/test/suitebuilder/annotation/package-summary.html
-  status_text: apilevel-1
-- title: android.text
-  path: /reference/android/text/package-summary.html
-  status_text: apilevel-1
-- title: android.text.format
-  path: /reference/android/text/format/package-summary.html
-  status_text: apilevel-3
-- title: android.text.method
-  path: /reference/android/text/method/package-summary.html
-  status_text: apilevel-1
-- title: android.text.style
-  path: /reference/android/text/style/package-summary.html
-  status_text: apilevel-1
-- title: android.text.util
-  path: /reference/android/text/util/package-summary.html
-  status_text: apilevel-1
-- title: android.transition
-  path: /reference/android/transition/package-summary.html
-  status_text: apilevel-19
-- title: android.util
-  path: /reference/android/util/package-summary.html
-  status_text: apilevel-1
-- title: android.view
-  path: /reference/android/view/package-summary.html
-  status_text: apilevel-1
-- title: android.view.accessibility
-  path: /reference/android/view/accessibility/package-summary.html
-  status_text: apilevel-4
-- title: android.view.animation
-  path: /reference/android/view/animation/package-summary.html
-  status_text: apilevel-1
-- title: android.view.autofill
-  path: /reference/android/view/autofill/package-summary.html
-  status_text: apilevel-O
-- title: android.view.inputmethod
-  path: /reference/android/view/inputmethod/package-summary.html
-  status_text: apilevel-3
-- title: android.view.textclassifier
-  path: /reference/android/view/textclassifier/package-summary.html
-  status_text: apilevel-O
-- title: android.view.textservice
-  path: /reference/android/view/textservice/package-summary.html
-  status_text: apilevel-14
-- title: android.webkit
-  path: /reference/android/webkit/package-summary.html
-  status_text: apilevel-1
-- title: android.widget
-  path: /reference/android/widget/package-summary.html
-  status_text: apilevel-1
-- title: com.android.test.runner
-  path: /reference/com/android/test/runner/package-summary.html
-  status_text: apilevel-
-- title: dalvik.annotation
-  path: /reference/dalvik/annotation/package-summary.html
-  status_text: apilevel-1
-- title: dalvik.bytecode
-  path: /reference/dalvik/bytecode/package-summary.html
-  status_text: apilevel-1
-- title: dalvik.system
-  path: /reference/dalvik/system/package-summary.html
-  status_text: apilevel-1
-- title: java.awt.font
-  path: /reference/java/awt/font/package-summary.html
-  status_text: apilevel-1
-- title: java.beans
-  path: /reference/java/beans/package-summary.html
-  status_text: apilevel-3
-- title: java.io
-  path: /reference/java/io/package-summary.html
-  status_text: apilevel-1
-- title: java.lang
-  path: /reference/java/lang/package-summary.html
-  status_text: apilevel-1
-- title: java.lang.annotation
-  path: /reference/java/lang/annotation/package-summary.html
-  status_text: apilevel-1
-- title: java.lang.invoke
-  path: /reference/java/lang/invoke/package-summary.html
-  status_text: apilevel-O
-- title: java.lang.ref
-  path: /reference/java/lang/ref/package-summary.html
-  status_text: apilevel-1
-- title: java.lang.reflect
-  path: /reference/java/lang/reflect/package-summary.html
-  status_text: apilevel-1
-- title: java.math
-  path: /reference/java/math/package-summary.html
-  status_text: apilevel-1
-- title: java.net
-  path: /reference/java/net/package-summary.html
-  status_text: apilevel-1
-- title: java.nio
-  path: /reference/java/nio/package-summary.html
-  status_text: apilevel-1
-- title: java.nio.channels
-  path: /reference/java/nio/channels/package-summary.html
-  status_text: apilevel-1
-- title: java.nio.channels.spi
-  path: /reference/java/nio/channels/spi/package-summary.html
-  status_text: apilevel-1
-- title: java.nio.charset
-  path: /reference/java/nio/charset/package-summary.html
-  status_text: apilevel-1
-- title: java.nio.charset.spi
-  path: /reference/java/nio/charset/spi/package-summary.html
-  status_text: apilevel-1
-- title: java.nio.file
-  path: /reference/java/nio/file/package-summary.html
-  status_text: apilevel-O
-- title: java.nio.file.attribute
-  path: /reference/java/nio/file/attribute/package-summary.html
-  status_text: apilevel-O
-- title: java.nio.file.spi
-  path: /reference/java/nio/file/spi/package-summary.html
-  status_text: apilevel-O
-- title: java.security
-  path: /reference/java/security/package-summary.html
-  status_text: apilevel-1
-- title: java.security.acl
-  path: /reference/java/security/acl/package-summary.html
-  status_text: apilevel-1
-- title: java.security.cert
-  path: /reference/java/security/cert/package-summary.html
-  status_text: apilevel-1
-- title: java.security.interfaces
-  path: /reference/java/security/interfaces/package-summary.html
-  status_text: apilevel-1
-- title: java.security.spec
-  path: /reference/java/security/spec/package-summary.html
-  status_text: apilevel-1
-- title: java.sql
-  path: /reference/java/sql/package-summary.html
-  status_text: apilevel-1
-- title: java.text
-  path: /reference/java/text/package-summary.html
-  status_text: apilevel-1
-- title: java.time
-  path: /reference/java/time/package-summary.html
-  status_text: apilevel-O
-- title: java.time.chrono
-  path: /reference/java/time/chrono/package-summary.html
-  status_text: apilevel-O
-- title: java.time.format
-  path: /reference/java/time/format/package-summary.html
-  status_text: apilevel-O
-- title: java.time.temporal
-  path: /reference/java/time/temporal/package-summary.html
-  status_text: apilevel-O
-- title: java.time.zone
-  path: /reference/java/time/zone/package-summary.html
-  status_text: apilevel-O
-- title: java.util
-  path: /reference/java/util/package-summary.html
-  status_text: apilevel-1
-- title: java.util.concurrent
-  path: /reference/java/util/concurrent/package-summary.html
-  status_text: apilevel-1
-- title: java.util.concurrent.atomic
-  path: /reference/java/util/concurrent/atomic/package-summary.html
-  status_text: apilevel-1
-- title: java.util.concurrent.locks
-  path: /reference/java/util/concurrent/locks/package-summary.html
-  status_text: apilevel-1
-- title: java.util.function
-  path: /reference/java/util/function/package-summary.html
-  status_text: apilevel-24
-- title: java.util.jar
-  path: /reference/java/util/jar/package-summary.html
-  status_text: apilevel-1
-- title: java.util.logging
-  path: /reference/java/util/logging/package-summary.html
-  status_text: apilevel-1
-- title: java.util.prefs
-  path: /reference/java/util/prefs/package-summary.html
-  status_text: apilevel-1
-- title: java.util.regex
-  path: /reference/java/util/regex/package-summary.html
-  status_text: apilevel-1
-- title: java.util.stream
-  path: /reference/java/util/stream/package-summary.html
-  status_text: apilevel-24
-- title: java.util.zip
-  path: /reference/java/util/zip/package-summary.html
-  status_text: apilevel-1
-- title: javax.crypto
-  path: /reference/javax/crypto/package-summary.html
-  status_text: apilevel-1
-- title: javax.crypto.interfaces
-  path: /reference/javax/crypto/interfaces/package-summary.html
-  status_text: apilevel-1
-- title: javax.crypto.spec
-  path: /reference/javax/crypto/spec/package-summary.html
-  status_text: apilevel-1
-- title: javax.microedition.khronos.egl
-  path: /reference/javax/microedition/khronos/egl/package-summary.html
-  status_text: apilevel-1
-- title: javax.microedition.khronos.opengles
-  path: /reference/javax/microedition/khronos/opengles/package-summary.html
-  status_text: apilevel-1
-- title: javax.net
-  path: /reference/javax/net/package-summary.html
-  status_text: apilevel-1
-- title: javax.net.ssl
-  path: /reference/javax/net/ssl/package-summary.html
-  status_text: apilevel-1
-- title: javax.security.auth
-  path: /reference/javax/security/auth/package-summary.html
-  status_text: apilevel-1
-- title: javax.security.auth.callback
-  path: /reference/javax/security/auth/callback/package-summary.html
-  status_text: apilevel-1
-- title: javax.security.auth.login
-  path: /reference/javax/security/auth/login/package-summary.html
-  status_text: apilevel-1
-- title: javax.security.auth.x500
-  path: /reference/javax/security/auth/x500/package-summary.html
-  status_text: apilevel-1
-- title: javax.security.cert
-  path: /reference/javax/security/cert/package-summary.html
-  status_text: apilevel-1
-- title: javax.sql
-  path: /reference/javax/sql/package-summary.html
-  status_text: apilevel-1
-- title: javax.xml
-  path: /reference/javax/xml/package-summary.html
-  status_text: apilevel-1
-- title: javax.xml.datatype
-  path: /reference/javax/xml/datatype/package-summary.html
-  status_text: apilevel-8
-- title: javax.xml.namespace
-  path: /reference/javax/xml/namespace/package-summary.html
-  status_text: apilevel-8
-- title: javax.xml.parsers
-  path: /reference/javax/xml/parsers/package-summary.html
-  status_text: apilevel-1
-- title: javax.xml.transform
-  path: /reference/javax/xml/transform/package-summary.html
-  status_text: apilevel-8
-- title: javax.xml.transform.dom
-  path: /reference/javax/xml/transform/dom/package-summary.html
-  status_text: apilevel-8
-- title: javax.xml.transform.sax
-  path: /reference/javax/xml/transform/sax/package-summary.html
-  status_text: apilevel-8
-- title: javax.xml.transform.stream
-  path: /reference/javax/xml/transform/stream/package-summary.html
-  status_text: apilevel-8
-- title: javax.xml.validation
-  path: /reference/javax/xml/validation/package-summary.html
-  status_text: apilevel-8
-- title: javax.xml.xpath
-  path: /reference/javax/xml/xpath/package-summary.html
-  status_text: apilevel-8
-- title: junit.framework
-  path: /reference/junit/framework/package-summary.html
-  status_text: apilevel-1
-- title: junit.runner
-  path: /reference/junit/runner/package-summary.html
-  status_text: apilevel-1
-- title: org.apache.http.conn
-  path: /reference/org/apache/http/conn/package-summary.html
-  status_text: apilevel-1
-- title: org.apache.http.conn.scheme
-  path: /reference/org/apache/http/conn/scheme/package-summary.html
-  status_text: apilevel-1
-- title: org.apache.http.conn.ssl
-  path: /reference/org/apache/http/conn/ssl/package-summary.html
-  status_text: apilevel-1
-- title: org.apache.http.params
-  path: /reference/org/apache/http/params/package-summary.html
-  status_text: apilevel-1
-- title: org.json
-  path: /reference/org/json/package-summary.html
-  status_text: apilevel-1
-- title: org.w3c.dom
-  path: /reference/org/w3c/dom/package-summary.html
-  status_text: apilevel-1
-- title: org.w3c.dom.ls
-  path: /reference/org/w3c/dom/ls/package-summary.html
-  status_text: apilevel-8
-- title: org.xml.sax
-  path: /reference/org/xml/sax/package-summary.html
-  status_text: apilevel-1
-- title: org.xml.sax.ext
-  path: /reference/org/xml/sax/ext/package-summary.html
-  status_text: apilevel-1
-- title: org.xml.sax.helpers
-  path: /reference/org/xml/sax/helpers/package-summary.html
-  status_text: apilevel-1
-- title: org.xmlpull.v1
-  path: /reference/org/xmlpull/v1/package-summary.html
-  status_text: apilevel-1
-- title: org.xmlpull.v1.sax2
-  path: /reference/org/xmlpull/v1/sax2/package-summary.html
-  status_text: apilevel-1
diff --git a/docs/html/reference/_project.yaml b/docs/html/reference/_project.yaml
deleted file mode 100644
index e5c26e7..0000000
--- a/docs/html/reference/_project.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: "Reference"
-home_url: /reference/
-description: "API Reference packages and classes."
-content_license: cc3-apache2
-buganizer_id: 30209417
-parent_project_metadata_path: /develop/_project.yaml
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
index 3c0b226..894ea62 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
@@ -114,6 +114,10 @@
         return mVisibility != null ? mVisibility : View.VISIBLE;
     }
 
+    public boolean isVisible() {
+        return getVisibility() == View.VISIBLE;
+    }
+
     public float getAlpha() {
         return mAlpha != null ? mAlpha : 1;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 6c66cab..0fd8df0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -336,13 +336,14 @@
                 int x = (int) event.getX();
                 int y = (int) event.getY();
                 mDownHitTarget = HIT_TARGET_NONE;
-                if (mBackButtonBounds.contains(x, y)) {
+                if (getBackButton().isVisible() && mBackButtonBounds.contains(x, y)) {
                     mDownHitTarget = HIT_TARGET_BACK;
-                } else if (mHomeButtonBounds.contains(x, y)) {
+                } else if (getHomeButton().isVisible() && mHomeButtonBounds.contains(x, y)) {
                     mDownHitTarget = HIT_TARGET_HOME;
-                } else if (mRecentsButtonBounds.contains(x, y)) {
+                } else if (getRecentsButton().isVisible() && mRecentsButtonBounds.contains(x, y)) {
                     mDownHitTarget = HIT_TARGET_OVERVIEW;
-                } else if (mRotationButtonBounds.contains(x, y)) {
+                } else if (getRotateSuggestionButton().isVisible()
+                        && mRotationButtonBounds.contains(x, y)) {
                     mDownHitTarget = HIT_TARGET_ROTATION;
                 }
                 break;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index c25f8ff..e95a932 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -15305,6 +15305,7 @@
                         public void onLimitReached(int uid) {
                             Slog.wtf(TAG, "Uid " + uid + " sent too many Binders to uid "
                                     + Process.myUid());
+                            Binder.dumpProxyDebugInfo();
                             if (uid == Process.SYSTEM_UID) {
                                 Slog.i(TAG, "Skipping kill (uid is SYSTEM)");
                             } else {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 16f4585..d456f62 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -2413,11 +2413,16 @@
         }
 
         // Compute configuration based on max supported width and height.
-        outBounds.set(0, 0, maxActivityWidth, maxActivityHeight);
-        // Position the activity frame on the opposite side of the nav bar.
-        final int navBarPosition = service.mWindowManager.getNavBarPosition();
-        final int left = navBarPosition == NAV_BAR_LEFT ? appBounds.right - outBounds.width() : 0;
-        outBounds.offsetTo(left, 0 /* top */);
+        // Also account for the left / top insets (e.g. from display cutouts), which will be clipped
+        // away later in StackWindowController.adjustConfigurationForBounds(). Otherwise, the app
+        // bounds would end up too small.
+        outBounds.set(0, 0, maxActivityWidth + appBounds.left, maxActivityHeight + appBounds.top);
+
+        if (service.mWindowManager.getNavBarPosition() == NAV_BAR_LEFT) {
+            // Position the activity frame on the opposite side of the nav bar.
+            outBounds.left = appBounds.right - maxActivityWidth;
+            outBounds.right = appBounds.right;
+        }
     }
 
     boolean ensureActivityConfiguration(int globalChanges, boolean preserveWindow) {
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index 4e6307d..0f8c526 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -1015,26 +1015,25 @@
             locationListener = mFusedLocationListener;
         }
 
-        if (!locationManager.isProviderEnabled(provider)) {
-            Log.w(TAG, "Unable to request location since " + provider
-                    + " provider does not exist or is not enabled.");
-            return;
-        }
-
         Log.i(TAG,
                 String.format(
                         "GNSS HAL Requesting location updates from %s provider for %d millis.",
                         provider, durationMillis));
-        locationManager.requestLocationUpdates(provider,
-                LOCATION_UPDATE_MIN_TIME_INTERVAL_MILLIS, /*minDistance=*/ 0,
-                locationListener, mHandler.getLooper());
-        locationListener.numLocationUpdateRequest++;
-        mHandler.postDelayed(() -> {
-            if (--locationListener.numLocationUpdateRequest == 0) {
-                Log.i(TAG, String.format("Removing location updates from %s provider.", provider));
-                locationManager.removeUpdates(locationListener);
-            }
-        }, durationMillis);
+        try {
+            locationManager.requestLocationUpdates(provider,
+                    LOCATION_UPDATE_MIN_TIME_INTERVAL_MILLIS, /*minDistance=*/ 0,
+                    locationListener, mHandler.getLooper());
+            locationListener.numLocationUpdateRequest++;
+            mHandler.postDelayed(() -> {
+                if (--locationListener.numLocationUpdateRequest == 0) {
+                    Log.i(TAG,
+                            String.format("Removing location updates from %s provider.", provider));
+                    locationManager.removeUpdates(locationListener);
+                }
+            }, durationMillis);
+        } catch (IllegalArgumentException e) {
+            Log.w(TAG, "Unable to request location.", e);
+        }
     }
 
     private void injectBestLocation(Location location) {
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index a735297b..7ffd5ed 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -6161,7 +6161,9 @@
                     sendSystemKeyToStatusBarAsync(event.getKeyCode());
 
                     TelecomManager telecomManager = getTelecommService();
-                    if (telecomManager != null) {
+                    if (telecomManager != null && !mHandleVolumeKeysInWM) {
+                        // When {@link #mHandleVolumeKeysInWM} is set, volume key events
+                        // should be dispatched to WM.
                         if (telecomManager.isRinging()) {
                             // If an incoming call is ringing, either VOLUME key means
                             // "silence ringer".  We handle these keys here, rather than