Merge "Fix NPE in PermsissionChecker" into sc-dev
diff --git a/core/api/current.txt b/core/api/current.txt
index dc0f972..a30191c 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -52923,8 +52923,9 @@
 
   public static final class ViewTranslationRequest.Builder {
     ctor public ViewTranslationRequest.Builder(@NonNull android.view.autofill.AutofillId);
+    ctor public ViewTranslationRequest.Builder(@NonNull android.view.autofill.AutofillId, long);
     method @NonNull public android.view.translation.ViewTranslationRequest build();
-    method public android.view.translation.ViewTranslationRequest.Builder setValue(String, android.view.translation.TranslationRequestValue);
+    method @NonNull public android.view.translation.ViewTranslationRequest.Builder setValue(@NonNull String, @NonNull android.view.translation.TranslationRequestValue);
   }
 
   public final class ViewTranslationResponse implements android.os.Parcelable {
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 4fa1dba..2d9c668 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -14752,7 +14752,7 @@
     method public default boolean onCheckIsTextEditor();
     method public void onConfigurationChanged(android.content.res.Configuration);
     method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo);
-    method @Nullable public default void onCreateTranslationRequests(@NonNull long[], @NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>);
+    method public default void onCreateTranslationRequests(@NonNull long[], @NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>);
     method public void onDetachedFromWindow();
     method public boolean onDragEvent(android.view.DragEvent);
     method public void onDraw(android.graphics.Canvas);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 61d74a4..fd3254e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -30759,10 +30759,11 @@
      * view.
      * @param supportedFormats the supported translation formats. For now, the only possible value
      * is the {@link android.view.translation.TranslationSpec#DATA_FORMAT_TEXT}.
-     * @param requestsCollector a {@link ViewTranslationRequest} collector that will be called
+     * @param requestsCollector a {@link ViewTranslationRequest} collector that can be called
      * multiple times to collect the information to be translated in the virtual view. One
      * {@link ViewTranslationRequest} per virtual child. The {@link ViewTranslationRequest} must
-     * contains the {@link AutofillId} corresponding to the virtualChildIds.
+     * contains the {@link AutofillId} corresponding to the virtualChildIds. Do not keep this
+     * Consumer after the method returns.
      */
     @SuppressLint("NullableCollection")
     public void onCreateTranslationRequests(@NonNull long[] virtualChildIds,
@@ -30835,7 +30836,7 @@
      * ui translation, the system will call this method to traverse the view hierarchy to call
      * {@link View#onCreateTranslationRequest} to build {@link ViewTranslationRequest}s and create a
      * {@link android.view.translation.Translator} to translate the requests. All the
-     * {@link ViewTranslationRequest}s will be added when the traversal is done.
+     * {@link ViewTranslationRequest}s must be added when the traversal is done.
      *
      * <p> The default implementation will call {@link View#onCreateTranslationRequest} to build
      * {@link ViewTranslationRequest} if the view should be translated. </p>
diff --git a/core/java/android/view/translation/UiTranslationController.java b/core/java/android/view/translation/UiTranslationController.java
index 0fa6e16..7d1df9c 100644
--- a/core/java/android/view/translation/UiTranslationController.java
+++ b/core/java/android/view/translation/UiTranslationController.java
@@ -30,6 +30,7 @@
 import android.os.HandlerThread;
 import android.os.Process;
 import android.util.ArrayMap;
+import android.util.IntArray;
 import android.util.Log;
 import android.util.LongSparseArray;
 import android.util.Pair;
@@ -241,13 +242,11 @@
         final SparseArray<ViewTranslationResponse> viewsResult = new SparseArray<>();
         final SparseArray<LongSparseArray<ViewTranslationResponse>> virtualViewsResult =
                 new SparseArray<>();
-        // TODO: use another structure to prevent autoboxing?
-        final List<Integer> viewIds = new ArrayList<>();
-
+        final IntArray viewIds = new IntArray(1);
         for (int i = 0; i < translatedResult.size(); i++) {
             final ViewTranslationResponse result = translatedResult.valueAt(i);
             final AutofillId autofillId = result.getAutofillId();
-            if (!viewIds.contains(autofillId.getViewId())) {
+            if (viewIds.indexOf(autofillId.getViewId()) < 0) {
                 viewIds.add(autofillId.getViewId());
             }
             if (autofillId.isNonVirtual()) {
@@ -405,23 +404,29 @@
             // Filter the request views's AutofillId
             SparseIntArray virtualViewChildCount = getRequestVirtualViewChildCount(views);
             Map<AutofillId, long[]> viewIds = new ArrayMap<>();
+            Map<AutofillId, Integer> unusedIndices = null;
             for (int i = 0; i < views.size(); i++) {
                 AutofillId autofillId = views.get(i);
                 if (autofillId.isNonVirtual()) {
                     viewIds.put(autofillId, null);
                 } else {
+                    if (unusedIndices == null) {
+                        unusedIndices = new ArrayMap<>();
+                    }
                     // The virtual id get from content capture is long, see getVirtualChildLongId()
                     // e.g. 1001, 1001:2, 1002:1 -> 1001, <1,2>; 1002, <1>
                     AutofillId virtualViewAutofillId = new AutofillId(autofillId.getViewId());
                     long[] childs;
+                    int end = 0;
                     if (viewIds.containsKey(virtualViewAutofillId)) {
                         childs = viewIds.get(virtualViewAutofillId);
+                        end = unusedIndices.get(virtualViewAutofillId);
                     } else {
                         int childCount = virtualViewChildCount.get(autofillId.getViewId());
                         childs = new long[childCount];
                         viewIds.put(virtualViewAutofillId, childs);
                     }
-                    int end = childs.length - 1;
+                    unusedIndices.put(virtualViewAutofillId, end + 1);
                     childs[end] = autofillId.getVirtualChildLongId();
                 }
             }
@@ -465,7 +470,7 @@
         return new int[] {TranslationSpec.DATA_FORMAT_TEXT};
     }
 
-    private void findViewsTraversalByAutofillIds(List<Integer> sourceViewIds) {
+    private void findViewsTraversalByAutofillIds(IntArray sourceViewIds) {
         final ArrayList<ViewRootImpl> roots =
                 WindowManagerGlobal.getInstance().getRootViews(mActivity.getActivityToken());
         for (int rootNum = 0; rootNum < roots.size(); rootNum++) {
@@ -479,7 +484,7 @@
     }
 
     private void findViewsTraversalByAutofillIds(ViewGroup viewGroup,
-            List<Integer> sourceViewIds) {
+            IntArray sourceViewIds) {
         final int childCount = viewGroup.getChildCount();
         for (int i = 0; i < childCount; ++i) {
             final View child = viewGroup.getChildAt(i);
@@ -491,9 +496,10 @@
         }
     }
 
-    private void addViewIfNeeded(List<Integer> sourceViewIds, View view) {
+    private void addViewIfNeeded(IntArray sourceViewIds, View view) {
         final AutofillId autofillId = view.getAutofillId();
-        if (sourceViewIds.contains(autofillId.getViewId()) && !mViews.containsKey(autofillId)) {
+        if ((sourceViewIds.indexOf(autofillId.getViewId()) >= 0)
+                && !mViews.containsKey(autofillId)) {
             mViews.put(autofillId, new WeakReference<>(view));
         }
     }
diff --git a/core/java/android/view/translation/ViewTranslationRequest.java b/core/java/android/view/translation/ViewTranslationRequest.java
index 180b1c2..4d8fb99 100644
--- a/core/java/android/view/translation/ViewTranslationRequest.java
+++ b/core/java/android/view/translation/ViewTranslationRequest.java
@@ -35,7 +35,8 @@
  * Wrapper class representing a translation request associated with a {@link android.view.View} to
  * be used by {@link android.service.translation.TranslationService}.
  */
-@DataClass(genBuilder = true, genToString = true, genEqualsHashCode = true, genGetters = false)
+@DataClass(genBuilder = false, genToString = true, genEqualsHashCode = true, genGetters = false,
+        genHiddenConstructor = true)
 public final class ViewTranslationRequest implements Parcelable {
 
     /**
@@ -91,10 +92,39 @@
         return Collections.emptyMap();
     }
 
-    @DataClass.Suppress({"addTranslationRequestValue", "setAutofillId"})
-    abstract static class BaseBuilder {
+    /**
+     * A builder for building ViewTranslationRequest.
+     */
+    public static final class Builder {
 
-        abstract Builder setTranslationRequestValues(Map<String, TranslationRequestValue> value);
+        private @NonNull AutofillId mAutofillId;
+        private @NonNull Map<String, TranslationRequestValue> mTranslationRequestValues;
+
+        private long mBuilderFieldsSet = 0L;
+
+        /**
+         * Creates a new Builder.
+         *
+         * @param autofillId The {@link AutofillId} of the view associated with this request.
+         */
+        public Builder(@NonNull AutofillId autofillId) {
+            mAutofillId = autofillId;
+            com.android.internal.util.AnnotationValidations.validate(
+                    NonNull.class, null, mAutofillId);
+        }
+
+        /**
+         * Creates a new Builder.
+         *
+         * @param autofillId the {@link AutofillId} of the non-virtual view hosting the virtual view
+         * hierarchy associated with this request.
+        * @param virtualChildId the id of the virtual child, relative to the parent.
+         */
+        public Builder(@NonNull AutofillId autofillId, long virtualChildId) {
+            mAutofillId = new AutofillId(autofillId, virtualChildId, AutofillId.NO_SESSION);
+            com.android.internal.util.AnnotationValidations.validate(
+                    NonNull.class, null, mAutofillId);
+        }
 
         /**
          * Sets the corresponding {@link TranslationRequestValue} for the provided key.
@@ -104,20 +134,50 @@
          * @return this builder.
          */
         @SuppressLint("MissingGetterMatchingBuilder")
-        public Builder setValue(String key,
-                TranslationRequestValue value) {
-            final Builder builder = (Builder) this;
-            if (builder.mTranslationRequestValues == null) {
+        @NonNull
+        public Builder setValue(@NonNull String key, @NonNull TranslationRequestValue value) {
+            if (mTranslationRequestValues == null) {
                 setTranslationRequestValues(new ArrayMap<>());
             }
-            builder.mTranslationRequestValues.put(key, value);
-            return builder;
+            mTranslationRequestValues.put(key, value);
+            return this;
+        }
+
+        /**
+         * Builds the instance. This builder should not be touched after calling this!
+         */
+        @NonNull
+        public ViewTranslationRequest build() {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x4; // Mark builder used
+
+            if ((mBuilderFieldsSet & 0x2) == 0) {
+                mTranslationRequestValues = defaultTranslationRequestValues();
+            }
+            ViewTranslationRequest o = new ViewTranslationRequest(
+                    mAutofillId,
+                    mTranslationRequestValues);
+            return o;
+        }
+
+        Builder setTranslationRequestValues(@NonNull Map<String, TranslationRequestValue> value) {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x2;
+            mTranslationRequestValues = value;
+            return this;
+        }
+
+        private void checkNotUsed() {
+            if ((mBuilderFieldsSet & 0x4) != 0) {
+                throw new IllegalStateException(
+                        "This Builder should not be reused. Use a new Builder instance instead");
+            }
         }
     }
 
 
 
-    // Code below generated by codegen v1.0.22.
+    // Code below generated by codegen v1.0.23.
     //
     // DO NOT MODIFY!
     // CHECKSTYLE:OFF Generated code
@@ -130,8 +190,15 @@
     //@formatter:off
 
 
+    /**
+     * Creates a new ViewTranslationRequest.
+     *
+     * @param autofillId
+     *   The {@link AutofillId} of the view associated with this request.
+     * @hide
+     */
     @DataClass.Generated.Member
-    /* package-private */ ViewTranslationRequest(
+    public ViewTranslationRequest(
             @NonNull AutofillId autofillId,
             @NonNull Map<String,TranslationRequestValue> translationRequestValues) {
         this.mAutofillId = autofillId;
@@ -234,67 +301,11 @@
         }
     };
 
-    /**
-     * A builder for {@link ViewTranslationRequest}
-     */
-    @SuppressWarnings("WeakerAccess")
-    @DataClass.Generated.Member
-    public static final class Builder extends BaseBuilder {
-
-        private @NonNull AutofillId mAutofillId;
-        private @NonNull Map<String,TranslationRequestValue> mTranslationRequestValues;
-
-        private long mBuilderFieldsSet = 0L;
-
-        /**
-         * Creates a new Builder.
-         *
-         * @param autofillId
-         *   The {@link AutofillId} of the view associated with this request.
-         */
-        public Builder(
-                @NonNull AutofillId autofillId) {
-            mAutofillId = autofillId;
-            com.android.internal.util.AnnotationValidations.validate(
-                    NonNull.class, null, mAutofillId);
-        }
-
-        @DataClass.Generated.Member
-        @Override
-        @NonNull Builder setTranslationRequestValues(@NonNull Map<String,TranslationRequestValue> value) {
-            checkNotUsed();
-            mBuilderFieldsSet |= 0x2;
-            mTranslationRequestValues = value;
-            return this;
-        }
-
-        /** Builds the instance. This builder should not be touched after calling this! */
-        public @NonNull ViewTranslationRequest build() {
-            checkNotUsed();
-            mBuilderFieldsSet |= 0x4; // Mark builder used
-
-            if ((mBuilderFieldsSet & 0x2) == 0) {
-                mTranslationRequestValues = defaultTranslationRequestValues();
-            }
-            ViewTranslationRequest o = new ViewTranslationRequest(
-                    mAutofillId,
-                    mTranslationRequestValues);
-            return o;
-        }
-
-        private void checkNotUsed() {
-            if ((mBuilderFieldsSet & 0x4) != 0) {
-                throw new IllegalStateException(
-                        "This Builder should not be reused. Use a new Builder instance instead");
-            }
-        }
-    }
-
     @DataClass.Generated(
-            time = 1614992269658L,
-            codegenVersion = "1.0.22",
+            time = 1617119791798L,
+            codegenVersion = "1.0.23",
             sourceFile = "frameworks/base/core/java/android/view/translation/ViewTranslationRequest.java",
-            inputSignatures = "public static final  java.lang.String ID_TEXT\nprivate final @android.annotation.NonNull android.view.autofill.AutofillId mAutofillId\nprivate final @android.annotation.NonNull @com.android.internal.util.DataClass.PluralOf(\"translationRequestValue\") java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> mTranslationRequestValues\npublic @android.annotation.NonNull android.view.translation.TranslationRequestValue getValue(java.lang.String)\npublic @android.annotation.NonNull java.util.Set<java.lang.String> getKeys()\npublic @android.annotation.NonNull android.view.autofill.AutofillId getAutofillId()\nprivate static  java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> defaultTranslationRequestValues()\nclass ViewTranslationRequest extends java.lang.Object implements [android.os.Parcelable]\nabstract  android.view.translation.ViewTranslationRequest.Builder setTranslationRequestValues(java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue>)\npublic @android.annotation.SuppressLint android.view.translation.ViewTranslationRequest.Builder setValue(java.lang.String,android.view.translation.TranslationRequestValue)\nclass BaseBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=true, genToString=true, genEqualsHashCode=true, genGetters=false)\nabstract  android.view.translation.ViewTranslationRequest.Builder setTranslationRequestValues(java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue>)\npublic @android.annotation.SuppressLint android.view.translation.ViewTranslationRequest.Builder setValue(java.lang.String,android.view.translation.TranslationRequestValue)\nclass BaseBuilder extends java.lang.Object implements []")
+            inputSignatures = "public static final  java.lang.String ID_TEXT\nprivate final @android.annotation.NonNull android.view.autofill.AutofillId mAutofillId\nprivate final @android.annotation.NonNull @com.android.internal.util.DataClass.PluralOf(\"translationRequestValue\") java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> mTranslationRequestValues\npublic @android.annotation.NonNull android.view.translation.TranslationRequestValue getValue(java.lang.String)\npublic @android.annotation.NonNull java.util.Set<java.lang.String> getKeys()\npublic @android.annotation.NonNull android.view.autofill.AutofillId getAutofillId()\nprivate static  java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> defaultTranslationRequestValues()\nclass ViewTranslationRequest extends java.lang.Object implements [android.os.Parcelable]\nprivate @android.annotation.NonNull android.view.autofill.AutofillId mAutofillId\nprivate @android.annotation.NonNull java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue> mTranslationRequestValues\nprivate  long mBuilderFieldsSet\npublic @android.annotation.SuppressLint @android.annotation.NonNull android.view.translation.ViewTranslationRequest.Builder setValue(java.lang.String,android.view.translation.TranslationRequestValue)\npublic @android.annotation.NonNull android.view.translation.ViewTranslationRequest build()\n  android.view.translation.ViewTranslationRequest.Builder setTranslationRequestValues(java.util.Map<java.lang.String,android.view.translation.TranslationRequestValue>)\nprivate  void checkNotUsed()\nclass Builder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=false, genToString=true, genEqualsHashCode=true, genGetters=false, genHiddenConstructor=true)")
     @Deprecated
     private void __metadata() {}
 
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index 2647360..770a156 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -365,7 +365,6 @@
         }
 
         @SuppressLint("NullableCollection")
-        @Nullable
         default void onCreateTranslationRequests(
                 @NonNull @SuppressWarnings("unused") long[] virtualChildIds,
                 @NonNull @SuppressWarnings("unused") @DataFormat int[] supportedFormats,
diff --git a/packages/Shell/res/values-iw/strings.xml b/packages/Shell/res/values-iw/strings.xml
index c99e69e..ade92db 100644
--- a/packages/Shell/res/values-iw/strings.xml
+++ b/packages/Shell/res/values-iw/strings.xml
@@ -18,18 +18,18 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="3701846017049540910">"מעטפת"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"דוחות על באגים"</string>
-    <string name="bugreport_in_progress_title" msgid="4311705936714972757">"יצירת הדוח על הבאג <xliff:g id="ID">#%d</xliff:g> מתבצעת"</string>
+    <string name="bugreport_in_progress_title" msgid="4311705936714972757">"בתהליך יצירה של דוח על באג (<xliff:g id="ID">#%d</xliff:g>)"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"הדוח על הבאג <xliff:g id="ID">#%d</xliff:g> צולם"</string>
-    <string name="bugreport_updating_title" msgid="4423539949559634214">"מוסיף פרטים לדוח על הבאג"</string>
+    <string name="bugreport_updating_title" msgid="4423539949559634214">"בתהליך הוספת פרטים לדוח על הבאג"</string>
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"המתן…"</string>
     <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"הדוח על הבאג יופיע בטלפון בקרוב"</string>
-    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"הקש כדי לשתף את הדוח על הבאג"</string>
+    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"יש להקיש כדי לשתף את הדוח על הבאג"</string>
     <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"הקש כדי לשתף את הדוח על הבאג"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"החלק ימינה כדי לשתף את הדוח על הבאג ללא צילום מסך או המתן להשלמת צילום המסך"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"הקש כדי לשתף את הדוח על הבאג ללא צילום מסך, או המתן להשלמת צילום המסך"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"הקש כדי לשתף את הדוח על הבאג ללא צילום מסך, או המתן להשלמת צילום המסך"</string>
-    <string name="bugreport_confirm" msgid="5917407234515812495">"דוחות על באגים כוללים נתונים מקובצי היומן השונים במערכת, שעשויים לכלול נתונים הנחשבים רגישים (כגון שימוש באפליקציות ונתוני מיקום). שתף דוחות על באגים רק עם אפליקציות ואנשים שאתה סומך עליהם."</string>
-    <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"אל תציג שוב"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"יש להקיש כדי לשתף את הדוח על הבאג ללא צילום מסך, או להמתין להשלמת צילום המסך"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"יש להקיש כדי לשתף את הדוח על הבאג ללא צילום מסך, או להמתין להשלמת צילום המסך"</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"דוחות על באגים כוללים נתונים מקובצי היומן השונים במערכת, שעשויים לכלול נתונים הנחשבים רגישים (כגון שימוש באפליקציות ונתוני מיקום). כדאי לשתף דוחות על באגים רק עם אפליקציות ואנשים מהימנים."</string>
+    <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"אל תציגו זאת שוב"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"דוחות באגים"</string>
     <string name="bugreport_unreadable_text" msgid="586517851044535486">"לא ניתן היה לקרוא את קובץ הדוח על הבאג"</string>
     <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"‏לא ניתן היה להוסיף את פרטי הדוח על הבאג לקובץ ה-zip"</string>
@@ -38,7 +38,7 @@
     <string name="bugreport_screenshot_action" msgid="8677781721940614995">"צילום מסך"</string>
     <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"צילום המסך בוצע בהצלחה."</string>
     <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"לא ניתן היה לצלם מסך."</string>
-    <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"פרטי הדוח על הבאג <xliff:g id="ID">#%d</xliff:g>"</string>
+    <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"פרטי הדוח על הבאג (<xliff:g id="ID">#%d</xliff:g>)"</string>
     <string name="bugreport_info_name" msgid="4414036021935139527">"שם קובץ"</string>
     <string name="bugreport_info_title" msgid="2306030793918239804">"כותרת הבאג"</string>
     <string name="bugreport_info_description" msgid="5072835127481627722">"סיכום הבאג"</string>
diff --git a/packages/Shell/res/values-nl/strings.xml b/packages/Shell/res/values-nl/strings.xml
index 3868f4a..dadf9fa 100644
--- a/packages/Shell/res/values-nl/strings.xml
+++ b/packages/Shell/res/values-nl/strings.xml
@@ -22,14 +22,14 @@
     <string name="bugreport_finished_title" msgid="4429132808670114081">"Bugrapport <xliff:g id="ID">#%d</xliff:g> is vastgelegd"</string>
     <string name="bugreport_updating_title" msgid="4423539949559634214">"Details toevoegen aan het bugrapport"</string>
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"Even geduld…"</string>
-    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Het bugrapport wordt over enkele ogenblikken op de telefoon weergegeven"</string>
+    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Het bugrapport zie je over enkele ogenblikken op de telefoon"</string>
     <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"Selecteer dit om je bugrapport te delen"</string>
     <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"Tik om je bugrapport te delen"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"Selecteer dit om je bugrapport te delen zonder screenshot of wacht tot het screenshot is voltooid"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"Tik om je bugrapport te delen zonder screenshot of wacht tot het screenshot is voltooid"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"Tik om je bugrapport te delen zonder screenshot of wacht tot het screenshot is voltooid"</string>
     <string name="bugreport_confirm" msgid="5917407234515812495">"Bugrapporten bevatten gegevens uit de verschillende logbestanden van het systeem, die gegevens kunnen bevatten die je als gevoelig beschouwt (zoals gegevens met betrekking tot app-gebruik en locatie). Deel bugrapporten alleen met mensen en apps die je vertrouwt."</string>
-    <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"Niet opnieuw weergeven"</string>
+    <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"Niet opnieuw tonen"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Bugrapporten"</string>
     <string name="bugreport_unreadable_text" msgid="586517851044535486">"Bestand met bugrapport kan niet worden gelezen"</string>
     <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"Kan details van bugrapport niet toevoegen aan zip-bestand"</string>
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index de3e122..f3e6428 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -6326,8 +6326,8 @@
     // Request used to optionally keep vehicle internal network always active
     private final NetworkRequest mDefaultVehicleRequest;
 
-    // TODO replace with INetd.DUMMY_NET_ID when available.
-    private static final int NO_SERVICE_NET_ID = 51;
+    // TODO replace with INetd.UNREACHABLE_NET_ID when available.
+    private static final int NO_SERVICE_NET_ID = 52;
     // Sentinel NAI used to direct apps with default networks that should have no connectivity to a
     // network with no service. This NAI should never be matched against, nor should any public API
     // ever return the associated network. For this reason, this NAI is not in the list of available