Merge "NOT NULL constraint by @NonNull" into oc-support-26.0-dev am: 4a16fdef70
am: 6c72e20a6c

Change-Id: Ic5794fc799e1809e63fe67c17efb814fd3435807
diff --git a/api/26.0.0-SNAPSHOT.txt b/api/26.0.0-SNAPSHOT.txt
index fe0c575..13c52ca 100644
--- a/api/26.0.0-SNAPSHOT.txt
+++ b/api/26.0.0-SNAPSHOT.txt
@@ -233,6 +233,60 @@
 
 }
 
+package android.support.content {
+
+  public class ContentPager {
+    ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner);
+    ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner, int);
+    method public static android.os.Bundle createArgs(int, int);
+    method public android.support.content.Query query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal, android.support.content.ContentPager.ContentCallback);
+    method public void reset();
+    field public static final int CURSOR_DISPOSITION_COPIED = 1; // 0x1
+    field public static final int CURSOR_DISPOSITION_PAGED = 2; // 0x2
+    field public static final int CURSOR_DISPOSITION_REPAGED = 3; // 0x3
+    field public static final int CURSOR_DISPOSITION_WRAPPED = 4; // 0x4
+    field public static final java.lang.String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
+    field public static final java.lang.String EXTRA_REQUESTED_LIMIT = "android-support:extra-ignored-limit";
+    field public static final java.lang.String EXTRA_SUGGESTED_LIMIT = "android-support:extra-suggested-limit";
+    field public static final java.lang.String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
+    field public static final java.lang.String QUERY_ARG_LIMIT = "android:query-arg-limit";
+    field public static final java.lang.String QUERY_ARG_OFFSET = "android:query-arg-offset";
+  }
+
+  public static abstract interface ContentPager.ContentCallback {
+    method public abstract void onCursorReady(android.support.content.Query, android.database.Cursor);
+  }
+
+  public static abstract class ContentPager.CursorDisposition implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract interface ContentPager.QueryRunner {
+    method public abstract void cancel(android.support.content.Query);
+    method public abstract boolean isRunning(android.support.content.Query);
+    method public abstract void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+  }
+
+  public static abstract interface ContentPager.QueryRunner.Callback {
+    method public abstract void onQueryFinished(android.support.content.Query, android.database.Cursor);
+    method public abstract android.database.Cursor runQueryInBackground(android.support.content.Query);
+  }
+
+  public final class LoaderQueryRunner implements android.support.content.ContentPager.QueryRunner {
+    ctor public LoaderQueryRunner(android.content.Context, android.app.LoaderManager);
+    method public void cancel(android.support.content.Query);
+    method public boolean isRunning(android.support.content.Query);
+    method public void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+  }
+
+  public final class Query {
+    method public int getId();
+    method public int getLimit();
+    method public int getOffset();
+    method public android.net.Uri getUri();
+  }
+
+}
+
 package android.support.customtabs {
 
   public class CustomTabsCallback {
@@ -12189,6 +12243,7 @@
     method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
     method public android.support.v7.widget.RecyclerView.ItemAnimator getItemAnimator();
     method public android.support.v7.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+    method public int getItemDecorationCount();
     method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
     method public int getMaxFlingVelocity();
     method public int getMinFlingVelocity();
@@ -12212,6 +12267,7 @@
     method public void onScrollStateChanged(int);
     method public void onScrolled(int, int);
     method public void removeItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+    method public void removeItemDecorationAt(int);
     method public void removeOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
     method public void removeOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
     method public void removeOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
diff --git a/api/26.1.0-SNAPSHOT.txt b/api/26.1.0-SNAPSHOT.txt
index 2de7ede..338e280 100644
--- a/api/26.1.0-SNAPSHOT.txt
+++ b/api/26.1.0-SNAPSHOT.txt
@@ -233,6 +233,60 @@
 
 }
 
+package android.support.content {
+
+  public class ContentPager {
+    ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner);
+    ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner, int);
+    method public static android.os.Bundle createArgs(int, int);
+    method public android.support.content.Query query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal, android.support.content.ContentPager.ContentCallback);
+    method public void reset();
+    field public static final int CURSOR_DISPOSITION_COPIED = 1; // 0x1
+    field public static final int CURSOR_DISPOSITION_PAGED = 2; // 0x2
+    field public static final int CURSOR_DISPOSITION_REPAGED = 3; // 0x3
+    field public static final int CURSOR_DISPOSITION_WRAPPED = 4; // 0x4
+    field public static final java.lang.String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
+    field public static final java.lang.String EXTRA_REQUESTED_LIMIT = "android-support:extra-ignored-limit";
+    field public static final java.lang.String EXTRA_SUGGESTED_LIMIT = "android-support:extra-suggested-limit";
+    field public static final java.lang.String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
+    field public static final java.lang.String QUERY_ARG_LIMIT = "android:query-arg-limit";
+    field public static final java.lang.String QUERY_ARG_OFFSET = "android:query-arg-offset";
+  }
+
+  public static abstract interface ContentPager.ContentCallback {
+    method public abstract void onCursorReady(android.support.content.Query, android.database.Cursor);
+  }
+
+  public static abstract class ContentPager.CursorDisposition implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract interface ContentPager.QueryRunner {
+    method public abstract void cancel(android.support.content.Query);
+    method public abstract boolean isRunning(android.support.content.Query);
+    method public abstract void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+  }
+
+  public static abstract interface ContentPager.QueryRunner.Callback {
+    method public abstract void onQueryFinished(android.support.content.Query, android.database.Cursor);
+    method public abstract android.database.Cursor runQueryInBackground(android.support.content.Query);
+  }
+
+  public final class LoaderQueryRunner implements android.support.content.ContentPager.QueryRunner {
+    ctor public LoaderQueryRunner(android.content.Context, android.app.LoaderManager);
+    method public void cancel(android.support.content.Query);
+    method public boolean isRunning(android.support.content.Query);
+    method public void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+  }
+
+  public final class Query {
+    method public int getId();
+    method public int getLimit();
+    method public int getOffset();
+    method public android.net.Uri getUri();
+  }
+
+}
+
 package android.support.customtabs {
 
   public class CustomTabsCallback {
@@ -12189,6 +12243,7 @@
     method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
     method public android.support.v7.widget.RecyclerView.ItemAnimator getItemAnimator();
     method public android.support.v7.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+    method public int getItemDecorationCount();
     method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
     method public int getMaxFlingVelocity();
     method public int getMinFlingVelocity();
@@ -12212,6 +12267,7 @@
     method public void onScrollStateChanged(int);
     method public void onScrolled(int, int);
     method public void removeItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+    method public void removeItemDecorationAt(int);
     method public void removeOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
     method public void removeOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
     method public void removeOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
diff --git a/buildSrc/dependencies.gradle b/buildSrc/dependencies.gradle
index 8a7d69a..0dcf0f2 100644
--- a/buildSrc/dependencies.gradle
+++ b/buildSrc/dependencies.gradle
@@ -20,11 +20,11 @@
 libs.mockito_core = 'org.mockito:mockito-core:2.7.6'
 libs.dexmaker_mockito = 'com.linkedin.dexmaker:dexmaker-mockito:2.2.0'
 libs.junit = 'junit:junit:4.12'
-libs.test_runner = 'com.android.support.test:runner:0.6-alpha'
-libs.espresso_core = 'com.android.support.test.espresso:espresso-core:2.3-alpha'
-libs.espresso_contrib = 'com.android.support.test.espresso:espresso-contrib:2.3-alpha'
+libs.test_runner = 'com.android.support.test:runner:1.0.0'
+libs.test_rules = 'com.android.support.test:rules:1.0.0'
+libs.espresso_core = 'com.android.support.test.espresso:espresso-core:3.0.0'
+libs.espresso_contrib = 'com.android.support.test.espresso:espresso-contrib:3.0.0'
 libs.jacoco = 'org.jacoco:org.jacoco.core:0.7.8'
-libs.test_rules = 'com.android.support.test:rules:0.6-alpha'
 
 def androidPluginVersionOverride = System.getenv("GRADLE_PLUGIN_VERSION")
 
diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index 6b5ea5d..b35123c 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -91,9 +91,11 @@
 }
 
 def setupRepoOutAndBuildNumber() {
+    // common support repo folder which works well for prebuilts.
     ext.supportRepoOut = ''
+    // files in artifactoryRepoOut can be safely copied into a real artifactory.
+    ext.artifactoryRepoOut = ''
     ext.buildNumber = "0"
-
     /*
      * With the build server you are given two env variables.
      * The OUT_DIR is a temporary directory you can use to put things during the build.
@@ -121,6 +123,7 @@
         project.buildDir = new File("$project.parent.buildDir/../$project.name/build")
     }
     ext.supportRepoOut = new File(buildDir, 'support_repo')
+    ext.artifactoryRepoOut =  new File(buildDir, 'artifactory_repo')
     ext.testApkDistOut = ext.distDir
     ext.testResultsDistDir = new File(distDir, "host-test-reports")
     ext.docsDir = new File(buildDir, 'javadoc')
@@ -236,6 +239,7 @@
                 project.afterEvaluate {
                     Upload uploadTask = (Upload) project.tasks.uploadArchives;
                     uploadTask.repositories.mavenDeployer {
+
                         // Disable unique names for SNAPSHOTS so they can be updated in place.
                         setUniqueVersion(false)
                     }
@@ -255,11 +259,26 @@
                         }
                     }
 
+                    // create a release task that produces artifactory friends artifacts
+                    // a.k.a. unique versions for snapshots with their maven-metadata files.
+                    task artifactoryRelease(type : Upload) {
+                        configuration = uploadTask.configuration
+                        repositories {
+                            mavenDeployer {
+                                repository(url: uri("$rootProject.ext.artifactoryRepoOut"))
+                                setUniqueVersion(true)
+                            }
+                        }
+                    }
+
                     // Before the upload, make sure the repo is ready.
                     uploadTask.dependsOn rootProject.tasks.prepareRepo
 
+                    artifactoryRelease.dependsOn uploadTask
+
                     // Make the mainupload depend on this one.
                     mainUpload.dependsOn uploadTask
+                    mainUpload.dependsOn artifactoryRelease
                 }
             }
         }
diff --git a/buildSrc/release.gradle b/buildSrc/release.gradle
index 5033454..d9a0266 100644
--- a/buildSrc/release.gradle
+++ b/buildSrc/release.gradle
@@ -20,7 +20,7 @@
 task createArchive(type : Zip) {
     description "Creates a maven repository that includes just the libraries compiled in this" +
             " project, without any history from prebuilts."
-    from rootProject.ext.supportRepoOut
+    from rootProject.ext.artifactoryRepoOut
     destinationDir rootProject.ext.distDir
     into 'm2repository'
     baseName = String.format("top-of-tree-m2repository-%s", project.ext.buildNumber)
@@ -34,5 +34,7 @@
     doFirst {
         rootProject.ext.supportRepoOut.deleteDir()
         rootProject.ext.supportRepoOut.mkdirs()
+        rootProject.ext.artifactoryRepoOut.deleteDir()
+        rootProject.ext.artifactoryRepoOut.mkdirs()
     }
 }
diff --git a/buildSrc/src/main/groovy/android/support/SupportLibraryPlugin.groovy b/buildSrc/src/main/groovy/android/support/SupportLibraryPlugin.groovy
index 20376b2..382b5b7 100644
--- a/buildSrc/src/main/groovy/android/support/SupportLibraryPlugin.groovy
+++ b/buildSrc/src/main/groovy/android/support/SupportLibraryPlugin.groovy
@@ -102,11 +102,17 @@
 
             // TODO(aurimas): figure out the issue with missing translation check
             disable 'MissingTranslation'
-
-            // Set baseline file for all legacy lint warnings.
-            baseline new File(project.projectDir, "/lint-baseline.xml")
         }
 
+        // Set baseline file for all legacy lint warnings.
+        if (System.getenv("GRADLE_PLUGIN_VERSION") != null) {
+            library.lintOptions.check 'NewApi'
+        } else {
+            library.lintOptions.baseline new File(project.projectDir, "/lint-baseline.xml")
+
+        }
+
+
         // Java 8 is only fully supported on API 24+ and not all Java 8 features are binary
         // compatible with API < 24, so use Java 7 for both source AND target.
         library.compileOptions {
diff --git a/compat/build.gradle b/compat/build.gradle
index 7e9468b..289543a 100644
--- a/compat/build.gradle
+++ b/compat/build.gradle
@@ -3,14 +3,10 @@
 dependencies {
     api project(':support-annotations')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
     androidTestImplementation project(':support-testutils')
 }
 
diff --git a/compat/ics/android/support/v4/graphics/PaintCompatApi14.java b/compat/ics/android/support/v4/graphics/PaintCompatApi14.java
deleted file mode 100644
index 7a7de7c..0000000
--- a/compat/ics/android/support/v4/graphics/PaintCompatApi14.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2017 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.support.v4.graphics;
-
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.support.annotation.NonNull;
-import android.support.v4.util.Pair;
-
-class PaintCompatApi14 {
-    // U+DFFFD which is very end of unassigned plane.
-    private static final String TOFU_STRING = "\uDB3F\uDFFD";
-    private static final String EM_STRING = "m";
-
-    private static final ThreadLocal<Pair<Rect, Rect>> sRectThreadLocal = new ThreadLocal<>();
-
-    static boolean hasGlyph(@NonNull Paint paint, @NonNull String string) {
-        final int length = string.length();
-
-        if (length == 1 && Character.isWhitespace(string.charAt(0))) {
-            // measureText + getTextBounds skips whitespace so we need to special case it here
-            return true;
-        }
-
-        final float missingGlyphWidth = paint.measureText(TOFU_STRING);
-        final float emGlyphWidth = paint.measureText(EM_STRING);
-
-        final float width = paint.measureText(string);
-
-        if (width == 0f) {
-            // If the string width is 0, it can't be rendered
-            return false;
-        }
-
-        if (string.codePointCount(0, string.length()) > 1) {
-            // Heuristic to detect fallback glyphs for ligatures like flags and ZWJ sequences
-            // Return false if string is rendered too widely
-            if (width > 2 * emGlyphWidth) {
-                return false;
-            }
-
-            // Heuristic to detect fallback glyphs for ligatures like flags and ZWJ sequences (2).
-            // If width is greater than or equal to the sum of width of each code point, it is very
-            // likely that the system is using fallback fonts to draw {@code string} in two or more
-            // glyphs instead of a single ligature glyph. (hasGlyph returns false in this case.)
-            // False detections are possible (the ligature glyph may happen to have the same width
-            // as the sum width), but there are no good way to avoid them.
-            // NOTE: This heuristic does not work with proportional glyphs.
-            // NOTE: This heuristic does not work when a ZWJ sequence is partially combined.
-            // E.g. If system has a glyph for "A ZWJ B" and not for "A ZWJ B ZWJ C", this heuristic
-            // returns true for "A ZWJ B ZWJ C".
-            float sumWidth = 0;
-            int i = 0;
-            while (i < length) {
-                int charCount = Character.charCount(string.codePointAt(i));
-                sumWidth += paint.measureText(string, i, i + charCount);
-                i += charCount;
-            }
-            if (width >= sumWidth) {
-                return false;
-            }
-        }
-
-        if (width != missingGlyphWidth) {
-            // If the widths are different then its not tofu
-            return true;
-        }
-
-        // If the widths are the same, lets check the bounds. The chance of them being
-        // different chars with the same bounds is extremely small
-        final Pair<Rect, Rect> rects = obtainEmptyRects();
-        paint.getTextBounds(TOFU_STRING, 0, TOFU_STRING.length(), rects.first);
-        paint.getTextBounds(string, 0, length, rects.second);
-        return !rects.first.equals(rects.second);
-    }
-
-    private static Pair<Rect, Rect> obtainEmptyRects() {
-        Pair<Rect, Rect> rects = sRectThreadLocal.get();
-        if (rects == null) {
-            rects = new Pair<>(new Rect(), new Rect());
-            sRectThreadLocal.set(rects);
-        } else {
-            rects.first.setEmpty();
-            rects.second.setEmpty();
-        }
-        return rects;
-    }
-}
diff --git a/compat/java/android/support/v4/graphics/PaintCompat.java b/compat/java/android/support/v4/graphics/PaintCompat.java
index 95eee0c..b651fe6 100644
--- a/compat/java/android/support/v4/graphics/PaintCompat.java
+++ b/compat/java/android/support/v4/graphics/PaintCompat.java
@@ -17,13 +17,20 @@
 package android.support.v4.graphics;
 
 import android.graphics.Paint;
+import android.graphics.Rect;
 import android.os.Build;
 import android.support.annotation.NonNull;
+import android.support.v4.util.Pair;
 
 /**
  * Helper for accessing features in {@link Paint}.
  */
 public final class PaintCompat {
+    // U+DFFFD which is very end of unassigned plane.
+    private static final String TOFU_STRING = "\uDB3F\uDFFD";
+    private static final String EM_STRING = "m";
+
+    private static final ThreadLocal<Pair<Rect, Rect>> sRectThreadLocal = new ThreadLocal<>();
 
     /**
      * Determine whether the typeface set on the paint has a glyph supporting the
@@ -37,7 +44,75 @@
         if (Build.VERSION.SDK_INT >= 23) {
             return paint.hasGlyph(string);
         }
-        return PaintCompatApi14.hasGlyph(paint, string);
+        final int length = string.length();
+
+        if (length == 1 && Character.isWhitespace(string.charAt(0))) {
+            // measureText + getTextBounds skips whitespace so we need to special case it here
+            return true;
+        }
+
+        final float missingGlyphWidth = paint.measureText(TOFU_STRING);
+        final float emGlyphWidth = paint.measureText(EM_STRING);
+
+        final float width = paint.measureText(string);
+
+        if (width == 0f) {
+            // If the string width is 0, it can't be rendered
+            return false;
+        }
+
+        if (string.codePointCount(0, string.length()) > 1) {
+            // Heuristic to detect fallback glyphs for ligatures like flags and ZWJ sequences
+            // Return false if string is rendered too widely
+            if (width > 2 * emGlyphWidth) {
+                return false;
+            }
+
+            // Heuristic to detect fallback glyphs for ligatures like flags and ZWJ sequences (2).
+            // If width is greater than or equal to the sum of width of each code point, it is very
+            // likely that the system is using fallback fonts to draw {@code string} in two or more
+            // glyphs instead of a single ligature glyph. (hasGlyph returns false in this case.)
+            // False detections are possible (the ligature glyph may happen to have the same width
+            // as the sum width), but there are no good way to avoid them.
+            // NOTE: This heuristic does not work with proportional glyphs.
+            // NOTE: This heuristic does not work when a ZWJ sequence is partially combined.
+            // E.g. If system has a glyph for "A ZWJ B" and not for "A ZWJ B ZWJ C", this heuristic
+            // returns true for "A ZWJ B ZWJ C".
+            float sumWidth = 0;
+            int i = 0;
+            while (i < length) {
+                int charCount = Character.charCount(string.codePointAt(i));
+                sumWidth += paint.measureText(string, i, i + charCount);
+                i += charCount;
+            }
+            if (width >= sumWidth) {
+                return false;
+            }
+        }
+
+        if (width != missingGlyphWidth) {
+            // If the widths are different then its not tofu
+            return true;
+        }
+
+        // If the widths are the same, lets check the bounds. The chance of them being
+        // different chars with the same bounds is extremely small
+        final Pair<Rect, Rect> rects = obtainEmptyRects();
+        paint.getTextBounds(TOFU_STRING, 0, TOFU_STRING.length(), rects.first);
+        paint.getTextBounds(string, 0, length, rects.second);
+        return !rects.first.equals(rects.second);
+    }
+
+    private static Pair<Rect, Rect> obtainEmptyRects() {
+        Pair<Rect, Rect> rects = sRectThreadLocal.get();
+        if (rects == null) {
+            rects = new Pair<>(new Rect(), new Rect());
+            sRectThreadLocal.set(rects);
+        } else {
+            rects.first.setEmpty();
+            rects.second.setEmpty();
+        }
+        return rects;
     }
 
     private PaintCompat() {}
diff --git a/content/Android.mk b/content/Android.mk
new file mode 100644
index 0000000..eff8215
--- /dev/null
+++ b/content/Android.mk
@@ -0,0 +1,29 @@
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_USE_AAPT2 := true
+LOCAL_MODULE := android-support-content
+LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+LOCAL_SHARED_ANDROID_LIBRARIES := \
+    android-support-compat \
+    android-support-annotations
+LOCAL_JAR_EXCLUDE_FILES := none
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
+include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/content/AndroidManifest.xml b/content/AndroidManifest.xml
new file mode 100644
index 0000000..5f2a29e
--- /dev/null
+++ b/content/AndroidManifest.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="android.support.content">
+    <uses-sdk android:minSdkVersion="14" />
+    <application>
+        <meta-data android:name="android.support.VERSION" android:value="${support-version}" />
+    </application>
+</manifest>
diff --git a/content/api/0.0.0.txt b/content/api/0.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/content/api/0.0.0.txt
diff --git a/content/api/26.1.0-SNAPSHOT.txt b/content/api/26.1.0-SNAPSHOT.txt
new file mode 100644
index 0000000..e0b4fa3
--- /dev/null
+++ b/content/api/26.1.0-SNAPSHOT.txt
@@ -0,0 +1,54 @@
+package android.support.content {
+
+  public class ContentPager {
+    ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner);
+    ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner, int);
+    method public static android.os.Bundle createArgs(int, int);
+    method public android.support.content.Query query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal, android.support.content.ContentPager.ContentCallback);
+    method public void reset();
+    field public static final int CURSOR_DISPOSITION_COPIED = 1; // 0x1
+    field public static final int CURSOR_DISPOSITION_PAGED = 2; // 0x2
+    field public static final int CURSOR_DISPOSITION_REPAGED = 3; // 0x3
+    field public static final int CURSOR_DISPOSITION_WRAPPED = 4; // 0x4
+    field public static final java.lang.String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
+    field public static final java.lang.String EXTRA_REQUESTED_LIMIT = "android-support:extra-ignored-limit";
+    field public static final java.lang.String EXTRA_SUGGESTED_LIMIT = "android-support:extra-suggested-limit";
+    field public static final java.lang.String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
+    field public static final java.lang.String QUERY_ARG_LIMIT = "android:query-arg-limit";
+    field public static final java.lang.String QUERY_ARG_OFFSET = "android:query-arg-offset";
+  }
+
+  public static abstract interface ContentPager.ContentCallback {
+    method public abstract void onCursorReady(android.support.content.Query, android.database.Cursor);
+  }
+
+  public static abstract class ContentPager.CursorDisposition implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract interface ContentPager.QueryRunner {
+    method public abstract void cancel(android.support.content.Query);
+    method public abstract boolean isRunning(android.support.content.Query);
+    method public abstract void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+  }
+
+  public static abstract interface ContentPager.QueryRunner.Callback {
+    method public abstract void onQueryFinished(android.support.content.Query, android.database.Cursor);
+    method public abstract android.database.Cursor runQueryInBackground(android.support.content.Query);
+  }
+
+  public final class LoaderQueryRunner implements android.support.content.ContentPager.QueryRunner {
+    ctor public LoaderQueryRunner(android.content.Context, android.app.LoaderManager);
+    method public void cancel(android.support.content.Query);
+    method public boolean isRunning(android.support.content.Query);
+    method public void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+  }
+
+  public final class Query {
+    method public int getId();
+    method public int getLimit();
+    method public int getOffset();
+    method public android.net.Uri getUri();
+  }
+
+}
+
diff --git a/content/api/removed.txt b/content/api/removed.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/content/api/removed.txt
diff --git a/content/build.gradle b/content/build.gradle
new file mode 100644
index 0000000..5d6dc58
--- /dev/null
+++ b/content/build.gradle
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+apply plugin: android.support.SupportLibraryPlugin
+
+dependencies {
+    compile project(':support-annotations')
+    compile project(':support-compat')
+
+    androidTestImplementation libs.junit
+    androidTestImplementation libs.test_runner,   { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core, { exclude module: 'support-annotations' }
+}
+
+android {
+    defaultConfig {
+        minSdkVersion 14
+    }
+
+    sourceSets {
+        main.java.srcDirs = ['src']
+        main.res.srcDir 'res'
+    }
+}
+
+supportLibrary {
+    name 'Android Support Content'
+    inceptionYear '2017'
+    description 'Library providing support for paging across content exposed via a ContentProvider. Use of this library allows a client to avoid expensive interprocess "cursor window swaps" on the UI thread.'
+}
diff --git a/content/lint-baseline.xml b/content/lint-baseline.xml
new file mode 100644
index 0000000..e961253
--- /dev/null
+++ b/content/lint-baseline.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="4" by="lint 3.0.0-alpha7">
+
+</issues>
diff --git a/content/src/android/support/content/ContentPager.java b/content/src/android/support/content/ContentPager.java
new file mode 100644
index 0000000..71cb832
--- /dev/null
+++ b/content/src/android/support/content/ContentPager.java
@@ -0,0 +1,707 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static android.support.v4.util.Preconditions.checkArgument;
+import static android.support.v4.util.Preconditions.checkState;
+
+import android.content.ContentResolver;
+import android.database.CrossProcessCursor;
+import android.database.Cursor;
+import android.database.CursorWindow;
+import android.database.CursorWrapper;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.OperationCanceledException;
+import android.support.annotation.GuardedBy;
+import android.support.annotation.IntDef;
+import android.support.annotation.MainThread;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresPermission;
+import android.support.annotation.VisibleForTesting;
+import android.support.annotation.WorkerThread;
+import android.support.v4.util.LruCache;
+import android.util.Log;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * {@link ContentPager} provides support for loading "paged" data on a background thread
+ * using the {@link ContentResolver} framework. This provides an effective compatibility
+ * layer for the ContentResolver "paging" support added in Android O. Those Android O changes,
+ * like this class, help reduce or eliminate the occurrence of expensive inter-process
+ * shared memory operations (aka "CursorWindow swaps") happening on the UI thread when
+ * working with remote providers.
+ *
+ * <p>The list of terms used in this document:
+ *
+ * <ol>"The provider" is a {@link android.content.ContentProvider} supplying data identified
+ * by a specific content {@link Uri}. A provider is the source of data, and for the sake of
+ * this documents, the provider resides in a remote process.
+
+ * <ol>"supports paging" A provider supports paging when it returns a pre-paged {@link Cursor}
+ * that honors the paging contract. See @link ContentResolver#QUERY_ARG_OFFSET} and
+ * {@link ContentResolver#QUERY_ARG_LIMIT} for details on the contract.
+
+ * <ol>"CursorWindow swaps" The process by which new data is loaded into a shared memory
+ * via a CursorWindow instance. This is a prominent contributor to UI jank in applications
+ * that use Cursor as backing data for UI elements like {@code RecyclerView}.
+ *
+ * <p><b>Details</b>
+ *
+ * <p>Data will be loaded from a content uri in one of two ways, depending on the runtime
+ * environment and if the provider supports paging.
+ *
+ * <li>If the system is Android O and greater and the provider supports paging, the Cursor
+ * will be returned, effectively unmodified, to a {@link ContentCallback} supplied by
+ * your application.
+ *
+ * <li>If the system is less than Android O or the provider does not support paging, the
+ * loader will fetch an unpaged Cursor from the provider. The unpaged Cursor will be held
+ * by the ContentPager, and data will be copied into a new cursor in a background thread.
+ * The new cursor will be returned to a {@link ContentCallback} supplied by your application.
+ *
+ * <p>In either cases, when an application employs this library it can generally assume
+ * that there will be no CursorWindow swap. But picking the right limit for records can
+ * help reduce or even eliminate some heavy lifting done to guard against swaps.
+ *
+ * <p>How do we avoid that entirely?
+ *
+ * <p><b>Picking a reasonable item limit</b>
+ *
+ * <p>Authors are encouraged to experiment with limits using real data and the widest column
+ * projection they'll use in their app. The total number of records that will fit into shared
+ * memory varies depending on multiple factors.
+ *
+ * <li>The number of columns being requested in the cursor projection. Limit the number
+ * of columns, to reduce the size of each row.
+ * <li>The size of the data in each column.
+ * <li>the Cursor type.
+ *
+ * <p>If the cursor is running in-process, there may be no need for paging. Depending on
+ * the Cursor implementation chosen there may be no shared memory/CursorWindow in use.
+ * NOTE: If the provider is running in your process, you should implement paging support
+ * inorder to make your app run fast and to consume the fewest resources possible.
+ *
+ * <p>In common cases where there is a low volume (in the hundreds) of records in the dataset
+ * being queried, all of the data should easily fit in shared memory. A debugger can be handy
+ * to understand with greater accuracy how many results can fit in shared memory. Inspect
+ * the Cursor object returned from a call to
+ * {@link ContentResolver#query(Uri, String[], String, String[], String)}. If the underlying
+ * type is a {@link android.database.CrossProcessCursor} or
+ * {@link android.database.AbstractWindowedCursor} it'll have a {@link CursorWindow} field.
+ * Check {@link CursorWindow#getNumRows()}. If getNumRows returns less than
+ * {@link Cursor#getCount}, then you've found something close to the max rows that'll
+ * fit in a page. If the data in row is expected to be relatively stable in size, reduce
+ * row count by 15-20% to get a reasonable max page size.
+ *
+ * <p><b>What if the limit I guessed was wrong?</b>
+
+ * <p>The library includes safeguards that protect against situations where an author
+ * specifies a record limit that exceeds the number of rows accessible without a CursorWindow swap.
+ * In such a circumstance, the Cursor will be adapted to report a count ({Cursor#getCount})
+ * that reflects only records available without CursorWindow swap. But this involves
+ * extra work that can be eliminated with a correct limit.
+ *
+ * <p>In addition to adjusted coujnt, {@link #EXTRA_SUGGESTED_LIMIT} will be included
+ * in cursor extras. When EXTRA_SUGGESTED_LIMIT is present in extras, the client should
+ * strongly consider using this value as the limit for subsequent queries as doing so should
+ * help avoid the ned to wrap pre-paged cursors.
+ *
+ * <p><b>Lifecycle and cleanup</b>
+ *
+ * <p>Cursors resulting from queries are owned by the requesting client. So they must be closed
+ * by the client at the appropriate time.
+ *
+ * <p>However, the library retains an internal cache of content that needs to be cleaned up.
+ * In order to cleanup, call {@link #reset()}.
+ *
+ * <p><b>Projections</b>
+ *
+ * <p>Note that projection is ignored when determining the identity of a query. When
+ * adding or removing projection, clients should call {@link #reset()} to clear
+ * cached data.
+ */
+public class ContentPager {
+
+    @VisibleForTesting
+    static final String CURSOR_DISPOSITION = "android.support.v7.widget.CURSOR_DISPOSITION";
+
+    @IntDef(value = {
+            ContentPager.CURSOR_DISPOSITION_COPIED,
+            ContentPager.CURSOR_DISPOSITION_PAGED,
+            ContentPager.CURSOR_DISPOSITION_REPAGED,
+            ContentPager.CURSOR_DISPOSITION_WRAPPED
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface CursorDisposition {}
+
+    /** The cursor size exceeded page size. A new cursor with with page data was created. */
+    public static final int CURSOR_DISPOSITION_COPIED = 1;
+
+    /**
+     * The cursor was provider paged.
+     */
+    public static final int CURSOR_DISPOSITION_PAGED = 2;
+
+    /** The cursor was pre-paged, but total size was larger than CursorWindow size. */
+    public static final int CURSOR_DISPOSITION_REPAGED = 3;
+
+    /**
+     * The cursor was not pre-paged, but total size was smaller than page size.
+     * Cursor wrapped to supply data in extras only.
+     */
+    public static final int CURSOR_DISPOSITION_WRAPPED = 4;
+
+    /** @see ContentResolver#EXTRA_HONORED_ARGS */
+    public static final String EXTRA_HONORED_ARGS = ContentResolver.EXTRA_HONORED_ARGS;
+
+    /** @see ContentResolver#EXTRA_TOTAL_COUNT */
+    public static final String EXTRA_TOTAL_COUNT = ContentResolver.EXTRA_TOTAL_COUNT;
+
+    /** @see ContentResolver#QUERY_ARG_OFFSET */
+    public static final String QUERY_ARG_OFFSET = ContentResolver.QUERY_ARG_OFFSET;
+
+    /** @see ContentResolver#QUERY_ARG_LIMIT */
+    public static final String QUERY_ARG_LIMIT = ContentResolver.QUERY_ARG_LIMIT;
+
+    /** Denotes the requested limit, if the limit was not-honored. */
+    public static final String EXTRA_REQUESTED_LIMIT = "android-support:extra-ignored-limit";
+
+    /** Specifies a limit likely to fit in CursorWindow limit. */
+    public static final String EXTRA_SUGGESTED_LIMIT = "android-support:extra-suggested-limit";
+
+    private static final boolean DEBUG = false;
+    private static final String TAG = "ContentPager";
+    private static final int DEFAULT_CURSOR_CACHE_SIZE = 1;
+
+    private final QueryRunner mQueryRunner;
+    private final QueryRunner.Callback mQueryCallback;
+    private final ContentResolver mResolver;
+    private final Object mContentLock = new Object();
+    private final @GuardedBy("mContentLock") Set<Query> mActiveQueries = new HashSet<>();
+    private final @GuardedBy("mContentLock") CursorCache mCursorCache;
+
+    private final Stats mStats = new Stats();
+
+    /**
+     * Creates a new ContentPager with a default cursor cache size of 1.
+     */
+    public ContentPager(ContentResolver resolver, QueryRunner queryRunner) {
+        this(resolver, queryRunner, DEFAULT_CURSOR_CACHE_SIZE);
+    }
+
+    /**
+     * Creates a new ContentPager.
+     *
+     * @param cursorCacheSize Specifies the size of the unpaged cursor cache. If you will
+     *     only be querying a single content Uri, 1 is sufficient. If you wish to use
+     *     a single ContentPager for queries against several independent Uris this number
+     *     should be increased to reflect that. Remember that adding or modifying a
+     *     query argument creates a new Uri.
+     * @param resolver The content resolver to use when performing queries.
+     * @param queryRunner The query running to use. This provides a means of executing
+     *         queries on a background thread.
+     */
+    public ContentPager(
+            @NonNull ContentResolver resolver,
+            @NonNull QueryRunner queryRunner,
+            int cursorCacheSize) {
+
+        checkArgument(resolver != null, "'resolver' argument cannot be null.");
+        checkArgument(queryRunner != null, "'queryRunner' argument cannot be null.");
+        checkArgument(cursorCacheSize > 0, "'cursorCacheSize' argument must be greater than 0.");
+
+        mResolver = resolver;
+        mQueryRunner = queryRunner;
+        mQueryCallback = new QueryRunner.Callback() {
+
+            @WorkerThread
+            @Override
+            public @Nullable Cursor runQueryInBackground(Query query) {
+                return loadContentInBackground(query);
+            }
+
+            @MainThread
+            @Override
+            public void onQueryFinished(Query query, Cursor cursor) {
+                ContentPager.this.onCursorReady(query, cursor);
+            }
+        };
+
+        mCursorCache = new CursorCache(cursorCacheSize);
+    }
+
+    /**
+     * Initiates loading of content.
+     * For details on all params but callback, see
+     * {@link ContentResolver#query(Uri, String[], Bundle, CancellationSignal)}.
+     *
+     * @param uri The URI, using the content:// scheme, for the content to retrieve.
+     * @param projection A list of which columns to return. Passing null will return
+     *         the default project as determined by the provider. This can be inefficient,
+     *         so it is best to supply a projection.
+     * @param queryArgs A Bundle containing any arguments to the query.
+     * @param cancellationSignal A signal to cancel the operation in progress, or null if none.
+     * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+     * when the query is executed.
+     * @param callback The callback that will receive the query results.
+     *
+     * @return A Query object describing the query.
+     */
+    @MainThread
+    public @NonNull Query query(
+            @NonNull @RequiresPermission.Read Uri uri,
+            @Nullable String[] projection,
+            @NonNull Bundle queryArgs,
+            @Nullable CancellationSignal cancellationSignal,
+            @NonNull ContentCallback callback) {
+
+        checkArgument(uri != null, "'uri' argument cannot be null.");
+        checkArgument(queryArgs != null, "'queryArgs' argument cannot be null.");
+        checkArgument(callback != null, "'callback' argument cannot be null.");
+
+        Query query = new Query(uri, projection, queryArgs, cancellationSignal, callback);
+
+        if (DEBUG) Log.d(TAG, "Handling query: " + query);
+
+        if (!mQueryRunner.isRunning(query)) {
+            synchronized (mContentLock) {
+                mActiveQueries.add(query);
+            }
+            mQueryRunner.query(query, mQueryCallback);
+        }
+
+        return query;
+    }
+
+    /**
+     * Clears any cached data. This method must be called in order to cleanup runtime state
+     * (like cursors).
+     */
+    @MainThread
+    public void reset() {
+        synchronized (mContentLock) {
+            if (DEBUG) Log.d(TAG, "Clearing un-paged cursor cache.");
+            mCursorCache.evictAll();
+
+            for (Query query : mActiveQueries) {
+                if (DEBUG) Log.d(TAG, "Canceling running query: " + query);
+                mQueryRunner.cancel(query);
+                query.cancel();
+            }
+
+            mActiveQueries.clear();
+        }
+    }
+
+    @WorkerThread
+    private Cursor loadContentInBackground(Query query) {
+        if (DEBUG) Log.v(TAG, "Loading cursor for query: " + query);
+        mStats.increment(Stats.EXTRA_TOTAL_QUERIES);
+
+        synchronized (mContentLock) {
+            // We have a existing unpaged-cursor for this query. Instead of running a new query
+            // via ContentResolver, we'll just copy results from that.
+            // This is the "compat" behavior.
+            if (mCursorCache.hasEntry(query.getUri())) {
+                if (DEBUG) Log.d(TAG, "Found unpaged results in cache for: " + query);
+                return createPagedCursor(query);
+            }
+        }
+
+        // We don't have an unpaged query, so we run the query using ContentResolver.
+        // It may be that no query for this URI has ever been run, so no unpaged
+        // results have been saved. Or, it may be the the provider supports paging
+        // directly, and is returning a pre-paged result set...so no unpaged
+        // cursor will ever be set.
+        Cursor cursor = query.run(mResolver);
+        mStats.increment(Stats.EXTRA_RESOLVED_QUERIES);
+
+        //       for the window. If so, communicate the overflow back to the client.
+        if (cursor == null) {
+            Log.e(TAG, "Query resulted in null cursor. " + query);
+            return null;
+        }
+
+        if (isProviderPaged(cursor)) {
+            return processProviderPagedCursor(query, cursor);
+        }
+
+        // Cache the unpaged results so we can generate pages from them on subsequent queries.
+        synchronized (mContentLock) {
+            mCursorCache.put(query.getUri(), cursor);
+            return createPagedCursor(query);
+        }
+    }
+
+    @WorkerThread
+    @GuardedBy("mContentLock")
+    private Cursor createPagedCursor(Query query) {
+        Cursor unpaged = mCursorCache.get(query.getUri());
+        checkState(unpaged != null, "No un-paged cursor in cache, or can't retrieve it.");
+
+        mStats.increment(Stats.EXTRA_COMPAT_PAGED);
+
+        if (DEBUG) Log.d(TAG, "Synthesizing cursor for page: " + query);
+        int count = Math.min(query.getLimit(), unpaged.getCount());
+
+        // don't wander off the end of the cursor.
+        if (query.getOffset() + query.getLimit() > unpaged.getCount()) {
+            count = unpaged.getCount() % query.getLimit();
+        }
+
+        if (DEBUG) Log.d(TAG, "Cursor count: " + count);
+
+        Cursor result = null;
+        // If the cursor isn't advertising support for paging, but is in-fact smaller
+        // than the page size requested, we just decorate the cursor with paging data,
+        // and wrap it without copy.
+        if (query.getOffset() == 0 && unpaged.getCount() < query.getLimit()) {
+            result = new CursorView(
+                    unpaged, unpaged.getCount(), CURSOR_DISPOSITION_WRAPPED);
+        } else {
+            // This creates an in-memory copy of the data that fits the requested page.
+            // ContentObservers registered on InMemoryCursor are directly registered
+            // on the unpaged cursor.
+            result = new InMemoryCursor(
+                    unpaged, query.getOffset(), count, CURSOR_DISPOSITION_COPIED);
+        }
+
+        mStats.includeStats(result.getExtras());
+        return result;
+    }
+
+    @WorkerThread
+    private @Nullable Cursor processProviderPagedCursor(Query query, Cursor cursor) {
+
+        CursorWindow window = getWindow(cursor);
+        int windowSize = cursor.getCount();
+        if (window != null) {
+            if (DEBUG) Log.d(TAG, "Returning provider-paged cursor.");
+            windowSize = window.getNumRows();
+        }
+
+        // Android O paging APIs are *all* about avoiding CursorWindow swaps,
+        // because the swaps need to happen on the UI thread in jank-inducing ways.
+        // But, the APIs don't *guarantee* that no window-swapping will happen
+        // when traversing a cursor.
+        //
+        // Here in the support lib, we can guarantee there is no window swapping
+        // by detecting mismatches between requested sizes and window sizes.
+        // When a mismatch is detected we can return a cursor that reports
+        // a size bounded by its CursorWindow size, and includes a suggested
+        // size to use for subsequent queries.
+
+        if (DEBUG) Log.d(TAG, "Cursor window overflow detected. Returning re-paged cursor.");
+
+        int disposition = (cursor.getCount() <= windowSize)
+                ? CURSOR_DISPOSITION_PAGED
+                : CURSOR_DISPOSITION_REPAGED;
+
+        Cursor result = new CursorView(cursor, windowSize, disposition);
+        Bundle extras = result.getExtras();
+
+        // If the orig cursor reports a size larger than the window, suggest a better limit.
+        if (cursor.getCount() > windowSize) {
+            extras.putInt(EXTRA_REQUESTED_LIMIT, query.getLimit());
+            extras.putInt(EXTRA_SUGGESTED_LIMIT, (int) (windowSize * .85));
+        }
+
+        mStats.increment(Stats.EXTRA_PROVIDER_PAGED);
+        mStats.includeStats(extras);
+        return result;
+    }
+
+    private CursorWindow getWindow(Cursor cursor) {
+        if (cursor instanceof CursorWrapper) {
+            return getWindow(((CursorWrapper) cursor).getWrappedCursor());
+        }
+        if (cursor instanceof CrossProcessCursor) {
+            return ((CrossProcessCursor) cursor).getWindow();
+        }
+        // TODO: Any other ways we can find/access windows?
+        return null;
+    }
+
+    // Called in the foreground when the cursor is ready for the client.
+    @MainThread
+    private void onCursorReady(Query query, Cursor cursor) {
+        synchronized (mContentLock) {
+            mActiveQueries.remove(query);
+        }
+
+        query.getCallback().onCursorReady(query, cursor);
+    }
+
+    /**
+     * @return true if the cursor extras contains all of the signs of being paged.
+     *     Technically we could also check SDK version since facilities for paging
+     *     were added in SDK 26, but if it looks like a duck and talks like a duck
+     *     itsa duck (especially if it helps with testing).
+     */
+    @WorkerThread
+    private boolean isProviderPaged(Cursor cursor) {
+        Bundle extras = cursor.getExtras();
+        extras = extras != null ? extras : Bundle.EMPTY;
+        String[] honoredArgs = extras.getStringArray(EXTRA_HONORED_ARGS);
+
+        return (extras.containsKey(EXTRA_TOTAL_COUNT)
+                && honoredArgs != null
+                && contains(honoredArgs, QUERY_ARG_OFFSET)
+                && contains(honoredArgs, QUERY_ARG_LIMIT));
+    }
+
+    private static <T> boolean contains(T[] array, T value) {
+        for (T element : array) {
+            if (value.equals(element)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @return Bundle populated with existing extras (if any) as well as
+     * all usefule paging related extras.
+     */
+    static Bundle buildExtras(
+            @Nullable Bundle extras, int recordCount, @CursorDisposition int cursorDisposition) {
+
+        if (extras == null || extras == Bundle.EMPTY) {
+            extras = new Bundle();
+        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            extras = extras.deepCopy();
+        }
+        // else we modify cursor extras directly, cuz that's our only choice.
+
+        extras.putInt(CURSOR_DISPOSITION, cursorDisposition);
+        if (!extras.containsKey(EXTRA_TOTAL_COUNT)) {
+            extras.putInt(EXTRA_TOTAL_COUNT, recordCount);
+        }
+
+        if (!extras.containsKey(EXTRA_HONORED_ARGS)) {
+            extras.putStringArray(EXTRA_HONORED_ARGS, new String[]{
+                    ContentPager.QUERY_ARG_OFFSET,
+                    ContentPager.QUERY_ARG_LIMIT
+            });
+        }
+
+        return extras;
+    }
+
+    /**
+     * Builds a Bundle with offset and limit values suitable for with
+     * {@link #query(Uri, String[], Bundle, CancellationSignal, ContentCallback)}.
+     *
+     * @param offset must be greater than or equal to 0.
+     * @param limit can be any value. Only values greater than or equal to 0 are respected.
+     *         If any other value results in no upper limit on results. Note that a well
+     *         behaved client should probably supply a reasonable limit. See class
+     *         documentation on how to select a limit.
+     *
+     * @return Mutable Bundle pre-populated with offset and limits vales.
+     */
+    public static @NonNull Bundle createArgs(int offset, int limit) {
+        checkArgument(offset >= 0);
+        Bundle args = new Bundle();
+        args.putInt(ContentPager.QUERY_ARG_OFFSET, offset);
+        args.putInt(ContentPager.QUERY_ARG_LIMIT, limit);
+        return args;
+    }
+
+    /**
+     * Callback by which a client receives results of a query.
+     */
+    public interface ContentCallback {
+        /**
+         * Called when paged cursor is ready. Null, if query failed.
+         * @param query The query having been executed.
+         * @param cursor the query results. Null if query couldn't be executed.
+         */
+        @MainThread
+        void onCursorReady(@NonNull Query query, @Nullable Cursor cursor);
+    }
+
+    /**
+     * Provides support for adding extras to a cursor. This is necessary
+     * as a cursor returning an extras Bundle that is either Bundle.EMPTY
+     * or null, cannot have information added to the cursor. On SDKs earlier
+     * than M, there is no facility to replace the Bundle.
+     */
+    private static final class CursorView extends CursorWrapper {
+        private final Bundle mExtras;
+        private final int mSize;
+
+        CursorView(Cursor delegate, int size, @CursorDisposition int disposition) {
+            super(delegate);
+            mSize = size;
+
+            mExtras = buildExtras(delegate.getExtras(), delegate.getCount(), disposition);
+        }
+
+        @Override
+        public int getCount() {
+            return mSize;
+        }
+
+        @Override
+        public Bundle getExtras() {
+            return mExtras;
+        }
+    }
+
+    /**
+     * LruCache holding at most {@code maxSize} cursors. Once evicted a cursor
+     * is immediately closed. The only cursor's held in this cache are
+     * unpaged results. For this purpose the cache is keyed by the URI,
+     * not the entire query. Cursors that are pre-paged by the provider
+     * are never cached.
+     */
+    private static final class CursorCache extends LruCache<Uri, Cursor> {
+        CursorCache(int maxSize) {
+            super(maxSize);
+        }
+
+        @WorkerThread
+        @Override
+        protected void entryRemoved(
+                boolean evicted, Uri uri, Cursor oldCursor, Cursor newCursor) {
+            if (!oldCursor.isClosed()) {
+                oldCursor.close();
+            }
+        }
+
+        /** @return true if an entry is present for the Uri. */
+        @WorkerThread
+        @GuardedBy("mContentLock")
+        boolean hasEntry(Uri uri) {
+            return get(uri) != null;
+        }
+    }
+
+    /**
+     * Implementations of this interface provide the mechanism
+     * for execution of queries off the UI thread.
+     */
+    public interface QueryRunner {
+        /**
+         * Execute a query.
+         * @param query The query that will be run. This value should be handed
+         *         back to the callback when ready to run in the background.
+         * @param callback The callback that should be called to both execute
+         *         the query (in the background) and to receive the results
+         *         (in the foreground).
+         */
+        void query(@NonNull Query query, @NonNull Callback callback);
+
+        /**
+         * @param query The query in question.
+         * @return true if the query is already running.
+         */
+        boolean isRunning(@NonNull Query query);
+
+        /**
+         * Attempt to cancel a (presumably) running query.
+         * @param query The query in question.
+         */
+        void cancel(@NonNull Query query);
+
+        /**
+         * Callback that receives a cursor once a query as been executed on the Runner.
+         */
+        interface Callback {
+            /**
+             * Method called on background thread where actual query is executed. This is provided
+             * by ContentPager.
+             * @param query The query to be executed.
+             */
+            @Nullable Cursor runQueryInBackground(@NonNull Query query);
+
+            /**
+             * Called on main thread when query has completed.
+             * @param query The completed query.
+             * @param cursor The results in Cursor form. Null if not successfully completed.
+             */
+            void onQueryFinished(@NonNull Query query, @Nullable Cursor cursor);
+        }
+    }
+
+    static final class Stats {
+
+        /** Identifes the total number of queries handled by ContentPager. */
+        static final String EXTRA_TOTAL_QUERIES = "android-support:extra-total-queries";
+
+        /** Identifes the number of queries handled by content resolver. */
+        static final String EXTRA_RESOLVED_QUERIES = "android-support:extra-resolved-queries";
+
+        /** Identifes the number of pages produced by way of copying. */
+        static final String EXTRA_COMPAT_PAGED = "android-support:extra-compat-paged";
+
+        /** Identifes the number of pages produced directly by a page-supporting provider. */
+        static final String EXTRA_PROVIDER_PAGED = "android-support:extra-provider-paged";
+
+        // simple stats objects tracking paged result handling.
+        private int mTotalQueries;
+        private int mResolvedQueries;
+        private int mCompatPaged;
+        private int mProviderPaged;
+
+        private void increment(String prop) {
+            switch (prop) {
+                case EXTRA_TOTAL_QUERIES:
+                    ++mTotalQueries;
+                    break;
+
+                case EXTRA_RESOLVED_QUERIES:
+                    ++mResolvedQueries;
+                    break;
+
+                case EXTRA_COMPAT_PAGED:
+                    ++mCompatPaged;
+                    break;
+
+                case EXTRA_PROVIDER_PAGED:
+                    ++mProviderPaged;
+                    break;
+
+                default:
+                    throw new IllegalArgumentException("Unknown property: " + prop);
+            }
+        }
+
+        private void reset() {
+            mTotalQueries = 0;
+            mResolvedQueries = 0;
+            mCompatPaged = 0;
+            mProviderPaged = 0;
+        }
+
+        void includeStats(Bundle bundle) {
+            bundle.putInt(EXTRA_TOTAL_QUERIES, mTotalQueries);
+            bundle.putInt(EXTRA_RESOLVED_QUERIES, mResolvedQueries);
+            bundle.putInt(EXTRA_COMPAT_PAGED, mCompatPaged);
+            bundle.putInt(EXTRA_PROVIDER_PAGED, mProviderPaged);
+        }
+    }
+}
diff --git a/content/src/android/support/content/InMemoryCursor.java b/content/src/android/support/content/InMemoryCursor.java
new file mode 100644
index 0000000..097709a
--- /dev/null
+++ b/content/src/android/support/content/InMemoryCursor.java
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static android.support.v4.util.Preconditions.checkArgument;
+
+import android.database.AbstractCursor;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.database.CursorIndexOutOfBoundsException;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.RestrictTo;
+
+/**
+ * A {@link Cursor} implementation that stores information in-memory, in a type-safe fashion.
+ * Values are stored, when possible, as primitives to avoid the need for the autoboxing (as is
+ * necessary when working with MatrixCursor).
+ *
+ * <p>Unlike {@link android.database.MatrixCursor}, this cursor is not mutable at runtime.
+ * It exists solely as a destination for data copied by {@link ContentPager} from a source
+ * Cursor when a page is being synthesized. It is not anticipated at this time that this
+ * will be useful outside of this package. As such it is immutable once constructed.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+final class InMemoryCursor extends AbstractCursor {
+
+    private static final int NUM_TYPES = 5;
+
+    private final String[] mColumnNames;
+    private final int mRowCount;
+
+    // This is an index of column, by type. Maps back to position
+    // in native array.
+    // E.g. if we have columns typed like [string, int, int, string, int, int]
+    // the values in this index will be:
+    // mTypedColumnIndex[string][0] == 0
+    // mTypedColumnIndex[int][1] == 0
+    // mTypedColumnIndex[int][2] == 1
+    // mTypedColumnIndex[string][3] == 1
+    // mTypedColumnIndex[int][4] == 2
+    // mTypedColumnIndex[int][4] == 3
+    // This allows us to calculate the number of cells by type in a row
+    // which, in turn, allows us to calculate the size of the primitive storage arrays.
+    // We also use this information to lookup a particular typed value given
+    // the row offset and column offset.
+    private final int[][] mTypedColumnIndex;
+
+    // simple index to column to type.
+    private final int[] mColumnType;
+
+    // count of number of columns by type.
+    private final int[] mColumnTypeCount;
+
+    private final Bundle mExtras;
+
+    private final ObserverRelay mObserverRelay;
+
+    // Row data decomposed by type.
+    private long[] mLongs;
+    private double[] mDoubles;
+    private byte[][] mBlobs;
+    private String[] mStrings;
+
+    /**
+     * @param cursor source of data to copy. Ownership is reserved to the called, meaning
+     *               we won't ever close it.
+     */
+    InMemoryCursor(Cursor cursor, int offset, int length, int disposition) {
+        checkArgument(offset < cursor.getCount());
+
+        // NOTE: The cursor could simply be saved to a field, but we choose to wrap
+        // in a dedicated relay class to avoid hanging directly onto a reference
+        // to the cursor...so future authors are not enticed to think there's
+        // a live link between the delegate cursor and this cursor.
+        mObserverRelay = new ObserverRelay(cursor);
+
+        mColumnNames = cursor.getColumnNames();
+        mRowCount = Math.min(length, cursor.getCount() - offset);
+        int numColumns = cursor.getColumnCount();
+
+        mExtras = ContentPager.buildExtras(cursor.getExtras(), cursor.getCount(), disposition);
+
+        mColumnType = new int[numColumns];
+        mTypedColumnIndex = new int[NUM_TYPES][numColumns];
+        mColumnTypeCount = new int[NUM_TYPES];
+
+        if (!cursor.moveToFirst()) {
+            throw new RuntimeException("Can't position cursor to first row.");
+        }
+
+        for (int col = 0; col < numColumns; col++) {
+            int type = cursor.getType(col);
+            mColumnType[col] = type;
+            mTypedColumnIndex[type][col] = mColumnTypeCount[type]++;
+        }
+
+        mLongs = new long[mRowCount * mColumnTypeCount[FIELD_TYPE_INTEGER]];
+        mDoubles = new double[mRowCount * mColumnTypeCount[FIELD_TYPE_FLOAT]];
+        mBlobs = new byte[mRowCount * mColumnTypeCount[FIELD_TYPE_BLOB]][];
+        mStrings = new String[mRowCount * mColumnTypeCount[FIELD_TYPE_STRING]];
+
+        for (int row = 0; row < mRowCount; row++) {
+            if (!cursor.moveToPosition(offset + row)) {
+                throw new RuntimeException("Unable to position cursor.");
+            }
+
+            // Now copy data from the row into primitive arrays.
+            for (int col = 0; col < mColumnType.length; col++) {
+                int type = mColumnType[col];
+                int position = getCellPosition(row, col, type);
+
+                switch(type) {
+                    case FIELD_TYPE_NULL:
+                        throw new UnsupportedOperationException("Not implemented.");
+                    case FIELD_TYPE_INTEGER:
+                        mLongs[position] = cursor.getLong(col);
+                        break;
+                    case FIELD_TYPE_FLOAT:
+                        mDoubles[position] = cursor.getDouble(col);
+                        break;
+                    case FIELD_TYPE_BLOB:
+                        mBlobs[position] = cursor.getBlob(col);
+                        break;
+                    case FIELD_TYPE_STRING:
+                        mStrings[position] = cursor.getString(col);
+                        break;
+                }
+            }
+        }
+    }
+
+    @Override
+    public Bundle getExtras() {
+        return mExtras;
+    }
+
+    // Returns the "cell" position for a specific row+column+type.
+    private int getCellPosition(int row,  int col, int type) {
+        return (row * mColumnTypeCount[type]) + mTypedColumnIndex[type][col];
+    }
+
+    @Override
+    public int getCount() {
+        return mRowCount;
+    }
+
+    @Override
+    public String[] getColumnNames() {
+        return mColumnNames;
+    }
+
+    @Override
+    public short getShort(int column) {
+        checkValidColumn(column);
+        checkValidPosition();
+        return (short) mLongs[getCellPosition(getPosition(), column, FIELD_TYPE_INTEGER)];
+    }
+
+    @Override
+    public int getInt(int column) {
+        checkValidColumn(column);
+        checkValidPosition();
+        return (int) mLongs[getCellPosition(getPosition(), column, FIELD_TYPE_INTEGER)];
+    }
+
+    @Override
+    public long getLong(int column) {
+        checkValidColumn(column);
+        checkValidPosition();
+        return mLongs[getCellPosition(getPosition(), column, FIELD_TYPE_INTEGER)];
+    }
+
+    @Override
+    public float getFloat(int column) {
+        checkValidColumn(column);
+        checkValidPosition();
+        return (float) mDoubles[getCellPosition(getPosition(), column, FIELD_TYPE_FLOAT)];
+    }
+
+    @Override
+    public double getDouble(int column) {
+        checkValidColumn(column);
+        checkValidPosition();
+        return mDoubles[getCellPosition(getPosition(), column, FIELD_TYPE_FLOAT)];
+    }
+
+    @Override
+    public byte[] getBlob(int column) {
+        checkValidColumn(column);
+        checkValidPosition();
+        return mBlobs[getCellPosition(getPosition(), column, FIELD_TYPE_BLOB)];
+    }
+
+    @Override
+    public String getString(int column) {
+        checkValidColumn(column);
+        checkValidPosition();
+        return mStrings[getCellPosition(getPosition(), column, FIELD_TYPE_STRING)];
+    }
+
+    @Override
+    public int getType(int column) {
+        checkValidColumn(column);
+        return mColumnType[column];
+    }
+
+    @Override
+    public boolean isNull(int column) {
+        checkValidColumn(column);
+        switch (mColumnType[column]) {
+            case FIELD_TYPE_STRING:
+                return getString(column) != null;
+            case FIELD_TYPE_BLOB:
+                return getBlob(column) != null;
+            default:
+                return false;
+        }
+    }
+
+    private void checkValidPosition() {
+        if (getPosition() < 0) {
+            throw new CursorIndexOutOfBoundsException("Before first row.");
+        }
+        if (getPosition() >= mRowCount) {
+            throw new CursorIndexOutOfBoundsException("After last row.");
+        }
+    }
+
+    private void checkValidColumn(int column) {
+        if (column < 0 || column >= mColumnNames.length) {
+            throw new CursorIndexOutOfBoundsException(
+                    "Requested column: " + column + ", # of columns: " + mColumnNames.length);
+        }
+    }
+
+    @Override
+    public void registerContentObserver(ContentObserver observer) {
+        mObserverRelay.registerContentObserver(observer);
+    }
+
+    @Override
+    public void unregisterContentObserver(ContentObserver observer) {
+        mObserverRelay.unregisterContentObserver(observer);
+    }
+
+    private static class ObserverRelay extends ContentObserver {
+        private final Cursor mCursor;
+
+        ObserverRelay(Cursor cursor) {
+            super(new Handler(Looper.getMainLooper()));
+            mCursor = cursor;
+        }
+
+        void registerContentObserver(ContentObserver observer) {
+            mCursor.registerContentObserver(observer);
+        }
+
+        void unregisterContentObserver(ContentObserver observer) {
+            mCursor.unregisterContentObserver(observer);
+        }
+    }
+}
diff --git a/content/src/android/support/content/LoaderQueryRunner.java b/content/src/android/support/content/LoaderQueryRunner.java
new file mode 100644
index 0000000..800307b
--- /dev/null
+++ b/content/src/android/support/content/LoaderQueryRunner.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static android.support.v4.util.Preconditions.checkArgument;
+
+import android.app.LoaderManager;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.Context;
+import android.content.Loader;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.util.Log;
+
+/**
+ * A {@link ContentPager.QueryRunner} that executes queries using a {@link LoaderManager}.
+ * Use this when preparing {@link ContentPager} to run in an Activity or Fragment scope.
+ */
+public final class LoaderQueryRunner implements ContentPager.QueryRunner {
+
+    private static final boolean DEBUG = false;
+    private static final String TAG = "LoaderQueryRunner";
+    private static final String CONTENT_URI_KEY = "contentUri";
+
+    private final Context mContext;
+    private final LoaderManager mLoaderMgr;
+
+    public LoaderQueryRunner(@NonNull Context context, @NonNull LoaderManager loaderMgr) {
+        mContext = context;
+        mLoaderMgr = loaderMgr;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")  // feels spurious. But can't commit line :80 w/o this.
+    public void query(final @NonNull Query query, @NonNull final Callback callback) {
+        if (DEBUG) Log.d(TAG, "Handling query: " + query);
+
+        LoaderCallbacks callbacks = new LoaderCallbacks<Cursor>() {
+            @Override
+            public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
+                if (DEBUG) Log.i(TAG, "Loading results for query: " + query);
+                checkArgument(id == query.getId(), "Id doesn't match query id.");
+
+                return new android.content.CursorLoader(mContext) {
+                    @Override
+                    public Cursor loadInBackground() {
+                        return callback.runQueryInBackground(query);
+                    }
+                };
+            }
+
+            @Override
+            public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
+                if (DEBUG) Log.i(TAG, "Finished loading: " + query);
+                mLoaderMgr.destroyLoader(query.getId());
+                callback.onQueryFinished(query, cursor);
+            }
+
+            @Override
+            public void onLoaderReset(Loader<Cursor> loader) {
+                if (DEBUG) Log.w(TAG, "Ignoring loader reset for query: " + query);
+            }
+        };
+
+        mLoaderMgr.restartLoader(query.getId(), null, callbacks);
+    }
+
+    @Override
+    public boolean isRunning(@NonNull Query query) {
+        Loader<Cursor> loader = mLoaderMgr.getLoader(query.getId());
+        return loader != null && loader.isStarted();
+        // Hmm, when exactly would the loader not be started? Does it imply that it will
+        // be starting at some point?
+    }
+
+    @Override
+    public void cancel(@NonNull Query query) {
+        mLoaderMgr.destroyLoader(query.getId());
+    }
+}
diff --git a/content/src/android/support/content/Query.java b/content/src/android/support/content/Query.java
new file mode 100644
index 0000000..a5d1ee5
--- /dev/null
+++ b/content/src/android/support/content/Query.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static android.support.v4.util.Preconditions.checkArgument;
+
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+
+import java.util.Arrays;
+
+/**
+ * Encapsulates information related to calling {@link ContentResolver#query},
+ * including the logic determining the best query method to call.
+ */
+public final class Query {
+
+    private static final boolean DEBUG = true;
+    private static final String TAG = "Query";
+
+    private final Uri mUri;
+    private final @Nullable String[] mProjection;
+    private final Bundle mQueryArgs;
+
+    private final int mId;
+    private final int mOffset;
+    private final int mLimit;
+
+    private final CancellationSignal mCancellationSignal;
+    private final ContentPager.ContentCallback mCallback;
+
+    @VisibleForTesting
+    Query(
+            @NonNull Uri uri,
+            @Nullable String[] projection,
+            @NonNull Bundle args,
+            @Nullable CancellationSignal cancellationSignal,
+            @NonNull ContentPager.ContentCallback callback) {
+
+        checkArgument(uri != null);
+        checkArgument(args != null);
+        checkArgument(callback != null);
+
+        this.mUri = uri;
+        this.mProjection = projection;
+        this.mQueryArgs = args;
+        this.mCancellationSignal = cancellationSignal;
+        this.mCallback = callback;
+
+        this.mOffset = args.getInt(ContentPager.QUERY_ARG_OFFSET, -1);
+        this.mLimit = args.getInt(ContentPager.QUERY_ARG_LIMIT, -1);
+
+        // NOTE: We omit mProjection and other details from ID. If a client wishes
+        // to request a page with a different mProjection or sorting, they should
+        // wait for first request to finish. Same goes for mCallback.
+        this.mId = uri.hashCode() << 16 | (mOffset | (mLimit << 8));
+
+        checkArgument(mOffset >= 0);  // mOffset must be set, mLimit is optional.
+    }
+
+    /**
+     * @return the id for this query. Derived from Uri as well as paging arguments.
+     */
+    public int getId() {
+        return mId;
+    }
+
+    /**
+     * @return the Uri.
+     */
+    public @NonNull Uri getUri() {
+        return mUri;
+    }
+
+    /**
+     * @return the offset.
+     */
+    public int getOffset() {
+        return mOffset;
+    }
+
+    /**
+     * @return the limit.
+     */
+    public int getLimit() {
+        return mLimit;
+    }
+
+    @NonNull ContentPager.ContentCallback getCallback() {
+        return mCallback;
+    }
+
+    @Nullable Cursor run(@NonNull ContentResolver resolver) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            return resolver.query(
+                    mUri,
+                    mProjection,
+                    mQueryArgs,
+                    mCancellationSignal);
+        }
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+            if (DEBUG) Log.d(TAG, "Falling back to pre-O query method.");
+            return resolver.query(
+                    mUri,
+                    mProjection,
+                    null,
+                    null,
+                    null,
+                    mCancellationSignal);
+        }
+
+        if (DEBUG) Log.d(TAG, "Falling back to pre-jellybean query method.");
+        return resolver.query(
+                mUri,
+                mProjection,
+                null,
+                null,
+                null);
+    }
+
+    void cancel() {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+            if (mCancellationSignal != null && !mCancellationSignal.isCanceled()) {
+                if (DEBUG) {
+                    Log.d(TAG, "Attemping to cancel query provider processings: " + this);
+                }
+                mCancellationSignal.cancel();
+            }
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+
+        if (this == obj) {
+            return true;
+        }
+
+        if (!(obj instanceof Query)) {
+            return false;
+        }
+
+        Query other = (Query) obj;
+
+        return mId == other.mId
+                && mUri.equals(other.mUri)
+                && mOffset == other.mOffset
+                && mLimit == other.mLimit;
+    }
+
+    @Override
+    public int hashCode() {
+        return getId();
+    }
+
+    @Override
+    public String toString() {
+        return "Query{"
+                + "id:" + mId
+                + " uri:" + mUri
+                + " projection:" + Arrays.toString(mProjection)
+                + " offset:" + mOffset
+                + " limit:" + mLimit
+                + " cancellationSignal:" + mCancellationSignal
+                + " callback:" + mCallback
+                + "}";
+    }
+}
diff --git a/content/tests/AndroidManifest.xml b/content/tests/AndroidManifest.xml
new file mode 100644
index 0000000..4a815c4
--- /dev/null
+++ b/content/tests/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:tools="http://schemas.android.com/tools"
+          package="android.support.content.test">
+    <uses-sdk android:minSdkVersion="14" />
+
+    <application android:supportsRtl="true">
+        <activity android:name="android.support.content.TestActivity" />
+
+        <!-- Must be run in-process for some of the test instrumentation to work correctly -->
+        <provider android:name="android.support.content.TestContentProvider"
+                  android:authorities="android.support.content.test.testpagingprovider"
+                  android:multiprocess="false" />
+    </application>
+</manifest>
diff --git a/content/tests/NO_DOCS b/content/tests/NO_DOCS
new file mode 100644
index 0000000..4dad694
--- /dev/null
+++ b/content/tests/NO_DOCS
@@ -0,0 +1,17 @@
+# Copyright (C) 2017 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.
+
+Having this file, named NO_DOCS, in a directory will prevent
+Android javadocs from being generated for java files under
+the directory. This is especially useful for test projects.
diff --git a/content/tests/java/android/support/content/ContentPagerTest.java b/content/tests/java/android/support/content/ContentPagerTest.java
new file mode 100644
index 0000000..fd682c6
--- /dev/null
+++ b/content/tests/java/android/support/content/ContentPagerTest.java
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static android.support.content.ContentPager.createArgs;
+import static android.support.content.TestContentProvider.PAGED_URI;
+import static android.support.content.TestContentProvider.PAGED_WINDOWED_URI;
+import static android.support.content.TestContentProvider.UNPAGED_URI;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+
+import static org.junit.Assert.assertFalse;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.Nullable;
+import android.support.content.ContentPager.ContentCallback;
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+@MediumTest
+@RunWith(AndroidJUnit4.class)
+public class ContentPagerTest {
+
+    private ContentResolver mResolver;
+    private TestQueryRunner mRunner;
+    private TestContentCallback mCallback;
+    private ContentPager mPager;
+
+    @Rule
+    public ActivityTestRule<Activity> mActivityRule = new ActivityTestRule(TestActivity.class);
+
+    @Before
+    public void setUp() {
+        mRunner = new TestQueryRunner();
+        mResolver = mActivityRule.getActivity().getContentResolver();
+        mCallback = new TestContentCallback();
+        mPager = new ContentPager(mResolver, mRunner);
+    }
+
+    @Test
+    public void testRelaysProviderPagedResults() throws Throwable {
+        int offset = 0;
+        int limit = 10;
+
+        // NOTE: Paging on Android O is accompolished by way of ContentResolver#query that
+        // accepts a Bundle. That means on older platforms we either have to cook up
+        // a special way of paging that doesn't use the bundle (that's what we do here)
+        // or we simply skip testing how we deal with provider paged results.
+        Uri uriWithTestPagingData = TestContentProvider.forcePagingSpec(PAGED_URI, offset, limit);
+
+        Query query = mPager.query(
+                uriWithTestPagingData,
+                null,
+                createArgs(offset, limit),
+                null,
+                mCallback);
+
+        mCallback.assertNumPagesLoaded(1);
+        mCallback.assertPageLoaded(query);
+        Cursor cursor = mCallback.getCursor(query);
+        Bundle extras = cursor.getExtras();
+
+        assertExpectedRecords(cursor, query.getOffset());
+
+        assertEquals(
+                ContentPager.CURSOR_DISPOSITION_PAGED,
+                extras.getInt(ContentPager.CURSOR_DISPOSITION, -1));
+
+        assertEquals(
+                TestContentProvider.DEFAULT_RECORD_COUNT,
+                extras.getInt(ContentResolver.EXTRA_TOTAL_COUNT));
+
+        assertHasHonoredArgs(
+                extras,
+                ContentResolver.QUERY_ARG_LIMIT,
+                ContentResolver.QUERY_ARG_OFFSET);
+
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_PROVIDER_PAGED));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_RESOLVED_QUERIES));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_TOTAL_QUERIES));
+    }
+
+    @Test
+    public void testLimitsPagedResultsToWindowSize() throws Throwable {
+        int offset = 0;
+        int limit = 10;
+
+        // NOTE: Paging on Android O is accompolished by way of ContentResolver#query that
+        // accepts a Bundle. That means on older platforms we either have to cook up
+        // a special way of paging that doesn't use the bundle (that's what we do here)
+        // or we simply skip testing how we deal with provider paged results.
+        Uri uriWithTestPagingData = TestContentProvider.forcePagingSpec(
+                PAGED_WINDOWED_URI, offset, limit);
+
+        Query query = mPager.query(
+                uriWithTestPagingData,
+                null,
+                createArgs(offset, limit),
+                null,
+                mCallback);
+
+        mCallback.assertNumPagesLoaded(1);
+        mCallback.assertPageLoaded(query);
+        Cursor cursor = mCallback.getCursor(query);
+        Bundle extras = cursor.getExtras();
+
+        assertExpectedRecords(cursor, query.getOffset());
+
+        assertEquals(
+                ContentPager.CURSOR_DISPOSITION_REPAGED,
+                extras.getInt(ContentPager.CURSOR_DISPOSITION, -1));
+
+        assertEquals(
+                TestContentProvider.DEFAULT_RECORD_COUNT,
+                extras.getInt(ContentResolver.EXTRA_TOTAL_COUNT));
+
+
+        assertEquals(limit, extras.getInt(ContentPager.EXTRA_REQUESTED_LIMIT));
+
+        assertEquals(7, extras.getInt(ContentPager.EXTRA_SUGGESTED_LIMIT));
+
+        assertHasHonoredArgs(
+                extras,
+                ContentResolver.QUERY_ARG_LIMIT,
+                ContentResolver.QUERY_ARG_OFFSET);
+
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_PROVIDER_PAGED));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_RESOLVED_QUERIES));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_TOTAL_QUERIES));
+    }
+
+    @Test
+    public void testAdaptsUnpagedToPaged() throws Throwable {
+        Query query = mPager.query(
+                UNPAGED_URI,
+                null,
+                createArgs(0, 10),
+                null,
+                mCallback);
+
+        mCallback.assertNumPagesLoaded(1);
+        mCallback.assertPageLoaded(query);
+        Cursor cursor = mCallback.getCursor(query);
+        Bundle extras = cursor.getExtras();
+
+        assertExpectedRecords(cursor, query.getOffset());
+
+        assertEquals(
+                ContentPager.CURSOR_DISPOSITION_COPIED,
+                extras.getInt(ContentPager.CURSOR_DISPOSITION));
+
+        assertEquals(
+                TestContentProvider.DEFAULT_RECORD_COUNT,
+                extras.getInt(ContentResolver.EXTRA_TOTAL_COUNT));
+
+        assertHasHonoredArgs(
+                extras,
+                ContentResolver.QUERY_ARG_LIMIT,
+                ContentResolver.QUERY_ARG_OFFSET);
+
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_COMPAT_PAGED));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_RESOLVED_QUERIES));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_TOTAL_QUERIES));
+    }
+
+    @Test
+    public void testCachesUnpagedCursor() throws Throwable {
+        mPager.query(
+                UNPAGED_URI,
+                null,
+                createArgs(0, 10),
+                null,
+                mCallback);
+
+        mPager.query(
+                UNPAGED_URI,
+                null,
+                createArgs(10, 10),
+                null,
+                mCallback);
+
+        // Rerun the same query as the first...extra exercise to ensure we can return
+        // to previously loaded results.
+        Query query = mPager.query(
+                UNPAGED_URI,
+                null,
+                createArgs(0, 10),
+                null,
+                mCallback);
+
+        mCallback.assertNumPagesLoaded(3);
+        Cursor cursor = mCallback.getCursor(query);
+        Bundle extras = cursor.getExtras();
+
+        assertEquals(
+                3,
+                extras.getInt(ContentPager.Stats.EXTRA_COMPAT_PAGED));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_RESOLVED_QUERIES));
+        assertEquals(
+                3,
+                extras.getInt(ContentPager.Stats.EXTRA_TOTAL_QUERIES));
+    }
+
+    @Test
+    public void testWrapsCursorsThatJustHappenToFitInPageRange() throws Throwable {
+
+        // NOTE: Paging on Android O is accompolished by way of ContentResolver#query that
+        // accepts a Bundle. That means on older platforms we either have to cook up
+        // a special way of paging that doesn't use the bundle (that's what we do here)
+        // or we simply skip testing how we deal with provider paged results.
+        Uri uri = TestContentProvider.forceRecordCount(UNPAGED_URI, 22);
+
+        Query query = mPager.query(
+                uri,
+                null,
+                createArgs(0, 44),
+                null,
+                mCallback);
+
+        mCallback.assertNumPagesLoaded(1);
+        // mCallback.assertPageLoaded(pageId);
+        mCallback.assertPageLoaded(query);
+        Cursor cursor = mCallback.getCursor(query);
+        Bundle extras = cursor.getExtras();
+
+        assertExpectedRecords(cursor, query.getOffset());
+
+        assertEquals(
+                ContentPager.CURSOR_DISPOSITION_WRAPPED,
+                extras.getInt(ContentPager.CURSOR_DISPOSITION));
+
+        assertEquals(
+                22,
+                extras.getInt(ContentResolver.EXTRA_TOTAL_COUNT));
+
+        assertHasHonoredArgs(
+                extras,
+                ContentResolver.QUERY_ARG_LIMIT,
+                ContentResolver.QUERY_ARG_OFFSET);
+
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_COMPAT_PAGED));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_RESOLVED_QUERIES));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_TOTAL_QUERIES));
+    }
+
+    @Test
+    public void testCorrectlyCopiesRecords_EndOfResults() throws Throwable {
+        // finally, check the last page.
+        int limit = 100;
+        // This will be the size of the last page. Should be 67.
+        int leftOvers = TestContentProvider.DEFAULT_RECORD_COUNT % limit;
+        int offset = TestContentProvider.DEFAULT_RECORD_COUNT - leftOvers;
+
+        Query query = mPager.query(
+                UNPAGED_URI,
+                null,
+                createArgs(offset, limit),
+                null,
+                mCallback);
+
+        mCallback.assertNumPagesLoaded(1);
+        mCallback.assertPageLoaded(query);
+        Cursor cursor = mCallback.getCursor(query);
+        assertEquals(leftOvers, cursor.getCount());
+        Bundle extras = cursor.getExtras();
+
+        assertExpectedRecords(cursor, query.getOffset());
+
+        assertEquals(
+                ContentPager.CURSOR_DISPOSITION_COPIED,
+                extras.getInt(ContentPager.CURSOR_DISPOSITION));
+
+        assertHasHonoredArgs(
+                extras,
+                ContentResolver.QUERY_ARG_LIMIT,
+                ContentResolver.QUERY_ARG_OFFSET);
+
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_COMPAT_PAGED));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_RESOLVED_QUERIES));
+        assertEquals(
+                1,
+                extras.getInt(ContentPager.Stats.EXTRA_TOTAL_QUERIES));
+    }
+
+    @Test
+    public void testCancelsRunningQueriesOnReset() throws Throwable {
+        mRunner.runQuery = false;
+        Query query = mPager.query(
+                UNPAGED_URI,
+                null,
+                createArgs(0, 10),
+                null,
+                mCallback);
+
+        assertTrue(mRunner.isRunning(query));
+
+        mPager.reset();
+
+        assertFalse(mRunner.isRunning(query));
+    }
+
+    @Test
+    public void testRelaysContentChangeNotificationsOnPagedCursors() throws Throwable {
+
+        TestContentObserver observer = new TestContentObserver(
+                new Handler(Looper.getMainLooper()));
+        observer.expectNotifications(1);
+
+        Query query = mPager.query(
+                UNPAGED_URI,
+                null,
+                createArgs(10, 99),
+                null,
+                mCallback);
+
+        Cursor cursor = mCallback.getCursor(query);
+        cursor.registerContentObserver(observer);
+
+        mResolver.notifyChange(UNPAGED_URI, null);
+
+        assertTrue(observer.mNotifiedLatch.await(1000, TimeUnit.MILLISECONDS));
+    }
+
+    private void assertExpectedRecords(Cursor cursor, int offset) {
+        for (int row = 0; row < cursor.getCount(); row++) {
+            assertTrue(cursor.moveToPosition(row));
+            int unpagedRow = offset + row;
+            for (int column = 0; column < cursor.getColumnCount(); column++) {
+                TestContentProvider.assertExpectedCellValue(cursor, unpagedRow, column);
+            }
+        }
+    }
+
+    private static void assertHasHonoredArgs(Bundle extras, String... expectedArgs) {
+        List<String> honored = Arrays.asList(
+                extras.getStringArray(ContentResolver.EXTRA_HONORED_ARGS));
+
+        for (String arg : expectedArgs) {
+            assertTrue(honored.contains(arg));
+        }
+    }
+
+    private static final class TestContentCallback implements ContentCallback {
+
+        private int mPagesLoaded;
+        private Map<Query, Cursor> mCursors = new HashMap<>();
+
+        @Override
+        public void onCursorReady(Query query, Cursor cursor) {
+            mPagesLoaded++;
+            mCursors.put(query, cursor);
+        }
+
+        private void assertPageLoaded(Query query) {
+            assertTrue(mCursors.containsKey(query));
+            assertNotNull(mCursors.get(query));
+        }
+
+        private void assertNumPagesLoaded(int expected) {
+            assertEquals(expected, mPagesLoaded);
+        }
+
+        private @Nullable Cursor getCursor(Query query) {
+            return mCursors.get(query);
+        }
+    }
+}
diff --git a/content/tests/java/android/support/content/LoaderQueryRunnerTest.java b/content/tests/java/android/support/content/LoaderQueryRunnerTest.java
new file mode 100644
index 0000000..a0ddd9a
--- /dev/null
+++ b/content/tests/java/android/support/content/LoaderQueryRunnerTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static android.support.content.ContentPager.createArgs;
+import static android.support.content.TestContentProvider.UNPAGED_URI;
+
+import android.app.Activity;
+import android.database.Cursor;
+import android.os.Looper;
+import android.support.content.ContentPager.ContentCallback;
+import android.support.content.ContentPager.QueryRunner;
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@MediumTest
+@RunWith(AndroidJUnit4.class)
+public class LoaderQueryRunnerTest {
+
+    @Rule
+    public ActivityTestRule<Activity> mActivityRule = new ActivityTestRule(TestActivity.class);
+
+    private Activity mActivity;
+    private QueryRunner mRunner;
+    private TestQueryCallback mCallback;
+
+    @Before
+    public void setUp() {
+        mActivity = mActivityRule.getActivity();
+        mRunner = new LoaderQueryRunner(mActivity, mActivity.getLoaderManager());
+        mCallback = new TestQueryCallback();
+    }
+
+    @Test
+    public void testRunsQuery() throws Throwable {
+        int offset = 0;
+        int limit = 10;
+
+        // Note: For some when running this test via tradefed (vs gradle) this
+        // looper setup code doesn't work when run *in setUp*. Works fine in Gradle.
+        // So this test fails when run on treehugger or run via tradefed.
+        // To work around that issue we prepare the looper here.
+        //
+        // "Wait!" you say, why do you need to prepare a looper? We're using
+        // a CursorLoader under the hoods which deep down creates an handler
+        // to listen for content changes. That's not critical to our test
+        // since we're waiting on results w/ latches, but we need to avoid the error.
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+
+        ContentCallback dummyContentCallback = new ContentCallback() {
+            @Override
+            public void onCursorReady(Query query, Cursor cursor) {
+                // Nothing to see here. Move along.
+            }
+        };
+        Query query = new Query(
+                UNPAGED_URI,
+                null,
+                createArgs(offset, limit),
+                null,
+                dummyContentCallback);
+
+        mCallback.reset(1);
+        mRunner.query(query, mCallback);
+
+        mCallback.waitFor(10);
+        mCallback.assertQueried(query.getId());
+        mCallback.assertReceivedContent(UNPAGED_URI, query.getId());
+    }
+}
diff --git a/content/tests/java/android/support/content/QueryTest.java b/content/tests/java/android/support/content/QueryTest.java
new file mode 100644
index 0000000..8943874
--- /dev/null
+++ b/content/tests/java/android/support/content/QueryTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static junit.framework.Assert.assertTrue;
+
+import android.database.Cursor;
+import android.net.Uri;
+import android.support.content.ContentPager.ContentCallback;
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@MediumTest
+@RunWith(AndroidJUnit4.class)
+public class QueryTest {
+
+    private static final Uri URI_HAMMY = Uri.parse("content://hammy");
+    private static final Uri URI_CHEESY = Uri.parse("content://cheesy");
+
+    private static final ContentCallback sCallback = new ContentCallback() {
+        @Override
+        public void onCursorReady(Query query, Cursor cursor) {
+            // nothing to see here. Move along.
+        }
+    };
+
+    @Test
+    public void testDistinctIdsForDifferentUris() throws Throwable {
+        Query queryA = new Query(
+                URI_HAMMY,
+                null,
+                ContentPager.createArgs(0, 10),
+                null,
+                sCallback);
+
+        Query queryB = new Query(
+                URI_CHEESY,
+                null,
+                ContentPager.createArgs(0, 10),
+                null,
+                sCallback);
+
+        assertDistinctIds(queryA, queryB);
+    }
+
+    @Test
+    public void testDistinctIdsForDifferentPagingArgs() throws Throwable {
+        Query queryA = new Query(
+                URI_HAMMY,
+                null,
+                ContentPager.createArgs(0, 10),
+                null,
+                sCallback);
+
+        Query queryB = new Query(
+                URI_HAMMY,
+                null,
+                ContentPager.createArgs(10, 10),
+                null,
+                sCallback);
+
+        assertDistinctIds(queryA, queryB);
+    }
+
+    private void assertDistinctIds(Query a, Query b) {
+        String msg = String.format(
+                "id A (%d) and id B (%d) are equal, but should not be.",
+                a.getId(),
+                b.getId());
+        assertTrue(msg, a.getId() != b.getId());
+    }
+}
diff --git a/content/tests/java/android/support/content/TestActivity.java b/content/tests/java/android/support/content/TestActivity.java
new file mode 100644
index 0000000..dc85c44
--- /dev/null
+++ b/content/tests/java/android/support/content/TestActivity.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import android.app.Activity;
+
+/**
+ * TestActivity.
+ */
+public class TestActivity extends Activity {
+}
diff --git a/content/tests/java/android/support/content/TestContentObserver.java b/content/tests/java/android/support/content/TestContentObserver.java
new file mode 100644
index 0000000..be0004b
--- /dev/null
+++ b/content/tests/java/android/support/content/TestContentObserver.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.support.annotation.VisibleForTesting;
+
+import java.util.concurrent.CountDownLatch;
+
+final class TestContentObserver extends ContentObserver {
+
+    @VisibleForTesting
+    public CountDownLatch mNotifiedLatch;
+
+    TestContentObserver(Handler handler) {
+        super(handler);
+    }
+
+    void expectNotifications(int count) {
+        mNotifiedLatch = new CountDownLatch(count);
+    }
+
+    @Override
+    public void onChange(boolean selfChange) {
+        mNotifiedLatch.countDown();
+    }
+
+    @Override
+    public void onChange(boolean selfChange, Uri uri) {
+        mNotifiedLatch.countDown();
+    }
+}
diff --git a/content/tests/java/android/support/content/TestContentProvider.java b/content/tests/java/android/support/content/TestContentProvider.java
new file mode 100644
index 0000000..e474240
--- /dev/null
+++ b/content/tests/java/android/support/content/TestContentProvider.java
@@ -0,0 +1,396 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static junit.framework.Assert.assertEquals;
+
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.database.AbstractWindowedCursor;
+import android.database.Cursor;
+import android.database.CursorWindow;
+import android.database.MatrixCursor;
+import android.database.MatrixCursor.RowBuilder;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+
+/**
+ * A stub data paging provider used for testing of paging support.
+ * Ignores client supplied projections.
+ */
+public final class TestContentProvider extends ContentProvider {
+
+    public static final String AUTHORITY = "android.support.content.test.testpagingprovider";
+
+    public static final String UNPAGED_PATH = "/un-paged";
+    public static final String PAGED_PATH = "/paged";
+    public static final String PAGED_WINDOWED_PATH = PAGED_PATH + "/windowed";
+
+    public static final Uri UNPAGED_URI = new Uri.Builder()
+            .scheme("content")
+            .authority(AUTHORITY)
+            .path(UNPAGED_PATH)
+            .build();
+    public static final Uri PAGED_URI = new Uri.Builder()
+            .scheme("content")
+            .authority(AUTHORITY)
+            .path(PAGED_PATH)
+            .build();
+    public static final Uri PAGED_WINDOWED_URI = new Uri.Builder()
+            .scheme("content")
+            .authority(AUTHORITY)
+            .path(PAGED_WINDOWED_PATH)
+            .build();
+
+    public static final String COLUMN_POS = "ColumnPos";
+    public static final String COLUMN_A = "ColumnA";
+    public static final String COLUMN_B = "ColumnB";
+    public static final String COLUMN_C = "ColumnC";
+    public static final String COLUMN_D = "ColumnD";
+    public static final String[] PROJECTION = {
+            COLUMN_POS,
+            COLUMN_A,
+            COLUMN_B,
+            COLUMN_C,
+            COLUMN_D
+    };
+
+    @VisibleForTesting
+    public static final String RECORD_COUNT = "test-record-count";
+
+    @VisibleForTesting
+    public static final int DEFAULT_RECORD_COUNT = 567;
+
+    private static final String TAG = "TestPagingProvider";
+
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    @Override
+    public Cursor query(
+            Uri uri, @Nullable String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return query(uri, projection, null, null);
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] ignored, Bundle queryArgs,
+            CancellationSignal cancellationSignal) {
+
+        queryArgs = queryArgs != null ? queryArgs : Bundle.EMPTY;
+
+        int recordCount = getIntValue(RECORD_COUNT, queryArgs, uri, DEFAULT_RECORD_COUNT);
+        if (recordCount < 0) {
+            throw new RuntimeException("Recordset size must be >= 0");
+        }
+
+        Cursor cursor = null;
+        switch (uri.getPath()) {
+            case UNPAGED_PATH:
+                cursor = buildUnpagedResults(recordCount);
+                break;
+            case PAGED_PATH:
+                cursor = buildPagedResults(uri, queryArgs, recordCount);
+                break;
+            case PAGED_WINDOWED_PATH:
+                cursor = buildPagedWindowedResults(uri, queryArgs, recordCount);
+                break;
+            default:
+                throw new IllegalArgumentException("Unrecognized path: " + uri.getPath());
+        }
+
+        cursor.setNotificationUri(getContext().getContentResolver(), uri);
+
+        return cursor;
+    }
+
+    /**
+     * Return a int value specified in Bundle key, Uri query arg, or fallback default value.
+     */
+    private static int getIntValue(String key, Bundle queryArgs, Uri uri, int defaultValue) {
+        int value = queryArgs.getInt(key, Integer.MIN_VALUE);
+        if (value != Integer.MIN_VALUE) {
+            return value;
+        }
+
+        @Nullable String argValue = uri.getQueryParameter(key);
+        if (argValue != null) {
+            try {
+                return Integer.parseInt(argValue);
+            } catch (NumberFormatException ignored) {
+            }
+        }
+
+        return defaultValue;
+    }
+
+    private MatrixCursor buildPagedResults(Uri uri, Bundle queryArgs, int recordsetSize) {
+        int offset = getIntValue(ContentResolver.QUERY_ARG_OFFSET, queryArgs, uri, 0);
+        int limit = getIntValue(ContentResolver.QUERY_ARG_LIMIT, queryArgs, uri, recordsetSize);
+
+        MatrixCursor c = createInMemoryCursor();
+        Bundle extras = c.getExtras();
+
+        // Calculate the number of items to include in the cursor.
+        int numItems = constrain(recordsetSize - offset, 0, limit);
+
+        // Build the paged result set.
+        for (int i = offset; i < offset + numItems; i++) {
+            fillRow(c.newRow(), i);
+        }
+
+        extras.putStringArray(ContentResolver.EXTRA_HONORED_ARGS, new String[] {
+                ContentResolver.QUERY_ARG_OFFSET,
+                ContentResolver.QUERY_ARG_LIMIT
+        });
+        extras.putInt(ContentResolver.EXTRA_TOTAL_COUNT, recordsetSize);
+        return c;
+    }
+
+    private AbstractWindowedCursor buildPagedWindowedResults(
+            Uri uri, Bundle queryArgs, int recordsetSize) {
+        int offset = getIntValue(ContentResolver.QUERY_ARG_OFFSET, queryArgs, uri, 0);
+        int limit = getIntValue(ContentResolver.QUERY_ARG_LIMIT, queryArgs, uri, recordsetSize);
+
+        int windowSize = limit - 1;
+
+        TestWindowedCursor c = new TestWindowedCursor(PROJECTION, recordsetSize);
+        CursorWindow window = c.getWindow();
+        window.setNumColumns(PROJECTION.length);
+
+        Bundle extras = c.getExtras();
+
+        // Build the unpaged result set.
+        for (int row = 0; row < windowSize; row++) {
+            if (!window.allocRow()) {
+                break;
+            }
+            if (!fillRow(window, row)) {
+                window.freeLastRow();
+                break;
+            }
+        }
+
+        extras.putStringArray(ContentResolver.EXTRA_HONORED_ARGS, new String[] {
+                ContentResolver.QUERY_ARG_OFFSET,
+                ContentResolver.QUERY_ARG_LIMIT
+        });
+        extras.putInt(ContentResolver.EXTRA_TOTAL_COUNT, recordsetSize);
+        return c;
+    }
+
+    private MatrixCursor buildUnpagedResults(int recordsetSize) {
+        MatrixCursor c = createInMemoryCursor();
+
+        // Build the unpaged result set.
+        for (int i = 0; i < recordsetSize; i++) {
+            fillRow(c.newRow(), i);
+        }
+
+        return c;
+    }
+
+    /**
+     * Returns data type of the given object's value.
+     *<p>
+     * Returned values are
+     * <ul>
+     *   <li>{@link Cursor#FIELD_TYPE_NULL}</li>
+     *   <li>{@link Cursor#FIELD_TYPE_INTEGER}</li>
+     *   <li>{@link Cursor#FIELD_TYPE_FLOAT}</li>
+     *   <li>{@link Cursor#FIELD_TYPE_STRING}</li>
+     *   <li>{@link Cursor#FIELD_TYPE_BLOB}</li>
+     *</ul>
+     *</p>
+     */
+    public static int getTypeOfObject(Object obj) {
+        if (obj == null) {
+            return Cursor.FIELD_TYPE_NULL;
+        } else if (obj instanceof byte[]) {
+            return Cursor.FIELD_TYPE_BLOB;
+        } else if (obj instanceof Float || obj instanceof Double) {
+            return Cursor.FIELD_TYPE_FLOAT;
+        } else if (obj instanceof Long || obj instanceof Integer
+                || obj instanceof Short || obj instanceof Byte) {
+            return Cursor.FIELD_TYPE_INTEGER;
+        } else {
+            return Cursor.FIELD_TYPE_STRING;
+        }
+    }
+
+    private MatrixCursor createInMemoryCursor() {
+        MatrixCursor c = new MatrixCursor(PROJECTION);
+        Bundle extras = new Bundle();
+        c.setExtras(extras);
+        return c;
+    }
+
+    private void fillRow(RowBuilder row, int rowId) {
+        row.add(createCellValue(rowId, 0));
+        row.add(createCellValue(rowId, 1));
+        row.add(createCellValue(rowId, 2));
+        row.add(createCellValue(rowId, 3));
+        row.add(createCellValue(rowId, 4));
+    }
+
+    /**
+     * @return true if the row was successfully populated. If false, caller should freeLastRow.
+     */
+    private static boolean fillRow(CursorWindow window, int row) {
+        if (!window.putLong((int) createCellValue(row, 0), row, 0)) {
+            return false;
+        }
+        for (int i = 1; i < PROJECTION.length; i++) {
+            if (!window.putString((String) createCellValue(row, i), row, i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private static Object createCellValue(int row, int col) {
+        switch(col) {
+            case 0:
+                return row;
+            case 1:
+                return "--aaa--" + row;
+            case 2:
+                return "**bbb**" + row;
+            case 3:
+                return ("^^ccc^^" + row);
+            case 4:
+                return "##ddd##" + row;
+            default:
+                throw new IllegalArgumentException("Unsupported column: " + col);
+        }
+    }
+
+    /**
+     * Asserts that the value at the current cursor position x column
+     * is expected test data for the supplied row.
+     *
+     * <p>Cursor must be pre-positioned.
+     *
+     * @param cursor must be prepositioned to the row to be tested.
+     * @param row row value expected to be reflected in cell. This can be different
+     *            than the cursor position due to paging.
+     * @param column
+     */
+    @VisibleForTesting
+    public static void assertExpectedCellValue(Cursor cursor, int row, int column) {
+        int type = cursor.getType(column);
+        switch(type) {
+            case Cursor.FIELD_TYPE_NULL:
+                throw new UnsupportedOperationException("Not implemented.");
+            case Cursor.FIELD_TYPE_INTEGER:
+                assertEquals(createCellValue(row, column), cursor.getInt(column));
+                break;
+            case Cursor.FIELD_TYPE_FLOAT:
+                assertEquals(createCellValue(row, column), cursor.getDouble(column));
+                break;
+            case Cursor.FIELD_TYPE_BLOB:
+                assertEquals(createCellValue(row, column), cursor.getBlob(column));
+                break;
+            case Cursor.FIELD_TYPE_STRING:
+                assertEquals(createCellValue(row, column), cursor.getString(column));
+                break;
+            default:
+                throw new UnsupportedOperationException("Unknown column type: " + type);
+        }
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+        throw new UnsupportedOperationException();
+    }
+
+    private static int constrain(int amount, int low, int high) {
+        return amount < low ? low : (amount > high ? high : amount);
+    }
+
+    /**
+     * Returns a Uri that includes paging information embedded in the URI.
+     * This allows a test client to force paged results when running on older SDKs...
+     * pre Android O SDKs lacking the ContentResolver#query w/ Bundle override
+     * necessary for paging.
+     */
+    public static Uri forcePagingSpec(Uri uri, int offset, int limit) {
+        assert (uri.getPath().equals(TestContentProvider.PAGED_PATH)
+                || uri.getPath().equals(TestContentProvider.PAGED_WINDOWED_PATH));
+        return uri.buildUpon()
+                .appendQueryParameter(ContentResolver.QUERY_ARG_OFFSET, String.valueOf(offset))
+                .appendQueryParameter(ContentResolver.QUERY_ARG_LIMIT, String.valueOf(limit))
+                .build();
+    }
+
+    public static Uri forceRecordCount(Uri uri, int recordCount) {
+        return uri.buildUpon()
+                .appendQueryParameter(RECORD_COUNT, String.valueOf(recordCount))
+                .build();
+    }
+
+    private static final class TestWindowedCursor extends AbstractWindowedCursor {
+
+        private final String[] mProjection;
+        private final int mCount;
+        private final Bundle mExtras;
+
+        TestWindowedCursor(String[] projection, int count) {
+            mProjection = projection;
+            mCount = count;
+            mExtras = new Bundle();
+
+            setWindow(new CursorWindow("stevie"));
+        }
+
+        @Override
+        public Bundle getExtras() {
+            return mExtras;
+        }
+
+        @Override
+        public int getCount() {
+            return mCount;
+        }
+
+        @Override
+        public String[] getColumnNames() {
+            return mProjection;
+        }
+    }
+}
diff --git a/content/tests/java/android/support/content/TestQueryCallback.java b/content/tests/java/android/support/content/TestQueryCallback.java
new file mode 100644
index 0000000..2ed975d
--- /dev/null
+++ b/content/tests/java/android/support/content/TestQueryCallback.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.util.Pair;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+final class TestQueryCallback implements ContentPager.QueryRunner.Callback {
+
+    private static final String URI_KEY = "testUri";
+    private static final String URI_PAGE_ID = "testPageId";
+
+    private CollectorLatch<Query> mQueryLatch;
+    private CollectorLatch<Pair<Integer, Cursor>> mReplyLatch;
+
+    @Override
+    public @Nullable Cursor runQueryInBackground(Query query) {
+        mQueryLatch.accept(query);
+        Bundle extras = new Bundle();
+        extras.putParcelable(URI_KEY, query.getUri());
+        extras.putInt(URI_PAGE_ID, query.getId());
+        MatrixCursor cursor = new MatrixCursor(new String[]{"id"}, 0);
+        cursor.setExtras(extras);
+        return cursor;
+    }
+
+    @Override
+    public void onQueryFinished(Query query, Cursor cursor) {
+        mReplyLatch.accept(new Pair<>(query.getId(), cursor));
+    }
+
+    public void reset(int expectedCount) throws InterruptedException {
+        mQueryLatch = new CollectorLatch<>(expectedCount);
+        mReplyLatch = new CollectorLatch<>(expectedCount);
+    }
+
+    public void waitFor(int seconds) throws InterruptedException {
+        assertTrue(mQueryLatch.await(seconds, TimeUnit.SECONDS));
+        assertTrue(mReplyLatch.await(seconds, TimeUnit.SECONDS));
+    }
+
+    public void assertQueried(final int expectedPageId) {
+        mQueryLatch.assertHasItem(new Matcher<Query>() {
+            @Override
+            public boolean matches(Query query) {
+                return expectedPageId == query.getId();
+            }
+        });
+    }
+
+    public void assertReceivedContent(Uri expectedUri, final int expectedPageId) {
+        mReplyLatch.assertHasItem(new Matcher<Pair<Integer, Cursor>>() {
+            @Override
+            public boolean matches(Pair<Integer, Cursor> value) {
+                return expectedPageId == value.first;
+            }
+        });
+        List<Pair<Integer, Cursor>> collected = mReplyLatch.getCollected();
+        Cursor cursor = null;
+
+        for (Pair<Integer, Cursor> pair : collected) {
+            if (expectedPageId == pair.first) {
+                cursor = pair.second;
+            }
+        }
+
+        assertEquals(0, cursor.getCount());  // we don't add any records to our test cursor.
+        Bundle extras = cursor.getExtras();
+        assertNotNull(extras);
+        assertTrue(extras.containsKey(URI_KEY));
+        assertEquals(extras.getParcelable(URI_KEY), expectedUri);
+        assertTrue(extras.containsKey(URI_PAGE_ID));
+        assertEquals(extras.getInt(URI_PAGE_ID), expectedPageId);
+    }
+
+    private static final class CollectorLatch<T> extends CountDownLatch {
+
+        private final List<T> mCollected = new ArrayList<>();
+
+        CollectorLatch(int count) {
+            super(count);
+        }
+
+        void accept(@Nullable T value) {
+            onReceived(value);
+            super.countDown();
+        }
+
+        @Override
+        public void countDown() {
+            throw new UnsupportedOperationException("Count is incremented by calls to accept.");
+        }
+
+        void onReceived(@Nullable T value) {
+            mCollected.add(value);
+        }
+
+        List<T> getCollected() {
+            return mCollected;
+        }
+
+        public void assertHasItem(Matcher<T> matcher) {
+            T item = null;
+            for (T val : mCollected) {
+                if (matcher.matches(val)) {
+                    item = val;
+                }
+            }
+            assertNotNull(item);
+        }
+
+        public @Nullable T get(int index) {
+            return mCollected.get(index);
+        }
+    }
+
+    interface Matcher<T> {
+        boolean matches(T value);
+    }
+}
diff --git a/content/tests/java/android/support/content/TestQueryRunner.java b/content/tests/java/android/support/content/TestQueryRunner.java
new file mode 100644
index 0000000..957d814
--- /dev/null
+++ b/content/tests/java/android/support/content/TestQueryRunner.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 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.support.content;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Test friendly synchronous QueryRunner. Not suitable for use
+ * in production code.
+ */
+public final class TestQueryRunner implements ContentPager.QueryRunner {
+
+    // if false, we'll skip calling through to the mCallback when query is called
+    // this simulates async processing, and allows tests to check that cancel
+    // is handled correctly.
+    public boolean runQuery = true;
+
+    private final Set<Query> mRunning = new HashSet<>();
+
+    @Override
+    public void query(Query query, Callback callback) {
+        if (runQuery) {
+            callback.onQueryFinished(query, callback.runQueryInBackground(query));
+        } else {
+            mRunning.add(query);
+        }
+    }
+
+    @Override
+    public boolean isRunning(Query query) {
+        return mRunning.contains(query);
+    }
+
+    @Override
+    public void cancel(Query query) {
+        mRunning.remove(query);
+    }
+}
diff --git a/core-ui/build.gradle b/core-ui/build.gradle
index 0cbea4a..6f88e9a 100644
--- a/core-ui/build.gradle
+++ b/core-ui/build.gradle
@@ -4,14 +4,10 @@
     api project(':support-annotations')
     api project(':support-compat')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
     androidTestImplementation project(':support-testutils')
 }
 
@@ -29,10 +25,6 @@
     buildTypes.all {
         consumerProguardFiles 'proguard-rules.pro'
     }
-
-    testOptions {
-        unitTests.returnDefaultValues = true
-    }
 }
 
 supportLibrary {
diff --git a/core-utils/Android.mk b/core-utils/Android.mk
index b22c376..5ea200e 100644
--- a/core-utils/Android.mk
+++ b/core-utils/Android.mk
@@ -29,10 +29,7 @@
 LOCAL_SRC_FILES := \
     $(call all-java-files-under,gingerbread) \
     $(call all-java-files-under,kitkat) \
-    $(call all-java-files-under,api20) \
     $(call all-java-files-under,api21) \
-    $(call all-java-files-under,api23) \
-    $(call all-java-files-under,api24) \
     $(call all-java-files-under,java)
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 LOCAL_SHARED_ANDROID_LIBRARIES := \
diff --git a/core-utils/build.gradle b/core-utils/build.gradle
index c6e98f0..239516f 100644
--- a/core-utils/build.gradle
+++ b/core-utils/build.gradle
@@ -4,14 +4,10 @@
     api project(':support-annotations')
     api project(':support-compat')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
 }
 
 android {
diff --git a/customtabs/build.gradle b/customtabs/build.gradle
index 17e8cb9..fe2b1cf 100644
--- a/customtabs/build.gradle
+++ b/customtabs/build.gradle
@@ -4,12 +4,8 @@
     api project(':support-compat')
     api project(':support-annotations')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner,   { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core, { exclude module: 'support-annotations' }
     androidTestImplementation project(':support-testutils')
 }
 
diff --git a/droiddoc.mk b/droiddoc.mk
deleted file mode 100644
index 0913f5f..0000000
--- a/droiddoc.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright (C) 2017 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.
-#
-
-# API Level information for the Support Library, which is currently
-# included as part of the core framework docs build.
-SUPPORT_PATH := $(call my-dir)
-
-framework_docs_LOCAL_DROIDDOC_OPTIONS += \
-    -since $(SUPPORT_PATH)/api/22.0.0.txt 22.0.0 \
-    -since $(SUPPORT_PATH)/api/22.1.0.txt 22.1.0 \
-    -since $(SUPPORT_PATH)/api/22.2.0.txt 22.2.0 \
-    -since $(SUPPORT_PATH)/api/22.2.1.txt 22.2.1 \
-    -since $(SUPPORT_PATH)/api/23.0.0.txt 23.0.0 \
-    -since $(SUPPORT_PATH)/api/23.1.0.txt 23.1.0 \
-    -since $(SUPPORT_PATH)/api/23.1.1.txt 23.1.1 \
-    -since $(SUPPORT_PATH)/api/23.2.0.txt 23.2.0 \
-    -since $(SUPPORT_PATH)/api/23.2.1.txt 23.2.1 \
-    -since $(SUPPORT_PATH)/api/23.4.0.txt 23.4.0 \
-    -since $(SUPPORT_PATH)/api/24.0.0.txt 24.0.0 \
-    -since $(SUPPORT_PATH)/api/24.1.0.txt 24.1.0 \
-    -since $(SUPPORT_PATH)/api/24.2.0.txt 24.2.0 \
-    -since $(SUPPORT_PATH)/api/25.0.0.txt 25.0.0 \
-    -since $(SUPPORT_PATH)/api/25.1.0.txt 25.1.0 \
-    -since $(SUPPORT_PATH)/api/25.2.0.txt 25.2.0 \
-    -since $(SUPPORT_PATH)/api/25.3.0.txt 25.3.0 \
-    -since $(SUPPORT_PATH)/api/25.4.0.txt 25.4.0 \
-    -since $(SUPPORT_PATH)/api/26.0.0-alpha1.txt 26.0.0-alpha1 \
-    -since $(SUPPORT_PATH)/api/26.0.0-beta1.txt 26.0.0-beta1 \
-    -since $(SUPPORT_PATH)/api/26.0.0-beta2.txt 26.0.0-beta2
diff --git a/dynamic-animation/build.gradle b/dynamic-animation/build.gradle
index 2667bef..8ceaaf3 100644
--- a/dynamic-animation/build.gradle
+++ b/dynamic-animation/build.gradle
@@ -3,14 +3,10 @@
 dependencies {
     api project(':support-core-utils')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
 }
 
 android {
diff --git a/emoji/appcompat/build.gradle b/emoji/appcompat/build.gradle
index 05bff7f..a545352 100644
--- a/emoji/appcompat/build.gradle
+++ b/emoji/appcompat/build.gradle
@@ -23,8 +23,6 @@
 }
 
 android {
-    compileSdkVersion project.ext.currentSdk
-
     defaultConfig {
         minSdkVersion 14
     }
diff --git a/emoji/bundled/build.gradle b/emoji/bundled/build.gradle
index 1309a72..10eecb2 100644
--- a/emoji/bundled/build.gradle
+++ b/emoji/bundled/build.gradle
@@ -5,8 +5,6 @@
 }
 
 android {
-    compileSdkVersion project.ext.currentSdk
-
     defaultConfig {
         minSdkVersion 14
     }
diff --git a/emoji/core/build.gradle b/emoji/core/build.gradle
index 75d1b45..31de0d0 100644
--- a/emoji/core/build.gradle
+++ b/emoji/core/build.gradle
@@ -16,20 +16,14 @@
 
     api project(':support-compat')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
     androidTestImplementation project(':support-testutils')
 }
 
 android {
-    compileSdkVersion project.ext.currentSdk
-
     defaultConfig {
         minSdkVersion 14
     }
diff --git a/exifinterface/build.gradle b/exifinterface/build.gradle
index 26b6069..5a9d602 100644
--- a/exifinterface/build.gradle
+++ b/exifinterface/build.gradle
@@ -3,9 +3,7 @@
 dependencies {
     api project(':support-annotations')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner,   { exclude module: 'support-annotations' }
 }
 
 android {
diff --git a/fragment/build.gradle b/fragment/build.gradle
index 0f030c4..b484bc4 100644
--- a/fragment/build.gradle
+++ b/fragment/build.gradle
@@ -6,14 +6,10 @@
     api project(':support-core-utils')
     api project(':support-annotations')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
 }
 
 android {
diff --git a/fragment/java/android/support/v4/app/Fragment.java b/fragment/java/android/support/v4/app/Fragment.java
index f8e3d47..7639568 100644
--- a/fragment/java/android/support/v4/app/Fragment.java
+++ b/fragment/java/android/support/v4/app/Fragment.java
@@ -39,7 +39,6 @@
 import android.support.v4.util.SimpleArrayMap;
 import android.support.v4.view.LayoutInflaterCompat;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.util.SparseArray;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
@@ -57,119 +56,6 @@
 import java.io.PrintWriter;
 import java.lang.reflect.InvocationTargetException;
 
-final class FragmentState implements Parcelable {
-    final String mClassName;
-    final int mIndex;
-    final boolean mFromLayout;
-    final int mFragmentId;
-    final int mContainerId;
-    final String mTag;
-    final boolean mRetainInstance;
-    final boolean mDetached;
-    final Bundle mArguments;
-    final boolean mHidden;
-
-    Bundle mSavedFragmentState;
-
-    Fragment mInstance;
-
-    public FragmentState(Fragment frag) {
-        mClassName = frag.getClass().getName();
-        mIndex = frag.mIndex;
-        mFromLayout = frag.mFromLayout;
-        mFragmentId = frag.mFragmentId;
-        mContainerId = frag.mContainerId;
-        mTag = frag.mTag;
-        mRetainInstance = frag.mRetainInstance;
-        mDetached = frag.mDetached;
-        mArguments = frag.mArguments;
-        mHidden = frag.mHidden;
-    }
-
-    public FragmentState(Parcel in) {
-        mClassName = in.readString();
-        mIndex = in.readInt();
-        mFromLayout = in.readInt() != 0;
-        mFragmentId = in.readInt();
-        mContainerId = in.readInt();
-        mTag = in.readString();
-        mRetainInstance = in.readInt() != 0;
-        mDetached = in.readInt() != 0;
-        mArguments = in.readBundle();
-        mHidden = in.readInt() != 0;
-        mSavedFragmentState = in.readBundle();
-    }
-
-    public Fragment instantiate(FragmentHostCallback host, FragmentContainer container,
-            Fragment parent, FragmentManagerNonConfig childNonConfig) {
-        if (mInstance == null) {
-            final Context context = host.getContext();
-            if (mArguments != null) {
-                mArguments.setClassLoader(context.getClassLoader());
-            }
-
-            if (container != null) {
-                mInstance = container.instantiate(context, mClassName, mArguments);
-            } else {
-                mInstance = Fragment.instantiate(context, mClassName, mArguments);
-            }
-
-            if (mSavedFragmentState != null) {
-                mSavedFragmentState.setClassLoader(context.getClassLoader());
-                mInstance.mSavedFragmentState = mSavedFragmentState;
-            }
-            mInstance.setIndex(mIndex, parent);
-            mInstance.mFromLayout = mFromLayout;
-            mInstance.mRestored = true;
-            mInstance.mFragmentId = mFragmentId;
-            mInstance.mContainerId = mContainerId;
-            mInstance.mTag = mTag;
-            mInstance.mRetainInstance = mRetainInstance;
-            mInstance.mDetached = mDetached;
-            mInstance.mHidden = mHidden;
-            mInstance.mFragmentManager = host.mFragmentManager;
-
-            if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG,
-                    "Instantiated fragment " + mInstance);
-        }
-        mInstance.mChildNonConfig = childNonConfig;
-        return mInstance;
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeString(mClassName);
-        dest.writeInt(mIndex);
-        dest.writeInt(mFromLayout ? 1 : 0);
-        dest.writeInt(mFragmentId);
-        dest.writeInt(mContainerId);
-        dest.writeString(mTag);
-        dest.writeInt(mRetainInstance ? 1 : 0);
-        dest.writeInt(mDetached ? 1 : 0);
-        dest.writeBundle(mArguments);
-        dest.writeInt(mHidden? 1 : 0);
-        dest.writeBundle(mSavedFragmentState);
-    }
-
-    public static final Parcelable.Creator<FragmentState> CREATOR
-            = new Parcelable.Creator<FragmentState>() {
-        @Override
-        public FragmentState createFromParcel(Parcel in) {
-            return new FragmentState(in);
-        }
-
-        @Override
-        public FragmentState[] newArray(int size) {
-            return new FragmentState[size];
-        }
-    };
-}
-
 /**
  * Static library support version of the framework's {@link android.app.Fragment}.
  * Used to write apps that run on platforms prior to Android 3.0.  When running
diff --git a/fragment/java/android/support/v4/app/FragmentState.java b/fragment/java/android/support/v4/app/FragmentState.java
new file mode 100644
index 0000000..dbe6327
--- /dev/null
+++ b/fragment/java/android/support/v4/app/FragmentState.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2017 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.support.v4.app;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+final class FragmentState implements Parcelable {
+    final String mClassName;
+    final int mIndex;
+    final boolean mFromLayout;
+    final int mFragmentId;
+    final int mContainerId;
+    final String mTag;
+    final boolean mRetainInstance;
+    final boolean mDetached;
+    final Bundle mArguments;
+    final boolean mHidden;
+
+    Bundle mSavedFragmentState;
+
+    Fragment mInstance;
+
+    FragmentState(Fragment frag) {
+        mClassName = frag.getClass().getName();
+        mIndex = frag.mIndex;
+        mFromLayout = frag.mFromLayout;
+        mFragmentId = frag.mFragmentId;
+        mContainerId = frag.mContainerId;
+        mTag = frag.mTag;
+        mRetainInstance = frag.mRetainInstance;
+        mDetached = frag.mDetached;
+        mArguments = frag.mArguments;
+        mHidden = frag.mHidden;
+    }
+
+    FragmentState(Parcel in) {
+        mClassName = in.readString();
+        mIndex = in.readInt();
+        mFromLayout = in.readInt() != 0;
+        mFragmentId = in.readInt();
+        mContainerId = in.readInt();
+        mTag = in.readString();
+        mRetainInstance = in.readInt() != 0;
+        mDetached = in.readInt() != 0;
+        mArguments = in.readBundle();
+        mHidden = in.readInt() != 0;
+        mSavedFragmentState = in.readBundle();
+    }
+
+    public Fragment instantiate(FragmentHostCallback host, FragmentContainer container,
+            Fragment parent, FragmentManagerNonConfig childNonConfig) {
+        if (mInstance == null) {
+            final Context context = host.getContext();
+            if (mArguments != null) {
+                mArguments.setClassLoader(context.getClassLoader());
+            }
+
+            if (container != null) {
+                mInstance = container.instantiate(context, mClassName, mArguments);
+            } else {
+                mInstance = Fragment.instantiate(context, mClassName, mArguments);
+            }
+
+            if (mSavedFragmentState != null) {
+                mSavedFragmentState.setClassLoader(context.getClassLoader());
+                mInstance.mSavedFragmentState = mSavedFragmentState;
+            }
+            mInstance.setIndex(mIndex, parent);
+            mInstance.mFromLayout = mFromLayout;
+            mInstance.mRestored = true;
+            mInstance.mFragmentId = mFragmentId;
+            mInstance.mContainerId = mContainerId;
+            mInstance.mTag = mTag;
+            mInstance.mRetainInstance = mRetainInstance;
+            mInstance.mDetached = mDetached;
+            mInstance.mHidden = mHidden;
+            mInstance.mFragmentManager = host.mFragmentManager;
+
+            if (FragmentManagerImpl.DEBUG) {
+                Log.v(FragmentManagerImpl.TAG, "Instantiated fragment " + mInstance);
+            }
+        }
+        mInstance.mChildNonConfig = childNonConfig;
+        return mInstance;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mClassName);
+        dest.writeInt(mIndex);
+        dest.writeInt(mFromLayout ? 1 : 0);
+        dest.writeInt(mFragmentId);
+        dest.writeInt(mContainerId);
+        dest.writeString(mTag);
+        dest.writeInt(mRetainInstance ? 1 : 0);
+        dest.writeInt(mDetached ? 1 : 0);
+        dest.writeBundle(mArguments);
+        dest.writeInt(mHidden ? 1 : 0);
+        dest.writeBundle(mSavedFragmentState);
+    }
+
+    public static final Parcelable.Creator<FragmentState> CREATOR =
+            new Parcelable.Creator<FragmentState>() {
+                @Override
+                public FragmentState createFromParcel(Parcel in) {
+                    return new FragmentState(in);
+                }
+
+                @Override
+                public FragmentState[] newArray(int size) {
+                    return new FragmentState[size];
+                }
+            };
+}
diff --git a/graphics/drawable/animated/build.gradle b/graphics/drawable/animated/build.gradle
index f218e0b..3dcf04c 100644
--- a/graphics/drawable/animated/build.gradle
+++ b/graphics/drawable/animated/build.gradle
@@ -4,12 +4,8 @@
     api project(':support-vector-drawable')
     api project(':support-core-ui')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner,   { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core, { exclude module: 'support-annotations' }
 }
 
 android {
diff --git a/graphics/drawable/static/build.gradle b/graphics/drawable/static/build.gradle
index e820bb1..d3b517f 100644
--- a/graphics/drawable/static/build.gradle
+++ b/graphics/drawable/static/build.gradle
@@ -4,9 +4,7 @@
     api project(':support-annotations')
     api project(':support-compat')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner, { exclude module: 'support-annotations' }
 }
 
 android {
diff --git a/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java b/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
index b68ef1b..2c7ae41 100644
--- a/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
+++ b/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
@@ -47,8 +47,8 @@
 import android.support.v4.graphics.PathParser;
 import android.support.v4.graphics.drawable.DrawableCompat;
 import android.support.v4.util.ArrayMap;
+import android.support.v4.view.ViewCompat;
 import android.util.AttributeSet;
-import android.util.LayoutDirection;
 import android.util.Log;
 import android.util.Xml;
 
@@ -820,7 +820,7 @@
     private boolean needMirroring() {
         if (Build.VERSION.SDK_INT >= 17) {
             return isAutoMirrored()
-                    && DrawableCompat.getLayoutDirection(this) == LayoutDirection.RTL;
+                    && DrawableCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL;
         } else {
             return false;
         }
@@ -1642,13 +1642,14 @@
         /////////////////////////////////////////////////////
         // Variables below need to be copied (deep copy if applicable) for mutation.
         private int[] mThemeAttrs;
-
+        private static final int FILL_TYPE_WINDING = 0;
         int mStrokeColor = Color.TRANSPARENT;
         float mStrokeWidth = 0;
 
         int mFillColor = Color.TRANSPARENT;
         float mStrokeAlpha = 1.0f;
-        int mFillRule = 0; // 0 is default value as "non-zero" fill type.
+        // Default fill rule is winding, or as known as "non-zero".
+        int mFillRule = FILL_TYPE_WINDING;
         float mFillAlpha = 1.0f;
         float mTrimPathStart = 0;
         float mTrimPathEnd = 1;
diff --git a/media-compat/build.gradle b/media-compat/build.gradle
index 3d8463a..8d192ed 100644
--- a/media-compat/build.gradle
+++ b/media-compat/build.gradle
@@ -4,14 +4,10 @@
     api project(':support-annotations')
     api project(':support-compat')
 
-    androidTestImplementation(libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation(libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
     androidTestImplementation project(':support-testutils')
 }
 
diff --git a/percent/build.gradle b/percent/build.gradle
index 4738118..17d1a96 100644
--- a/percent/build.gradle
+++ b/percent/build.gradle
@@ -3,12 +3,8 @@
 dependencies {
     api project(':support-compat')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner,   { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core, { exclude module: 'support-annotations' }
 }
 
 android {
diff --git a/recommendation/build.gradle b/recommendation/build.gradle
index 8b660f2..5da5c61 100644
--- a/recommendation/build.gradle
+++ b/recommendation/build.gradle
@@ -1,7 +1,7 @@
 apply plugin: android.support.SupportLibraryPlugin
 
 dependencies {
-    api project(':support-v4')
+    api project(':support-annotations')
 }
 
 android {
@@ -12,8 +12,6 @@
     sourceSets {
         main.java.srcDirs = ['src']
         main.res.srcDir 'res'
-        main.assets.srcDir 'assets'
-        main.resources.srcDir 'src'
     }
 
 }
diff --git a/samples/Support13Demos/build.gradle b/samples/Support13Demos/build.gradle
index 4c015ae..f647e40 100644
--- a/samples/Support13Demos/build.gradle
+++ b/samples/Support13Demos/build.gradle
@@ -15,7 +15,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -33,8 +32,8 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
 
diff --git a/samples/Support4Demos/build.gradle b/samples/Support4Demos/build.gradle
index e265698..e9d6b5a 100644
--- a/samples/Support4Demos/build.gradle
+++ b/samples/Support4Demos/build.gradle
@@ -15,7 +15,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -33,8 +32,8 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
 
diff --git a/samples/Support7Demos/build.gradle b/samples/Support7Demos/build.gradle
index 2e3ac33..65b19ea 100644
--- a/samples/Support7Demos/build.gradle
+++ b/samples/Support7Demos/build.gradle
@@ -21,7 +21,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -38,8 +37,7 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
-
diff --git a/samples/SupportAnimationDemos/build.gradle b/samples/SupportAnimationDemos/build.gradle
index d1ea614..ea8038e 100644
--- a/samples/SupportAnimationDemos/build.gradle
+++ b/samples/SupportAnimationDemos/build.gradle
@@ -15,7 +15,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -32,8 +31,8 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
 
diff --git a/samples/SupportAppNavigation/build.gradle b/samples/SupportAppNavigation/build.gradle
index c7d03b8..fdd72b6 100644
--- a/samples/SupportAppNavigation/build.gradle
+++ b/samples/SupportAppNavigation/build.gradle
@@ -47,7 +47,7 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
diff --git a/samples/SupportContentDemos/.gitignore b/samples/SupportContentDemos/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/samples/SupportContentDemos/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/samples/SupportContentDemos/build.gradle b/samples/SupportContentDemos/build.gradle
new file mode 100644
index 0000000..4c7691a
--- /dev/null
+++ b/samples/SupportContentDemos/build.gradle
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion project.ext.currentSdk
+
+    defaultConfig {
+        applicationId "com.example.android.support.content.demos"
+        minSdkVersion 14
+        targetSdkVersion project.ext.currentSdk
+    }
+
+    lintOptions {
+        abortOnError true
+        check 'NewApi'
+    }
+
+}
+
+dependencies {
+    compile project(':design')
+    compile project(':appcompat-v7')
+    compile project(':support-content')
+}
+
diff --git a/samples/SupportContentDemos/src/main/AndroidManifest.xml b/samples/SupportContentDemos/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..f647d8e
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/AndroidManifest.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.example.android.support.content.demos">
+
+    <application
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:roundIcon="@mipmap/ic_launcher_round"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+        <activity
+            android:name=".ContentPagerDemoActivity"
+            android:label="@string/app_name"
+            android:theme="@style/AppTheme.NoActionBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <provider
+            android:name=".UnpagedDemoDataProvider"
+            android:authorities="com.example.android.support.content.demos"
+            android:enabled="true"
+            android:exported="false">
+        </provider>
+    </application>
+
+</manifest>
diff --git a/samples/SupportContentDemos/src/main/java/com/example/android/support/content/demos/ContentPagerDemoActivity.java b/samples/SupportContentDemos/src/main/java/com/example/android/support/content/demos/ContentPagerDemoActivity.java
new file mode 100644
index 0000000..c2b0266
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/java/com/example/android/support/content/demos/ContentPagerDemoActivity.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.support.content.demos;
+
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.content.ContentPager;
+import android.support.content.ContentPager.ContentCallback;
+import android.support.content.LoaderQueryRunner;
+import android.support.content.Query;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+/**
+ * ContentPager demo activity.
+ */
+public class ContentPagerDemoActivity extends AppCompatActivity {
+
+    private static final int PAGE_SIZE = 20;
+
+    private RecyclerView mRecycler;
+    private ContentPager mPager;
+    private Adapter mAdapter;
+    private FloatingActionButton mFab;
+    private Menu mMenu;
+    private int mCurrentPage = -1;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_demo);
+
+        ContentPager.QueryRunner runner = new LoaderQueryRunner(this, getLoaderManager());
+        mPager = new ContentPager(getContentResolver(), runner);
+        mAdapter = new Adapter(mPager, PAGE_SIZE);
+
+        mRecycler = (RecyclerView) findViewById(R.id.list);
+        mRecycler.setLayoutManager(new LinearLayoutManager(this));
+        mRecycler.setAdapter(mAdapter);
+        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+        setSupportActionBar(toolbar);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        mPager.reset();
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu; this adds items to the action bar if it is present.
+        getMenuInflater().inflate(R.menu.menu_demo, menu);
+        mMenu = menu;
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+
+        switch (item.getItemId()) {
+            case R.id.action_load:
+                onLoadContent();
+                break;
+            case R.id.action_previous:
+                onLoadPreviousPage();
+                break;
+            case R.id.action_next:
+                onLoadNextPage();
+                break;
+        }
+        // Handle action bar item clicks here. The action bar will
+        // automatically handle clicks on the Home/Up button, so long
+        // as you specify a parent activity in AndroidManifest.xml.
+        int id = item.getItemId();
+
+        //noinspection SimplifiableIfStatement
+        if (id == R.id.action_load) {
+            return true;
+        }
+
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void onLoadContent() {
+        mAdapter.reset(UnpagedDemoDataProvider.URI);
+        mCurrentPage = 0;
+        mAdapter.loadPage(mCurrentPage);
+
+        updateOptionsMenu();
+    }
+
+    private void onLoadNextPage() {
+        mAdapter.loadPage(mCurrentPage + 1);
+
+        updateOptionsMenu();
+    }
+
+    private void onLoadPreviousPage() {
+        mAdapter.loadPage(mCurrentPage - 1);
+
+        updateOptionsMenu();
+    }
+
+    private void updateOptionsMenu() {
+        MenuItem prev = mMenu.findItem(R.id.action_previous);
+        MenuItem next = mMenu.findItem(R.id.action_next);
+
+        int lastPage = (UnpagedDemoDataProvider.TOTAL_SIZE / PAGE_SIZE) - 1;
+        prev.setEnabled(mCurrentPage > 0);
+        next.setEnabled(mCurrentPage < lastPage);
+    }
+
+    private void msg(String msg) {
+        Snackbar.make(
+                mRecycler,
+                msg, Snackbar.LENGTH_LONG)
+                .setAction("Action", null).show();
+    }
+
+    private final class Adapter extends RecyclerView.Adapter<Holder> implements ContentCallback {
+
+        private final ContentPager mPager;
+        private final int mPageSize;
+
+        private Uri mUri;
+        private Cursor mCursor;
+
+        private Adapter(ContentPager pager, int pageSize) {
+            mPager = pager;
+            mPageSize = pageSize;
+        }
+
+        private void reset(Uri uri) {
+            mUri = uri;
+            mCursor = null;
+        }
+
+        void loadPage(int page) {
+            assert page >= 0;
+            assert page <= (UnpagedDemoDataProvider.TOTAL_SIZE / PAGE_SIZE) - 1;
+
+            mCurrentPage = page;
+            int offset = mCurrentPage * mPageSize;
+            mPager.query(mUri, null, ContentPager.createArgs(offset, mPageSize), null, this);
+        }
+
+        @Override
+        public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
+            return new Holder(new TextView(ContentPagerDemoActivity.this));
+        }
+
+        @Override
+        public void onBindViewHolder(Holder holder, int position) {
+            if (!mCursor.moveToPosition(position)) {
+                holder.view.setText("Nope, couldn't position cursor to: " + position);
+                return;
+            }
+
+            holder.view.setText(String.format(
+                    "%d.%d (%d): %s",
+                    mCurrentPage,
+                    mCursor.getInt(0),
+                    mCursor.getLong(2),
+                    mCursor.getString(1)));
+        }
+
+        @Override
+        public int getItemCount() {
+            return mCursor == null ? 0 : mCursor.getCount();
+        }
+
+        @Override
+        public void onCursorReady(Query query, Cursor cursor) {
+            if (cursor == null) {
+                msg("Content query returned a null cursor: " + query.getUri());
+            }
+
+            mCurrentPage = query.getOffset() / mPageSize;
+            mCursor = cursor;
+            notifyDataSetChanged();
+        }
+
+        private int getCorpusSize(Bundle extras) {
+            return extras.getInt(ContentPager.EXTRA_TOTAL_COUNT, -1);
+        }
+    }
+
+    private class Holder extends RecyclerView.ViewHolder {
+
+        public final TextView view;
+
+        private Holder(TextView view) {
+            super(view);
+            this.view = view;
+        }
+    }
+}
diff --git a/samples/SupportContentDemos/src/main/java/com/example/android/support/content/demos/UnpagedDemoDataProvider.java b/samples/SupportContentDemos/src/main/java/com/example/android/support/content/demos/UnpagedDemoDataProvider.java
new file mode 100644
index 0000000..75b8c55
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/java/com/example/android/support/content/demos/UnpagedDemoDataProvider.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.support.content.demos;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+
+/**
+ * Provides test data for Content Pager Demo app.
+ */
+public class UnpagedDemoDataProvider extends ContentProvider {
+
+    public static final Uri URI =
+            Uri.parse("content://com.example.android.support.content.demos/poodles");
+
+    static final int TOTAL_SIZE = 100;
+    private static final String[] COLUMNS = new String[] {
+            "id",
+            "name",
+            "time"
+    };
+
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection,
+            String[] selectionArgs, String sortOrder) {
+        MatrixCursor cursor = new MatrixCursor(COLUMNS);
+        Object[] values = new Object[3];
+
+        for (int i = 0; i < TOTAL_SIZE; i++) {
+            values[0] = i;
+            values[1] = "I'm row number " + i;
+            values[2] = System.currentTimeMillis();
+            cursor.addRow(values);
+        }
+
+        return cursor;
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection,
+            String[] selectionArgs) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+}
diff --git a/samples/SupportContentDemos/src/main/res/layout/activity_demo.xml b/samples/SupportContentDemos/src/main/res/layout/activity_demo.xml
new file mode 100644
index 0000000..f557f40
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/layout/activity_demo.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.example.android.support.content.demos.ContentPagerDemoActivity">
+
+    <android.support.v7.widget.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="?attr/actionBarSize"
+        android:background="?attr/colorPrimary"
+        android:theme="@style/AppTheme.AppBarOverlay"
+        app:popupTheme="@style/AppTheme.PopupOverlay"/>
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+</LinearLayout>
diff --git a/samples/SupportContentDemos/src/main/res/menu/menu_demo.xml b/samples/SupportContentDemos/src/main/res/menu/menu_demo.xml
new file mode 100644
index 0000000..7f0310c
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/menu/menu_demo.xml
@@ -0,0 +1,38 @@
+<!--
+  ~ Copyright (C) 2017 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.
+  -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+      xmlns:app="http://schemas.android.com/apk/res-auto"
+      xmlns:tools="http://schemas.android.com/tools"
+      tools:context="com.example.android.support.content.demos.ContentPagerDemoActivity">
+
+    <item android:id="@+id/action_load"
+          android:orderInCategory="100"
+          android:title="@string/action_load"
+          app:showAsAction="always"/>
+
+    <item android:id="@+id/action_previous"
+          android:orderInCategory="100"
+          android:title="@string/action_previous"
+          android:enabled="false"
+          app:showAsAction="always"/>
+
+    <item android:id="@+id/action_next"
+          android:orderInCategory="100"
+          android:title="@string/action_next"
+          android:enabled="false"
+          app:showAsAction="always"/>
+</menu>
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-hdpi/ic_launcher.png b/samples/SupportContentDemos/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-hdpi/ic_launcher_round.png b/samples/SupportContentDemos/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9a078e3
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-mdpi/ic_launcher.png b/samples/SupportContentDemos/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-mdpi/ic_launcher_round.png b/samples/SupportContentDemos/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..efc028a
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-xhdpi/ic_launcher.png b/samples/SupportContentDemos/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/samples/SupportContentDemos/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..3af2608
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-xxhdpi/ic_launcher.png b/samples/SupportContentDemos/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/samples/SupportContentDemos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9bec2e6
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/samples/SupportContentDemos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..aee44e1
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/samples/SupportContentDemos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..34947cd
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportContentDemos/src/main/res/values/colors.xml b/samples/SupportContentDemos/src/main/res/values/colors.xml
new file mode 100644
index 0000000..86b4304
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/values/colors.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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.
+  -->
+
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
+</resources>
diff --git a/samples/SupportContentDemos/src/main/res/values/strings.xml b/samples/SupportContentDemos/src/main/res/values/strings.xml
new file mode 100644
index 0000000..523dafe
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/values/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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.
+  -->
+
+<resources>
+    <string name="app_name">Pager Demo</string>
+    <string name="action_load">Load</string>
+    <string name="action_previous">Previous</string>
+    <string name="action_next">Next</string>
+</resources>
diff --git a/samples/SupportContentDemos/src/main/res/values/styles.xml b/samples/SupportContentDemos/src/main/res/values/styles.xml
new file mode 100644
index 0000000..afb6bad
--- /dev/null
+++ b/samples/SupportContentDemos/src/main/res/values/styles.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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.
+  -->
+
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+    </style>
+    <style name="AppTheme.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
+    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
+
+</resources>
diff --git a/samples/SupportDesignDemos/build.gradle b/samples/SupportDesignDemos/build.gradle
index 9dbf54b..ca4c12d 100644
--- a/samples/SupportDesignDemos/build.gradle
+++ b/samples/SupportDesignDemos/build.gradle
@@ -16,7 +16,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -33,8 +32,8 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
 
diff --git a/samples/SupportEmojiDemos/build.gradle b/samples/SupportEmojiDemos/build.gradle
index c5be42e..70b2909 100644
--- a/samples/SupportEmojiDemos/build.gradle
+++ b/samples/SupportEmojiDemos/build.gradle
@@ -54,7 +54,7 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
\ No newline at end of file
diff --git a/samples/SupportLeanbackDemos/build.gradle b/samples/SupportLeanbackDemos/build.gradle
index 014cd16..1a69d94 100644
--- a/samples/SupportLeanbackDemos/build.gradle
+++ b/samples/SupportLeanbackDemos/build.gradle
@@ -16,7 +16,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -33,8 +32,8 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
 
diff --git a/samples/SupportLeanbackJank/build.gradle b/samples/SupportLeanbackJank/build.gradle
index 6db5dcf..2d40ef3 100644
--- a/samples/SupportLeanbackJank/build.gradle
+++ b/samples/SupportLeanbackJank/build.gradle
@@ -14,6 +14,13 @@
         targetSdkVersion project.ext.currentSdk
     }
 
+    buildTypes {
+        release {
+            minifyEnabled true
+            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
+        }
+    }
+
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
diff --git a/samples/SupportLeanbackJank/res/raw/bbb_360p.mp4 b/samples/SupportLeanbackJank/res/raw/bbb_360p.mp4
new file mode 100644
index 0000000..46c9723
--- /dev/null
+++ b/samples/SupportLeanbackJank/res/raw/bbb_360p.mp4
Binary files differ
diff --git a/samples/SupportLeanbackJank/res/values/dimens.xml b/samples/SupportLeanbackJank/res/values/dimens.xml
index e2b1f9f..5557953 100644
--- a/samples/SupportLeanbackJank/res/values/dimens.xml
+++ b/samples/SupportLeanbackJank/res/values/dimens.xml
@@ -19,4 +19,6 @@
     <dimen name="grid_item_height">100dp</dimen>
     <dimen name="card_width">156dp</dimen>
     <dimen name="card_height">88dp</dimen>
+    <dimen name="shadow_unfocused_z">0dp</dimen>
+    <dimen name="shadow_focused_z">10dp</dimen>
 </resources>
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/IntentKeys.java b/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/IntentKeys.java
index 6d04cb0..7ce55a4 100644
--- a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/IntentKeys.java
+++ b/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/IntentKeys.java
@@ -28,9 +28,10 @@
 
     // Define values for WHICH_VIDEO.
     public static final int NO_VIDEO = 0;
-    public static final int VIDEO_480P_60FPS = 1;
-    public static final int VIDEO_1080P_60FPS = 2;
-    public static final int VIDEO_2160P_60FPS = 3;
+    public static final int VIDEO_360P_60FPS = 1;
+    public static final int VIDEO_480P_60FPS = 2;
+    public static final int VIDEO_1080P_60FPS = 3;
+    public static final int VIDEO_2160P_60FPS = 4;
 
     private IntentKeys() {
     }
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/CardPresenter.java b/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/CardPresenter.java
index d301c4e..61ab7c6 100644
--- a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/CardPresenter.java
+++ b/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/CardPresenter.java
@@ -16,12 +16,16 @@
 
 package com.google.android.leanbackjank.presenter;
 
+import android.net.Uri;
 import android.support.v17.leanback.widget.ImageCardView;
 import android.support.v17.leanback.widget.Presenter;
 import android.support.v4.content.res.ResourcesCompat;
 import android.view.ViewGroup;
 
 import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.drawable.GlideDrawable;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.Target;
 import com.google.android.leanbackjank.R;
 import com.google.android.leanbackjank.model.VideoInfo;
 
@@ -46,37 +50,44 @@
         ImageCardView cardView = new ImageCardView(parent.getContext()) {
             @Override
             public void setSelected(boolean selected) {
-                updateCardBackgroundColor(this, selected);
+                findViewById(R.id.info_field).setBackgroundColor(
+                        selected ? mSelectedBackgroundColor : mDefaultBackgroundColor);
                 super.setSelected(selected);
             }
         };
 
         cardView.setFocusable(true);
         cardView.setFocusableInTouchMode(true);
-        updateCardBackgroundColor(cardView, false);
         return new ViewHolder(cardView);
     }
 
-    private void updateCardBackgroundColor(ImageCardView view, boolean selected) {
-        int color = selected ? mSelectedBackgroundColor : mDefaultBackgroundColor;
-
-        // Both background colors should be set because the view's
-        // background is temporarily visible during animations.
-        view.setBackgroundColor(color);
-        view.findViewById(R.id.info_field).setBackgroundColor(color);
-    }
-
     @Override
     public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
         VideoInfo videoInfo = (VideoInfo) item;
 
-        ImageCardView cardView = (ImageCardView) viewHolder.view;
+        final ImageCardView cardView = (ImageCardView) viewHolder.view;
         cardView.setTitleText(videoInfo.getTitle());
         cardView.setContentText(videoInfo.getStudio());
         cardView.setMainImageDimensions(mCardWidth, mCardHeight);
+        cardView.setBackgroundColor(mDefaultBackgroundColor);
 
         Glide.with(cardView.getContext())
                 .load(videoInfo.getImageUri())
+                .listener(new RequestListener<Uri, GlideDrawable>() {
+                    @Override
+                    public boolean onException(Exception e, Uri uri, Target<GlideDrawable> target,
+                            boolean b) {
+                        return false;
+                    }
+
+                    @Override
+                    public boolean onResourceReady(GlideDrawable glideDrawable, Uri uri,
+                            Target<GlideDrawable> target, boolean b, boolean b1) {
+                        // Remove the background color to reduce overdraw.
+                        cardView.setBackground(null);
+                        return false;
+                    }
+                })
                 .into(cardView.getMainImageView());
     }
 
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/MainFragment.java b/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/MainFragment.java
index 42abf3e..6869e46 100644
--- a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/MainFragment.java
+++ b/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/MainFragment.java
@@ -17,6 +17,7 @@
 package com.google.android.leanbackjank.ui;
 
 import android.content.Intent;
+import android.content.res.Resources;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v17.leanback.app.BackgroundManager;
@@ -27,6 +28,7 @@
 import android.support.v17.leanback.widget.ListRowPresenter;
 import android.support.v17.leanback.widget.Presenter;
 import android.support.v17.leanback.widget.PresenterSelector;
+import android.support.v17.leanback.widget.ShadowOverlayHelper;
 import android.support.v4.content.res.ResourcesCompat;
 
 import com.google.android.leanbackjank.IntentDefaults;
@@ -90,6 +92,8 @@
                 resource = R.raw.testvideo_1080p_60fps;
             } else if (whichVideo == IntentKeys.VIDEO_480P_60FPS) {
                 resource = R.raw.bbb_480p;
+            } else if (whichVideo == IntentKeys.VIDEO_360P_60FPS) {
+                resource = R.raw.bbb_360p;
             }
             Uri uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/"
                     + resource);
@@ -129,7 +133,16 @@
 
     private void loadVideoData(int categoryCount, int entriesPerCat, boolean disableShadows,
             boolean useSingleBitmap, int cardWidth, int cardHeight) {
-        ListRowPresenter listRowPresenter = new ListRowPresenter();
+        ListRowPresenter listRowPresenter = new ListRowPresenter() {
+            @Override
+            protected ShadowOverlayHelper.Options createShadowOverlayOptions() {
+                Resources res = getResources();
+                ShadowOverlayHelper.Options options = new ShadowOverlayHelper.Options();
+                options.dynamicShadowZ(res.getDimension(R.dimen.shadow_unfocused_z),
+                        res.getDimension(R.dimen.shadow_focused_z));
+                return options;
+            }
+        };
         listRowPresenter.setShadowEnabled(!disableShadows);
         mRowsAdapter = new ArrayObjectAdapter(listRowPresenter);
         HashMap<String, List<VideoInfo>> data = VideoProvider.buildMedia(categoryCount,
diff --git a/samples/SupportPercentDemos/build.gradle b/samples/SupportPercentDemos/build.gradle
index f52f293..251678d 100644
--- a/samples/SupportPercentDemos/build.gradle
+++ b/samples/SupportPercentDemos/build.gradle
@@ -15,7 +15,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -32,8 +31,8 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
 
diff --git a/samples/SupportPreferenceDemos/build.gradle b/samples/SupportPreferenceDemos/build.gradle
index 0ed8424..6e78088 100644
--- a/samples/SupportPreferenceDemos/build.gradle
+++ b/samples/SupportPreferenceDemos/build.gradle
@@ -20,7 +20,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -37,7 +36,7 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
diff --git a/samples/SupportTransitionDemos/build.gradle b/samples/SupportTransitionDemos/build.gradle
index 720e2a2..6b34453 100644
--- a/samples/SupportTransitionDemos/build.gradle
+++ b/samples/SupportTransitionDemos/build.gradle
@@ -16,7 +16,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -33,8 +32,8 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 
     aaptOptions {
diff --git a/samples/SupportVectorDrawableDemos/build.gradle b/samples/SupportVectorDrawableDemos/build.gradle
index a3a4db6..c47967c 100644
--- a/samples/SupportVectorDrawableDemos/build.gradle
+++ b/samples/SupportVectorDrawableDemos/build.gradle
@@ -34,7 +34,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -51,8 +50,8 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
 
diff --git a/samples/SupportWearDemos/build.gradle b/samples/SupportWearDemos/build.gradle
index d9d7e29..e980793 100644
--- a/samples/SupportWearDemos/build.gradle
+++ b/samples/SupportWearDemos/build.gradle
@@ -31,7 +31,6 @@
     sourceSets {
         main.manifest.srcFile 'AndroidManifest.xml'
         main.java.srcDirs = ['src']
-        main.aidl.srcDirs = ['src']
         main.res.srcDirs = ['res']
     }
 
@@ -49,8 +48,7 @@
     }
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
 }
-
diff --git a/settings.gradle b/settings.gradle
index 6dd5d37..c281bb1 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -100,6 +100,9 @@
 include ':support-emoji-appcompat'
 project(':support-emoji-appcompat').projectDir = new File(rootDir, 'emoji/appcompat')
 
+include ':support-content'
+project(':support-content').projectDir = new File(rootDir, 'content')
+
 /////////////////////////////
 //
 // Samples
@@ -108,6 +111,9 @@
 
 File samplesRoot = new File(rootDir, 'samples')
 
+include ':support-content-demos'
+project(':support-content-demos').projectDir = new File(samplesRoot, 'SupportContentDemos')
+
 include ':support-design-demos'
 project(':support-design-demos').projectDir = new File(samplesRoot, 'SupportDesignDemos')
 
@@ -193,4 +199,4 @@
 
 ///// FLATFOOT START
 
-///// FLATFOOT END
\ No newline at end of file
+///// FLATFOOT END
diff --git a/transition/build.gradle b/transition/build.gradle
index a7b8fca..5756785 100644
--- a/transition/build.gradle
+++ b/transition/build.gradle
@@ -5,14 +5,10 @@
     api project(':support-compat')
     compileOnly project(':support-fragment')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
     androidTestImplementation project(':support-v4')
     androidTestImplementation project(':appcompat-v7')
 }
diff --git a/tv-provider/build.gradle b/tv-provider/build.gradle
index 2a129f4..e9e204e 100644
--- a/tv-provider/build.gradle
+++ b/tv-provider/build.gradle
@@ -4,9 +4,7 @@
     api project(':support-annotations')
     api project(':support-compat')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner, { exclude module: 'support-annotations' }
 }
 
 android {
diff --git a/v13/build.gradle b/v13/build.gradle
index 8019c0e..95ff484 100644
--- a/v13/build.gradle
+++ b/v13/build.gradle
@@ -4,14 +4,10 @@
     api project(':support-annotations')
     api project(':support-v4')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
 }
 
 android {
diff --git a/v17/leanback/res/values-be/strings.xml b/v17/leanback/res/values-be/strings.xml
index 97e05a6..85c3e7c 100644
--- a/v17/leanback/res/values-be/strings.xml
+++ b/v17/leanback/res/values-be/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Адключыць высокую якасць"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Уключыць схаваныя цітры"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Адключыць схаваныя цітры"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Калі ласка, увядзіце выяву ў рэжыме Выяў"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Перайсці ў рэжым \"Відарыс у відарысе\""</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Элементы кіравання мультымедыя паказаны"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Элементы кіравання мультымедыя схаваны. Каб паказаць іх, націсніце пераключальнік напрамкаў"</string>
diff --git a/v17/leanback/res/values-bg/strings.xml b/v17/leanback/res/values-bg/strings.xml
index 917519d..d8c9325 100644
--- a/v17/leanback/res/values-bg/strings.xml
+++ b/v17/leanback/res/values-bg/strings.xml
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Деактивиране на високото качество"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Активиране на субтитрите"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Деактивиране на субтитрите"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Вход в режима „Картина в картина“"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Вход в режима „Картина в картината“"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Контролите за мултимедия са показани"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Контролите за мултимедия са скрити. Натиснете контролния пад, за да се покажат"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Край"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Напред"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"Код на грешката на MediaPlayer %1$d (допълнително: %2$d)"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ПЪРВИ СТЪПКИ"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Напред"</string>
 </resources>
diff --git a/v17/leanback/res/values-bn/strings.xml b/v17/leanback/res/values-bn/strings.xml
index d921817..949faac 100644
--- a/v17/leanback/res/values-bn/strings.xml
+++ b/v17/leanback/res/values-bn/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"সাবটাইটেল সক্ষম করুন"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"সাবটাইটেল অক্ষম করুন"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"ছবি মোডে ছবি লগান"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"মিডিয়ার নিয়ন্ত্রণগুলি দেখানো হয়েছে"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"মিডিয়ার নিয়ন্ত্রণগুলি লুকানো আছে, দেখার জন্য ডি-প্যাড টিপুন"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"শেষ করুন"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"চালিয়ে যান"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer ত্রুটি কোড %1$d অতিরিক্ত %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"শুরু করা যাক"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"পরবর্তী"</string>
 </resources>
diff --git a/v17/leanback/res/values-cs/strings.xml b/v17/leanback/res/values-cs/strings.xml
index 6519e9c..c99f631 100644
--- a/v17/leanback/res/values-cs/strings.xml
+++ b/v17/leanback/res/values-cs/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Vypnout vysokou kvalitu"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Zapnout titulky"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Vypnout titulky"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Přejít do režimu Obraz v obraze"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Přejít do režimu obraz v obraze"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Ovládací prvky médií jsou zobrazeny"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Ovládací prvky médií jsou skryty, zobrazíte je stisknutím křížového ovladače"</string>
diff --git a/v17/leanback/res/values-da/strings.xml b/v17/leanback/res/values-da/strings.xml
index 4174eba..97c4a32 100644
--- a/v17/leanback/res/values-da/strings.xml
+++ b/v17/leanback/res/values-da/strings.xml
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Deaktiver høj kvalitet"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Aktivér undertekster"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Deaktiver undertekster"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Tilføj billedet i billedtilstand"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Tilstand med integreret billede"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Knapperne til afspilning er synlige"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Knapperne til afspilning er skjult. Tryk på D-pad\'en for at se dem"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Afslut"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Fortsæt"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer-fejlkode %1$d ekstra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"KOM GODT I GANG"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Næste"</string>
 </resources>
diff --git a/v17/leanback/res/values-de/strings.xml b/v17/leanback/res/values-de/strings.xml
index 7cdd292..e50c4ed 100644
--- a/v17/leanback/res/values-de/strings.xml
+++ b/v17/leanback/res/values-de/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Hohe Qualität deaktivieren"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Untertitel aktivieren"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Untertitel deaktivieren"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Bild-in-Bild-Modus aktivieren"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Bild-im-Bild-Modus aktivieren"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Mediensteuerelemente eingeblendet"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Mediensteuerelemente ausgeblendet. Drücke das Steuerkreuz, um die Steuerelemente wieder einzublenden."</string>
diff --git a/v17/leanback/res/values-eu/strings.xml b/v17/leanback/res/values-eu/strings.xml
index 46140b2..416d8a0 100644
--- a/v17/leanback/res/values-eu/strings.xml
+++ b/v17/leanback/res/values-eu/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Desgaitu kalitate handiko erreprodukzioa"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Gaitu azpitituluak"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Desgaitu azpitituluak"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Aktibatu \"Argazkia argazkian\" modua"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Aktibatu \"Pantaila txiki gainjarri\" modua"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Multimedia kontrolatzeko aukerak ikusgai"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Ezkutatuta daude multimedia kontrolatzeko aukerak. Erakusteko, sakatu nabigazio-gurutzea."</string>
@@ -56,6 +56,6 @@
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
     <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer errore-kodea: %1$d (%2$d gehigarria)"</string>
-    <string name="lb_onboarding_get_started" msgid="6961440391306351139">"LEHEN URRATSAK"</string>
+    <string name="lb_onboarding_get_started" msgid="6961440391306351139">"HASI ERABILTZEN"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Hurrengoa"</string>
 </resources>
diff --git a/v17/leanback/res/values-fa/strings.xml b/v17/leanback/res/values-fa/strings.xml
index b85d1fa..daa6bab 100644
--- a/v17/leanback/res/values-fa/strings.xml
+++ b/v17/leanback/res/values-fa/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"فعال کردن زیرنویس"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"غیرفعال کردن زیرنویس"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"وارد حالت تصویر در تصویر شوید"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"کنترل‌های رسانه نشان داده می‌شوند"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"‏کنترل‌های رسانه پنهان هستند، برای نمایش آن‌ها d-pad (پد کنترل) را فشار دهید"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"پایان"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"ادامه"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"‏کد خطای MediaPlayer‏ %1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"شروع به‌ کار"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"بعدی"</string>
 </resources>
diff --git a/v17/leanback/res/values-fr/strings.xml b/v17/leanback/res/values-fr/strings.xml
index 3c83164..b659bed 100644
--- a/v17/leanback/res/values-fr/strings.xml
+++ b/v17/leanback/res/values-fr/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Désactiver la haute qualité"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Activer les sous-titres"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Désactiver les sous-titres"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Activer le mode PIP"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Activer le mode Picture-in-picture"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Les commandes multimédias sont affichées"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Les commandes multimédias sont masquées. Appuyez sur le pavé directionnel pour les afficher"</string>
diff --git a/v17/leanback/res/values-gl/strings.xml b/v17/leanback/res/values-gl/strings.xml
index 21830de..5406b8a 100644
--- a/v17/leanback/res/values-gl/strings.xml
+++ b/v17/leanback/res/values-gl/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Desactivar alta calidade"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Activar subtítulos"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Desactivar subtítulos"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Activar o modo Imaxe superposta"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Activar o modo Pantalla superposta"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Móstranse os controis de recursos multimedia"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Os controis de recursos multimedia están ocultos. Preme d-pad para mostralos"</string>
diff --git a/v17/leanback/res/values-gu/strings.xml b/v17/leanback/res/values-gu/strings.xml
index bf94e68..12796b3 100644
--- a/v17/leanback/res/values-gu/strings.xml
+++ b/v17/leanback/res/values-gu/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"ઉપશીર્ષક સક્ષમ કરો"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"વિગતવાર ઉપશીર્ષકોને અક્ષમ કરો"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"ચિત્ર મોડમાં ચિત્ર દાખલ કરો"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"મીડિયા નિયંત્રણો બતાવેલા છે"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"મીડિયા નિયંત્રણો છુપાયેલા છે, તે બતાવવા માટે d-પૅડ દબાવો"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"સમાપ્ત કરો"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"ચાલુ રાખો"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer ભૂલ કોડ %1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"પ્રારંભ કરો"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"આગલું"</string>
 </resources>
diff --git a/v17/leanback/res/values-hu/strings.xml b/v17/leanback/res/values-hu/strings.xml
index a2b497d..c0f89c3 100644
--- a/v17/leanback/res/values-hu/strings.xml
+++ b/v17/leanback/res/values-hu/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Feliratok engedélyezése"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Feliratok letiltása"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Kép a képben mód indítása"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Médiavezérlők megjelenítve"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"A médiavezérlők el vannak rejtve. Megjelenítésükhöz nyomja le a d-padet."</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Befejezés"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Folytatás"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer-hibakód: %1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"KEZDŐ LÉPÉSEK"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Következő"</string>
 </resources>
diff --git a/v17/leanback/res/values-in/strings.xml b/v17/leanback/res/values-in/strings.xml
index 89ca9d0..68f4b55 100644
--- a/v17/leanback/res/values-in/strings.xml
+++ b/v17/leanback/res/values-in/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Nonaktifkan Kualitas Tinggi"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Aktifkan Pembuatan Teks"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Nonaktifkan Pembuatan Teks"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Masukkan Foto Dalam Mode Foto"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Masuk Mode Picture In Picture"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Kontrol media ditampilkan"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Kontrol media disembunyikan, tekan d-pad untuk menampilkannya"</string>
diff --git a/v17/leanback/res/values-it/strings.xml b/v17/leanback/res/values-it/strings.xml
index 3eab975..5db967d 100644
--- a/v17/leanback/res/values-it/strings.xml
+++ b/v17/leanback/res/values-it/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Disattiva alta qualità"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Attiva sottotitoli"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Disattiva sottotitoli"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Attiva modalità Picture-in-picture"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Attiva modalità Picture in picture"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Controlli multimediali visualizzati"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Controlli multimediali nascosti, premi il d-pad per visualizzarli"</string>
diff --git a/v17/leanback/res/values-iw/strings.xml b/v17/leanback/res/values-iw/strings.xml
index a3ea4b9..0f79a99 100644
--- a/v17/leanback/res/values-iw/strings.xml
+++ b/v17/leanback/res/values-iw/strings.xml
@@ -31,8 +31,8 @@
     <string name="lb_playback_controls_fast_forward_multiplier" msgid="1058753672110224526">"‏העברה קדימה של %1$dX"</string>
     <string name="lb_playback_controls_rewind" msgid="2227196334132350684">"הרץ אחורה"</string>
     <string name="lb_playback_controls_rewind_multiplier" msgid="1640629531440849942">"‏העברה לאחור של %1$dX"</string>
-    <string name="lb_playback_controls_skip_next" msgid="2946499493161095772">"דלג אל הפריט הבא"</string>
-    <string name="lb_playback_controls_skip_previous" msgid="2326801832933178348">"דלג אל הפריט הקודם"</string>
+    <string name="lb_playback_controls_skip_next" msgid="2946499493161095772">"ברצוני לדלג אל הפריט הבא"</string>
+    <string name="lb_playback_controls_skip_previous" msgid="2326801832933178348">"ברצוני לדלג אל הפריט הקודם"</string>
     <string name="lb_playback_controls_more_actions" msgid="2330770008796987655">"עוד פעולות"</string>
     <string name="lb_playback_controls_thumb_up" msgid="6530420347129222601">"בטל בחירה באגודל כלפי מעלה"</string>
     <string name="lb_playback_controls_thumb_up_outline" msgid="1577637924003500946">"בחר באגודל כלפי מעלה"</string>
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"השבת איכות גבוהה"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"הפעל כתוביות"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"השבת כתוביות"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"הזן את התמונה במצב תמונה"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"עבור למצב תמונה בתוך תמונה"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"פקדי המדיה מוצגים"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"‏פקדי המדיה מוסתרים. הקש על ה-d-pad כדי להציג אותם"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"סיום"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"המשך"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"‏קוד שגיאה %1$d‏ של MediaPlayer ועוד %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"התחל"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"הבא"</string>
 </resources>
diff --git a/v17/leanback/res/values-ja/strings.xml b/v17/leanback/res/values-ja/strings.xml
index 8d5a41d..88fe50f 100644
--- a/v17/leanback/res/values-ja/strings.xml
+++ b/v17/leanback/res/values-ja/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"高品質を無効にする"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"字幕を有効にする"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"字幕を無効にする"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"PIP モードに移動"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"ピクチャー イン ピクチャー モードに移動"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"メディア コントロールは表示されています"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"メディア コントロールは非表示になっています。表示するには D-pad を押してください"</string>
diff --git a/v17/leanback/res/values-ka/strings.xml b/v17/leanback/res/values-ka/strings.xml
index ef148b0..7879ecc 100644
--- a/v17/leanback/res/values-ka/strings.xml
+++ b/v17/leanback/res/values-ka/strings.xml
@@ -51,17 +51,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"მაღალი ხარისხის გამორთვა"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"დახურული წარწერების ჩართვა"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"დახურული წარწერების გაუქმება"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"რეჟიმზე „სურათი სურათში“ გადასვლა"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"რეჟიმზე „ეკრანი ეკრანში“ გადასვლა"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"ნაჩვენებია მედიის მართვის საშუალებები"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"მედიის მართვის საშუალებები დამალულია, გამოსაჩენად დააჭირეთ D-pad-ს"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"დასრულება"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"გაგრძელება"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"."</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer-ის შეცდომის კოდი: %1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"დაწყება"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"შემდეგი"</string>
 </resources>
diff --git a/v17/leanback/res/values-km/strings.xml b/v17/leanback/res/values-km/strings.xml
index c2dd333..270dff7 100644
--- a/v17/leanback/res/values-km/strings.xml
+++ b/v17/leanback/res/values-km/strings.xml
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"បិទ​គុណភាព​ខ្ពស់"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"បើក​ការ​ដាក់​ចំណង​ដែល​បាន​បិទ"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"បិទ​ការ​ដាក់​ចំណង​ដែល​បាន​បិទ"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"បញ្ចូលរូបភាពនៅក្នុងរបៀបរូបភាព"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"ចូលមុខងាររូបក្នុងរូប"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"ការ​គ្រប់គ្រង​មេឌៀ​ត្រូវ​បាន​បង្ហាញ"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"ការ​គ្រប់គ្រង​មេឌៀ​ត្រូវ​បាន​លាក់ សូមចុច d-pad ដើម្បី​បង្ហាញ"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"បញ្ចប់"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"បន្ត"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">"៖"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"លេខកូដបញ្ហា MediaPlayer %1$d និង %2$d បន្ថែម"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ចាប់ផ្ដើម"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"បន្ទាប់"</string>
 </resources>
diff --git a/v17/leanback/res/values-kn/strings.xml b/v17/leanback/res/values-kn/strings.xml
index f797a9e..dd14e38 100644
--- a/v17/leanback/res/values-kn/strings.xml
+++ b/v17/leanback/res/values-kn/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"ಮುಚ್ಚಿದ ಶೀರ್ಷಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"ಮುಚ್ಚಿದ ಶೀರ್ಷಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"ಚಿತ್ರವನ್ನು ಚಿತ್ರ ಮೋಡ್‌ನಲ್ಲಿ ಪ್ರವೇಶಿಸಿ"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"ಮಾಧ್ಯಮ ನಿಯಂತ್ರಣಗಳನ್ನು ತೋರಿಸಲಾಗಿದೆ"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"ಮಾಧ್ಯಮ ನಿಯಂತ್ರಣಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ, ತೋರಿಸಲು d-pad ಒತ್ತಿರಿ"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"ಪೂರ್ಣಗೊಳಿಸು"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"ಮುಂದುವರಿಸು"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"ಮೀಡಿಯಾ ಪ್ಲೇಯರ್ ದೋಷ ಕೋಡ್ %1$d ಹೆಚ್ಚುವರಿ %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ಪ್ರಾರಂಭಿಸಿ"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"ಮುಂದೆ"</string>
 </resources>
diff --git a/v17/leanback/res/values-ko/strings.xml b/v17/leanback/res/values-ko/strings.xml
index b418937..0c8fb19 100644
--- a/v17/leanback/res/values-ko/strings.xml
+++ b/v17/leanback/res/values-ko/strings.xml
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"고화질 사용 중지"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"자막 사용 설정"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"자막 사용 중지"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"사진 모드에서 사진 입력"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"PIP 모드 시작"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"미디어 컨트롤이 표시되었습니다."</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"미디어 컨트롤이 숨겨져 있습니다. 표시하려면 D-Pad를 누르세요."</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"완료"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"계속"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer 오류 코드 %1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"시작하기"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"다음"</string>
 </resources>
diff --git a/v17/leanback/res/values-ky/strings.xml b/v17/leanback/res/values-ky/strings.xml
index 3c52130..80c7af2 100644
--- a/v17/leanback/res/values-ky/strings.xml
+++ b/v17/leanback/res/values-ky/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Жабык субтитрлерди иштетүү"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Жабык субтитрлерди өчүрүү"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Сүрөт режиминде сүрөт киргизүү"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Медиа файлды башкаруу көрсөтүлдү"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Медиа файлды башкаруу жашырылган, көрүү үчүн d-pad көзөмөлдөө каражатын басыңыз"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Бүтүрүү"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Улантуу"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer\'деги катанын коду: 1$d, кошумча: %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"БАШТАДЫК"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Кийинки"</string>
 </resources>
diff --git a/v17/leanback/res/values-lo/strings.xml b/v17/leanback/res/values-lo/strings.xml
index b4f4844..7fb28b8 100644
--- a/v17/leanback/res/values-lo/strings.xml
+++ b/v17/leanback/res/values-lo/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"​ເປີດ​ນຳ​ໃຊ້​​ຄຳ​ບັນ​ຍາຍ​ແບບ​ປິດ"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"​ປິດ​ນຳ​ໃຊ້​ຄຳ​ບັນ​ຍາຍ​ແບບ​ປິດ"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"ປ້ອນຮູບພາບໃນໂໝດຮູບພາບ"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"ສະແດງຕົວຄວບຄຸມມີເດຍແລ້ວ"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"ເຊື່ອງຕົວຄວບຄຸມມີເດຍແລ້ວ, ກົດປຸ່ມທິດທາງເພື່ອສະແດງ"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"ສໍາເລັດ"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"​ສືບ​ຕໍ່"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"ລະຫັດ MediaPlayer ຜິດພາດ %1$d ພິເສດ %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ເລີ່ມຕົ້ນນຳໃຊ້"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"ຕໍ່ໄປ"</string>
 </resources>
diff --git a/v17/leanback/res/values-lt/strings.xml b/v17/leanback/res/values-lt/strings.xml
index 61692d5..b9d6076 100644
--- a/v17/leanback/res/values-lt/strings.xml
+++ b/v17/leanback/res/values-lt/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Įgalinti subtitrus"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Išjungti subtitrus"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Įjungti vaizdo vaizde režimą"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Medijos valdikliai rodomi"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Medijos valdikliai paslėpti. Paspauskite krypčių valdiklius, kad rodytumėte"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Baigti"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Tęsti"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"%1$d ir %2$d „MediaPlayer“ klaidos kodas"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"PRADĖTI"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Kitas"</string>
 </resources>
diff --git a/v17/leanback/res/values-lv/strings.xml b/v17/leanback/res/values-lv/strings.xml
index b1e36dd..8f69284 100644
--- a/v17/leanback/res/values-lv/strings.xml
+++ b/v17/leanback/res/values-lv/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Iespējot slēgtos parakstus"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Atspējot slēgtos parakstus"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Aktivizēt režīmu Attēls attēlā"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Multivides vadīklas ir redzamas."</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Multivides vadīklas ir paslēptas. Nospiediet virzienu tastatūru, lai tās tiktu parādītas."</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Pabeigt"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Turpināt"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"."</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer kļūdas kods: %1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"SĀKT DARBU"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Nākamā"</string>
 </resources>
diff --git a/v17/leanback/res/values-ml/strings.xml b/v17/leanback/res/values-ml/strings.xml
index 03dc391..41ac9d5 100644
--- a/v17/leanback/res/values-ml/strings.xml
+++ b/v17/leanback/res/values-ml/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"അടച്ച അടിക്കുറിപ്പ് നൽകൽ പ്രവർത്തനക്ഷമമാക്കുക"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"അടച്ച അടിക്കുറിപ്പ് നൽകൽ പ്രവർത്തനരഹിതമാക്കുക"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"\'ചിത്രത്തിനുള്ളിൽ ചിത്രം\' മോഡിലേക്ക് പ്രവേശിക്കുക"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"മീഡിയ നിയന്ത്രണങ്ങൾ ‌കാണിച്ചിരിക്കുന്നു"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"മീഡിയ നിയന്ത്രണങ്ങൾ ‌മറച്ചിരിക്കുന്നു, കാണിക്കുന്നതിന് ഡി-‌പാഡ് അമർത്തുക"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"പൂര്‍ത്തിയാക്കുക"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"തുടരുക"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"മീഡിയ പ്ലെയർ പിശക് കോഡ്: %1$d, കൂടെ %2$d എന്നതും"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ആരംഭിക്കുക"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"അടുത്തത്"</string>
 </resources>
diff --git a/v17/leanback/res/values-mn/strings.xml b/v17/leanback/res/values-mn/strings.xml
index 3369c01..63d4392 100644
--- a/v17/leanback/res/values-mn/strings.xml
+++ b/v17/leanback/res/values-mn/strings.xml
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Өндөр чанарыг идэвхгүйжүүлэх"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Текст тайлбарыг идэвхжүүлэх"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Текст тайлбарыг идэвхгүйжүүлэх"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Зургийн горимд зураг оруулна уу"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Дэлгэцэн доторх дэлгэц горимд оруулна уу"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Медиа удирдлага харагдаж байна"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Медиа удирдлага нуугдсан байна, харуулахын тулд d-pad-г дарна уу"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Дуусгах"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Үргэлжлүүлэх"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer-н алдааны код %1$d нэмэлт %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ЭХЭЛЦГЭЭЕ"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Дараах"</string>
 </resources>
diff --git a/v17/leanback/res/values-mr/strings.xml b/v17/leanback/res/values-mr/strings.xml
index 948b536..79a7b0c 100644
--- a/v17/leanback/res/values-mr/strings.xml
+++ b/v17/leanback/res/values-mr/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"उपशीर्षके सक्षम करा"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"उपशीर्षके अक्षम करा"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"चित्र मोडमध्ये चित्र प्रविष्ट करा"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"मीडिया नियंत्रणे दर्शवली आहेत"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"मीडिया नियंत्रणे लपलेली आहेत, दर्शवण्‍यासाठी d-pad दाबा"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"समाप्त"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"सुरू ठेवा"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"मीडियाप्लेअर एरर कोड %1$d अतिरिक्त %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"प्रारंभ करा"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"पुढील"</string>
 </resources>
diff --git a/v17/leanback/res/values-ms/strings.xml b/v17/leanback/res/values-ms/strings.xml
index dcfa76b..8cad319 100644
--- a/v17/leanback/res/values-ms/strings.xml
+++ b/v17/leanback/res/values-ms/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Dayakan Kapsyen Tertutup"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Lumpuhkan Kapsyen Tertutup"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Masukkan Gambar Dalam Mod Gambar"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Kawalan media ditunjukkan"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Kawalan media disembunyikan, tekan d-pad untuk menunjukkan"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Selesai"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Teruskan"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"Kod ralat MediaPlayer %1$d tambahan %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"MULAKAN"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Seterusnya"</string>
 </resources>
diff --git a/v17/leanback/res/values-my/strings.xml b/v17/leanback/res/values-my/strings.xml
index 8a4068f..5ba51af 100644
--- a/v17/leanback/res/values-my/strings.xml
+++ b/v17/leanback/res/values-my/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"အရည်အသွေးကောင်းအား ပိတ်ထားရန်"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"စာတမ်းထိုး ဖွင့်ရန်"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"စာတမ်းထိုးအား ပိတ်ထားရန်"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"ဓာတ်ပုံမုဒ်တွင် ဓာတ်ပုံထည့်ပါ"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"တစ်ခုပေါ်တစ်ခု ထပ်၍ဖွင့်ခြင်းမုဒ်ကို ထည့်ပါ"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"မီဒီယာ ခလုတ်များကို ပြထားပါသည်"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"မီဒီယာခလုတ်များကို ဝှက်ထားပါသည်။ ပြရန် d-pad ကို နှိပ်ပါ"</string>
diff --git a/v17/leanback/res/values-ne/strings.xml b/v17/leanback/res/values-ne/strings.xml
index 5c58907..c6579a6 100644
--- a/v17/leanback/res/values-ne/strings.xml
+++ b/v17/leanback/res/values-ne/strings.xml
@@ -50,16 +50,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"बन्द क्याप्सनहरु सक्षम"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"बन्द क्याप्सनहरु असक्षम"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"चित्रलाई चित्र मोडमा प्रविष्ट गर्नुहोस्"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"मिडियाका नियन्त्रणहरू देखाएइका छन्"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"मिडियाका नियन्त्रणहरू लुकेका छन्, देखाउनका लागि d-pad लाई थिच्नुहोस्"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"समाप्त गर्नुहोस्"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"जारी राख्नुहोस्"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer को त्रुटि सम्बन्धी कोड %1$d अतिरिक्त %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"सुरु गरौँ"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"अर्को"</string>
 </resources>
diff --git a/v17/leanback/res/values-nl/strings.xml b/v17/leanback/res/values-nl/strings.xml
index 69947ce..2b236b0 100644
--- a/v17/leanback/res/values-nl/strings.xml
+++ b/v17/leanback/res/values-nl/strings.xml
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Hoge kwaliteit uitschakelen"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Ondertiteling inschakelen"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Ondertiteling uitschakelen"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Beeld-in-beeld-modus openen"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Scherm-in-scherm-modus openen"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Opties voor mediabediening worden weergegeven"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Opties voor mediabediening verborgen. Druk op de D-pad om ze weer te geven."</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Voltooien"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Doorgaan"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"-"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"Mediaspeler: foutcode %1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"AAN DE SLAG"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Volgende"</string>
 </resources>
diff --git a/v17/leanback/res/values-pa/strings.xml b/v17/leanback/res/values-pa/strings.xml
index b423a73..fe8fbd7 100644
--- a/v17/leanback/res/values-pa/strings.xml
+++ b/v17/leanback/res/values-pa/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"ਬੰਦ ਕੈਪਸ਼ਨਿੰਗ ਸਮਰੱਥ ਬਣਾਓ"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"ਬੰਦ ਕੈਪਸ਼ਨਿੰਗ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"ਤਸਵੀਰ ਮੋਡ ਵਿੱਚ ਤਸਵੀਰ ਦਾਖਲ ਕਰੋ"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"ਮੀਡੀਆ ਕੰਟਰੋਲ ਵਿਖਾਏ ਗਏ"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"ਮੀਡੀਆ ਕੰਟਰੋਲ ਲੁਕੇ ਹੋਏ ਹਨ, ਵਿਖਾਉਣ ਲਈ ਡੀ-ਪੈਡ ਦਬਾਓ"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"ਖ਼ਤਮ"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"ਜਾਰੀ ਰੱਖੋ"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer ਗੜਬੜ ਕੋਡ %1$d ਵਾਧੂ %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ਸ਼ੁਰੂਆਤ ਕਰੋ"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"ਅੱਗੇ"</string>
 </resources>
diff --git a/v17/leanback/res/values-pl/strings.xml b/v17/leanback/res/values-pl/strings.xml
index d1c7988..879c064 100644
--- a/v17/leanback/res/values-pl/strings.xml
+++ b/v17/leanback/res/values-pl/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Włącz napisy"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Wyłącz napisy"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Włącz tryb obrazu w obrazie"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Elementy sterujące multimediami są wyświetlone"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Elementy sterujące multimediami są ukryte. Naciśnij pad kierunkowy, by je wyświetlić"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Zakończ"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Dalej"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"."</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer – kod błędu %1$d, dodatkowo %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ROZPOCZNIJ"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Dalej"</string>
 </resources>
diff --git a/v17/leanback/res/values-pt-rPT/strings.xml b/v17/leanback/res/values-pt-rPT/strings.xml
index 1191a50..315828d 100644
--- a/v17/leanback/res/values-pt-rPT/strings.xml
+++ b/v17/leanback/res/values-pt-rPT/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Desativar alta qualidade"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Ativar legendas"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Desativar legendas"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Entrar no modo Imagem na imagem"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Entrar no modo de ecrã no ecrã"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Controlos de multimédia apresentados"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Controlos de multimédia ocultados, prima o teclado direcional para mostrar"</string>
diff --git a/v17/leanback/res/values-si/strings.xml b/v17/leanback/res/values-si/strings.xml
index 238c105..54f2f08 100644
--- a/v17/leanback/res/values-si/strings.xml
+++ b/v17/leanback/res/values-si/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"වැසුණු ශිර්ෂ කිරීම සබල කරන ලදි"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"වැසුණු ශිර්ෂ කිරීම අබල කරන ලදි"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"පින්තූරය-තුළ-පින්තූරය ප්‍රකාරයට ඇතුළු වන්න"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"මාධ්‍ය පාලක පෙන්වා ඇත"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"මාධ්‍ය පාලක සඟවා ඇත, පෙන්වීමට d-pad ඔබන්න"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"අවසානය"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"දිගටම කර ගෙන යන්න"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer දෝෂ කේතය %1$d අමතර %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ආරම්භ කරන්න"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"ඊළඟ"</string>
 </resources>
diff --git a/v17/leanback/res/values-sk/strings.xml b/v17/leanback/res/values-sk/strings.xml
index bd68c14..fe45e2c 100644
--- a/v17/leanback/res/values-sk/strings.xml
+++ b/v17/leanback/res/values-sk/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Zakázať médiá vo vysokej kvalite"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Zapnúť skryté titulky"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Vypnúť skryté titulky"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Vložiť obrázok v režime obrázka"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Prejsť do režimu obraz v obraze"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Ovládacie prvky médií sa zobrazujú"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Ovládacie prvky médií sú skryté, zobrazíte ich stlačením krížového ovládača"</string>
diff --git a/v17/leanback/res/values-sl/strings.xml b/v17/leanback/res/values-sl/strings.xml
index 30c1f11..d47b3af 100644
--- a/v17/leanback/res/values-sl/strings.xml
+++ b/v17/leanback/res/values-sl/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Omogoči podnapise"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Onemogoči podnapise"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Vklop načina za sliko v sliki"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Kontrolniki predstavnosti so prikazani"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Kontrolniki predstavnosti so skriti, za prikaz pritisnite smerni gumb"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Dokončaj"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Naprej"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"Koda napake MediaPlayer %1$d dodatno %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ZAČNITE"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Naprej"</string>
 </resources>
diff --git a/v17/leanback/res/values-sq/strings.xml b/v17/leanback/res/values-sq/strings.xml
index 4c6aa99..4057cae 100644
--- a/v17/leanback/res/values-sq/strings.xml
+++ b/v17/leanback/res/values-sq/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Çaktivizo \"Cilësinë e lartë\""</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Aktivizo titrat"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Çaktivizo titrat me sekuencë kohore"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Fut një fotografi në modalitetin e fotografisë"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Aktivizo modalitetin e figurës brenda figurës"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Kontrollet e medias të shfaqura"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Kontrollet e medias të fshehura, shtyp bllokun e drejtimit për t\'i shfaqur"</string>
diff --git a/v17/leanback/res/values-sw/strings.xml b/v17/leanback/res/values-sw/strings.xml
index c586455..8672cd6 100644
--- a/v17/leanback/res/values-sw/strings.xml
+++ b/v17/leanback/res/values-sw/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Zima Ubora wa Juu"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Washa manukuu"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Zima manukuu"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Weka Picha Katika Hali ya Picha"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Weka Hali ya Picha ndani ya Picha Nyingine"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Inaonyesha udhibiti wa maudhui"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Imeficha udhibiti wa maudhui, bonyeza d-pad ili uuonyeshe"</string>
@@ -57,5 +57,5 @@
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
     <string name="lb_media_player_error" msgid="3650250994187305396">"Msimbo wa hitilafu wa Kichezaji Maudhui %1$d %2$d zaidi"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ANZA KUTUMIA"</string>
-    <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Inayofuata"</string>
+    <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Endelea"</string>
 </resources>
diff --git a/v17/leanback/res/values-ta/strings.xml b/v17/leanback/res/values-ta/strings.xml
index d7cc8ed..f5d84e2 100644
--- a/v17/leanback/res/values-ta/strings.xml
+++ b/v17/leanback/res/values-ta/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"உயர் தரத்தை முடக்கு"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"விரிவான வசனங்களை இயக்கு"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"விரிவான வசனங்களை முடக்கு"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"பிக்ச்சர் இன் பிக்ச்சர் பயன்முறைக்குச் செல்"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"பிக்ச்சர்-இன்-பிக்ச்சர் பயன்முறைக்குச் செல்"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"மீடியா கட்டுப்பாடுகள் காட்டப்படுகின்றன"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"மீடியா கட்டுப்பாடுகள் மறைக்கப்பட்டுள்ளன. கட்டுப்பாடுகளைக் காட்ட, டிபேடை அழுத்தவும்"</string>
diff --git a/v17/leanback/res/values-te/strings.xml b/v17/leanback/res/values-te/strings.xml
index 2d82651..6b8d1f4 100644
--- a/v17/leanback/res/values-te/strings.xml
+++ b/v17/leanback/res/values-te/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"సంవృత శీర్షికలను ప్రారంభించు"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"సంవృత శీర్షికలను నిలిపివేయి"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"చిత్రంలో చిత్రం మోడ్‌లోకి ప్రవేశించండి"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"మీడియా నియంత్రణలు చూపబడ్డాయి"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"మీడియా నియంత్రణలు దాచబడ్డాయి, చూపించడానికి d-ప్యాడ్ నొక్కండి"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"ముగించు"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"కొనసాగించు"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer ఎర్రర్ కోడ్ %1$d అదనంగా %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"ప్రారంభించు"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"తదుపరి"</string>
 </resources>
diff --git a/v17/leanback/res/values-th/strings.xml b/v17/leanback/res/values-th/strings.xml
index 1e74c69..0dae8eb 100644
--- a/v17/leanback/res/values-th/strings.xml
+++ b/v17/leanback/res/values-th/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"เปิดใช้คำบรรยาย"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"ปิดใช้คำบรรยาย"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"เข้าสู่โหมดการแสดงผลหลายแหล่งพร้อมกัน"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"แสดงการควบคุมสื่ออยู่"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"ซ่อนการควบคุมสื่ออยู่ กด d-pad เพื่อแสดง"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"เสร็จสิ้น"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"ต่อไป"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"รหัสข้อผิดพลาด MediaPlayer %1$d เพิ่มเติม %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"เริ่มต้นใช้งาน"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"ถัดไป"</string>
 </resources>
diff --git a/v17/leanback/res/values-tl/strings.xml b/v17/leanback/res/values-tl/strings.xml
index ac14e41..0214efc 100644
--- a/v17/leanback/res/values-tl/strings.xml
+++ b/v17/leanback/res/values-tl/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"I-enable ang Paglalagay ng Subtitle"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"I-disable ang Paglalagay ng Subtitle"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Pumasok sa Picture In Picture Mode"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Ipinapakita ang mga kontrol ng media"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Nakatago ang mga kontrol ng media, pindutin ang d-pad upang ipakita"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Tapusin"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Magpatuloy"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"Code ng error na %1$d ng MediaPlayer na may extra na %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"MAGSIMULA"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Susunod"</string>
 </resources>
diff --git a/v17/leanback/res/values-tr/strings.xml b/v17/leanback/res/values-tr/strings.xml
index c29b7f8..1f7fe3a 100644
--- a/v17/leanback/res/values-tr/strings.xml
+++ b/v17/leanback/res/values-tr/strings.xml
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Yüksek Kalitede Oynatmayı Devre Dışı Bırak"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Altyazıları Etkinleştir"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Altyazıları Devre Dışı Bırak"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Resim İçinde Resim Moduna Geç"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Pencere İçinde Pencere Moduna Geç"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"."</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Medya denetimleri gösteriliyor"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Medya denetimleri gizli durumda. Görüntülemek için d-pad\'e basın."</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Son"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Devam"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"."</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer hata kodu %1$d ekstra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"BAŞLA"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Sonraki"</string>
 </resources>
diff --git a/v17/leanback/res/values-ur/strings.xml b/v17/leanback/res/values-ur/strings.xml
index 0978c85..f5b7a25 100644
--- a/v17/leanback/res/values-ur/strings.xml
+++ b/v17/leanback/res/values-ur/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"سب ٹائٹلز کو فعال کریں"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"سب ٹائٹلز کو غیر فعال کریں"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"\'تصویر میں تصویر موڈ\' میں داخل ہوں"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"میڈیا کنٹرولز عیاں ہیں"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"‏میڈیا کنٹرولز مخفی ہیں، شو کرنے کیلئے d-pad دبائیں"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"مکمل کریں"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"جاری رکھیں"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"‏میڈیا پلیئر کی خرابی کا کوڈ %1$d اضافی %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"شروع کریں"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"اگلا"</string>
 </resources>
diff --git a/v17/leanback/res/values-uz/strings.xml b/v17/leanback/res/values-uz/strings.xml
index 915b0b4..9719bc6 100644
--- a/v17/leanback/res/values-uz/strings.xml
+++ b/v17/leanback/res/values-uz/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Yuqori sifatni o‘chirib qo‘yish"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Taglavhalarni yoqish"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Taglavhalarni o‘chirib qo‘yish"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Tasvir ichida tasvir rejimiga kirish"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Tasvir ustida tasvir rejimiga kirish"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Boshqaruv elementlari ochiq"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Boshqaruv elementlari berkitilgan, ochish uchun D-pad tugmasini bosing"</string>
@@ -55,7 +55,7 @@
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Davom etish"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer xatosi kodi: %1$d, %2$d"</string>
+    <string name="lb_media_player_error" msgid="3650250994187305396">"Media pleyer xatoligi kodi: %1$d (yana: %2$d)"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"BOSHLADIK"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Keyingisi"</string>
 </resources>
diff --git a/v17/leanback/res/values-vi/strings.xml b/v17/leanback/res/values-vi/strings.xml
index db9421b..0de7ca4 100644
--- a/v17/leanback/res/values-vi/strings.xml
+++ b/v17/leanback/res/values-vi/strings.xml
@@ -47,17 +47,15 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"Tắt chế độ chất lượng cao"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"Bật phụ đề"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"Tắt phụ đề"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Vào ảnh ở chế độ ảnh"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"Vào chế độ ảnh trong ảnh"</string>
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"Điều khiển phương tiện được hiển thị"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"Điều khiển phương tiện bị ẩn, nhấn d-pad để hiển thị"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"Hoàn tất"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"Tiếp tục"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"Mã lỗi MediaPlayer %1$d %2$d bổ sung"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"BẮT ĐẦU"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"Tiếp theo"</string>
 </resources>
diff --git a/v17/leanback/res/values-zh-rCN/strings.xml b/v17/leanback/res/values-zh-rCN/strings.xml
index 63fd948..d635311 100644
--- a/v17/leanback/res/values-zh-rCN/strings.xml
+++ b/v17/leanback/res/values-zh-rCN/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"开启字幕"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"关闭字幕"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"进入画中画模式"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"媒体控件已显示"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"媒体控件已隐藏,按 D-pad 即可显示"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"完成"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"继续"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer 错误代码:%1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"开始使用"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"下一页"</string>
 </resources>
diff --git a/v17/leanback/res/values-zh-rHK/strings.xml b/v17/leanback/res/values-zh-rHK/strings.xml
index b7a4a2e..2da2e73 100644
--- a/v17/leanback/res/values-zh-rHK/strings.xml
+++ b/v17/leanback/res/values-zh-rHK/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"啟用字幕"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"停用字幕"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"進入「畫中畫模式」"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"畫面已顯示媒體控制項"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"畫面已隱藏媒體控制項,按十字鍵即可顯示"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"完成"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"繼續"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer 錯誤代碼:%1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"開始使用"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"下一頁"</string>
 </resources>
diff --git a/v17/leanback/res/values-zh-rTW/strings.xml b/v17/leanback/res/values-zh-rTW/strings.xml
index 8d0e1d9..721dc6e 100644
--- a/v17/leanback/res/values-zh-rTW/strings.xml
+++ b/v17/leanback/res/values-zh-rTW/strings.xml
@@ -48,16 +48,14 @@
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"啟用字幕"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"停用字幕"</string>
     <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"進入子母畫面模式"</string>
-    <!-- no translation found for lb_playback_time_separator (3208380806582304911) -->
-    <skip />
+    <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"媒體控制項已顯示"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"媒體控制項已隱藏,按下 D-Pad 即可顯示"</string>
     <string name="lb_guidedaction_finish_title" msgid="4015190340667946245">"完成"</string>
     <string name="lb_guidedaction_continue_title" msgid="8842094924543063706">"繼續"</string>
     <string name="lb_date_separator" msgid="2440386660906697298">"/"</string>
     <string name="lb_time_separator" msgid="2763247350845477227">":"</string>
-    <!-- no translation found for lb_media_player_error (3650250994187305396) -->
-    <skip />
+    <string name="lb_media_player_error" msgid="3650250994187305396">"MediaPlayer 錯誤代碼:%1$d extra %2$d"</string>
     <string name="lb_onboarding_get_started" msgid="6961440391306351139">"開始使用"</string>
     <string name="lb_onboarding_accessibility_next" msgid="2918313444257732434">"繼續"</string>
 </resources>
diff --git a/v7/appcompat/build.gradle b/v7/appcompat/build.gradle
index 102c779..90662f8 100644
--- a/v7/appcompat/build.gradle
+++ b/v7/appcompat/build.gradle
@@ -6,14 +6,10 @@
     api project(':support-vector-drawable')
     api project(':animated-vector-drawable')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
     androidTestImplementation project(':support-testutils')
 }
 
diff --git a/v7/appcompat/res/values-af/strings.xml b/v7/appcompat/res/values-af/strings.xml
index b00b917..15ed3b2 100644
--- a/v7/appcompat/res/values-af/strings.xml
+++ b/v7/appcompat/res/values-af/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Stemsoektog"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Kies \'n program"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Sien alles"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Deel met %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Deel met <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Deel met"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"AAN"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"AF"</string>
diff --git a/v7/appcompat/res/values-am/strings.xml b/v7/appcompat/res/values-am/strings.xml
index 9a57819..42bbc06 100644
--- a/v7/appcompat/res/values-am/strings.xml
+++ b/v7/appcompat/res/values-am/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"የድምፅ ፍለጋ"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"መተግበሪያ ይምረጡ"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ሁሉንም ይመልከቱ"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"ከ%s ጋር ያጋሩ"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"ከ<xliff:g id="APPLICATION_NAME">%s</xliff:g> ጋር አጋራ"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ከሚከተለው ጋር ያጋሩ"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"በርቷል"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ጠፍቷል"</string>
diff --git a/v7/appcompat/res/values-ar/strings.xml b/v7/appcompat/res/values-ar/strings.xml
index a884a9f..3278162 100644
--- a/v7/appcompat/res/values-ar/strings.xml
+++ b/v7/appcompat/res/values-ar/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"البحث الصوتي"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"اختيار تطبيق"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"عرض الكل"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"‏مشاركة مع %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"مشاركة مع <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"مشاركة مع"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"تشغيل"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"إيقاف"</string>
diff --git a/v7/appcompat/res/values-az/strings.xml b/v7/appcompat/res/values-az/strings.xml
index 6f6fa9c..29e00dd 100644
--- a/v7/appcompat/res/values-az/strings.xml
+++ b/v7/appcompat/res/values-az/strings.xml
@@ -20,7 +20,7 @@
     <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Evə naviqasiya et"</string>
     <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Yuxarı get"</string>
     <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Digər variantlar"</string>
-    <string name="abc_toolbar_collapse_description" msgid="1603543279005712093">"Dağıt"</string>
+    <string name="abc_toolbar_collapse_description" msgid="1603543279005712093">"Yığışdırın"</string>
     <string name="abc_searchview_description_search" msgid="8264924765203268293">"Axtarış"</string>
     <string name="abc_search_hint" msgid="7723749260725869598">"Axtarış..."</string>
     <string name="abc_searchview_description_query" msgid="2550479030709304392">"Axtarış sorğusu"</string>
@@ -29,9 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Səsli axtarış"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Tətbiq seçin"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Hamısına baxın"</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for abc_shareactionprovider_share_with_application (7165123711973476752) -->
-    <skip />
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ilə paylaşın"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Bununla paylaşın"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"AKTİV"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DEAKTİV"</string>
diff --git a/v7/appcompat/res/values-b+sr+Latn/strings.xml b/v7/appcompat/res/values-b+sr+Latn/strings.xml
index 06caa95..c3462f6 100644
--- a/v7/appcompat/res/values-b+sr+Latn/strings.xml
+++ b/v7/appcompat/res/values-b+sr+Latn/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Glasovna pretraga"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Izbor aplikacije"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Prikaži sve"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Deli sa aplikacijom %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Deljenje sa aplikacijom <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Deli sa"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"UKLJUČI"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ISKLJUČI"</string>
diff --git a/v7/appcompat/res/values-be/strings.xml b/v7/appcompat/res/values-be/strings.xml
index 42e9583..99ee19f 100644
--- a/v7/appcompat/res/values-be/strings.xml
+++ b/v7/appcompat/res/values-be/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Галасавы пошук"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Выбраць праграму"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Прагледзець усё"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Абагуліць з %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Абагуліць праз праграму <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Абагуліць з"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"УКЛ."</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ВЫКЛ."</string>
diff --git a/v7/appcompat/res/values-bg/strings.xml b/v7/appcompat/res/values-bg/strings.xml
index 85ece2d..1d37d0d 100644
--- a/v7/appcompat/res/values-bg/strings.xml
+++ b/v7/appcompat/res/values-bg/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Гласово търсене"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Изберете приложение"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Вижте всички"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Споделяне със: %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Споделяне със: <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Споделяне със:"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ВКЛ."</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ИЗКЛ."</string>
diff --git a/v7/appcompat/res/values-bn/strings.xml b/v7/appcompat/res/values-bn/strings.xml
index 2602be0..5959799 100644
--- a/v7/appcompat/res/values-bn/strings.xml
+++ b/v7/appcompat/res/values-bn/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ভয়েস অনুসন্ধান"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"একটি অ্যাপ্লিকেশান বেছে নিন"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"সবগুলো দেখুন"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s এর সাথে শেয়ার করুন"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> এর সাথে শেয়ার করুন"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"এর সাথে শেয়ার করুন"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"চালু"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"বন্ধ"</string>
diff --git a/v7/appcompat/res/values-bs/strings.xml b/v7/appcompat/res/values-bs/strings.xml
index 3c15659..9f845a7 100644
--- a/v7/appcompat/res/values-bs/strings.xml
+++ b/v7/appcompat/res/values-bs/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="abc_action_mode_done" msgid="4076576682505996667">"Završeno"</string>
+    <string name="abc_action_mode_done" msgid="4076576682505996667">"Gotovo"</string>
     <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Vrati se na početnu stranicu"</string>
     <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Navigiraj prema gore"</string>
     <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Više opcija"</string>
@@ -26,10 +26,10 @@
     <string name="abc_searchview_description_query" msgid="2550479030709304392">"Pretraži upit"</string>
     <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Obriši upit"</string>
     <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Pošalji upit"</string>
-    <string name="abc_searchview_description_voice" msgid="893419373245838918">"Pretraživanje glasom"</string>
+    <string name="abc_searchview_description_voice" msgid="893419373245838918">"Glasovno pretraživanje"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Odaberite aplikaciju"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Vidi sve"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Podijeli sa %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Podijeli koristeći aplikaciju <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Podijeli sa"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"UKLJUČI"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ISKLJUČI"</string>
diff --git a/v7/appcompat/res/values-ca/strings.xml b/v7/appcompat/res/values-ca/strings.xml
index 568b72d..03ebec3 100644
--- a/v7/appcompat/res/values-ca/strings.xml
+++ b/v7/appcompat/res/values-ca/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Cerca per veu"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Selecciona una aplicació"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Mostra\'ls tots"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Comparteix amb %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Comparteix amb <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Comparteix amb"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ACTIVAT"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DESACTIVAT"</string>
diff --git a/v7/appcompat/res/values-cs/strings.xml b/v7/appcompat/res/values-cs/strings.xml
index 727721b..05cd4e0 100644
--- a/v7/appcompat/res/values-cs/strings.xml
+++ b/v7/appcompat/res/values-cs/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Hlasové vyhledávání"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Vybrat aplikaci"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Zobrazit vše"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Sdílet pomocí %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Sdílet s aplikací <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Sdílet pomocí"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ZAPNUTO"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"VYPNUTO"</string>
diff --git a/v7/appcompat/res/values-da/strings.xml b/v7/appcompat/res/values-da/strings.xml
index 21981f1..813885a 100644
--- a/v7/appcompat/res/values-da/strings.xml
+++ b/v7/appcompat/res/values-da/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Talesøgning"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Vælg en app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Se alle"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Del med %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Del med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Del med"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"TIL"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"FRA"</string>
diff --git a/v7/appcompat/res/values-de/strings.xml b/v7/appcompat/res/values-de/strings.xml
index 184ba98..0b57259 100644
--- a/v7/appcompat/res/values-de/strings.xml
+++ b/v7/appcompat/res/values-de/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Sprachsuche"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"App auswählen"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Alle ansehen"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Freigeben für %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Mit <xliff:g id="APPLICATION_NAME">%s</xliff:g> teilen"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Freigeben für"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"An"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"Aus"</string>
diff --git a/v7/appcompat/res/values-el/strings.xml b/v7/appcompat/res/values-el/strings.xml
index 4954e50..ec7a666 100644
--- a/v7/appcompat/res/values-el/strings.xml
+++ b/v7/appcompat/res/values-el/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Φωνητική αναζήτηση"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Επιλέξτε κάποια εφαρμογή"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Προβολή όλων"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Κοινή χρήση με %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Κοινή χρήση με <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Κοινή χρήση με"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ΕΝΕΡΓΟΠΟΙΗΣΗ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ"</string>
diff --git a/v7/appcompat/res/values-en-rAU/strings.xml b/v7/appcompat/res/values-en-rAU/strings.xml
index ed11ab6..a4d048c 100644
--- a/v7/appcompat/res/values-en-rAU/strings.xml
+++ b/v7/appcompat/res/values-en-rAU/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Voice search"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Choose an app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"See all"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Share with %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Share with <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Share with"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ON"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"OFF"</string>
diff --git a/v7/appcompat/res/values-en-rGB/strings.xml b/v7/appcompat/res/values-en-rGB/strings.xml
index ed11ab6..a4d048c 100644
--- a/v7/appcompat/res/values-en-rGB/strings.xml
+++ b/v7/appcompat/res/values-en-rGB/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Voice search"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Choose an app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"See all"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Share with %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Share with <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Share with"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ON"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"OFF"</string>
diff --git a/v7/appcompat/res/values-en-rIN/strings.xml b/v7/appcompat/res/values-en-rIN/strings.xml
index ed11ab6..a4d048c 100644
--- a/v7/appcompat/res/values-en-rIN/strings.xml
+++ b/v7/appcompat/res/values-en-rIN/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Voice search"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Choose an app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"See all"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Share with %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Share with <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Share with"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ON"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"OFF"</string>
diff --git a/v7/appcompat/res/values-es-rUS/strings.xml b/v7/appcompat/res/values-es-rUS/strings.xml
index 84a8ab3..0cc8a70 100644
--- a/v7/appcompat/res/values-es-rUS/strings.xml
+++ b/v7/appcompat/res/values-es-rUS/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Búsqueda por voz"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Elige una aplicación."</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver todo"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Compartir con %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Compartir con"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ACTIVADO"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DESACTIVADO"</string>
diff --git a/v7/appcompat/res/values-es/strings.xml b/v7/appcompat/res/values-es/strings.xml
index 31fb801..3e0828b 100644
--- a/v7/appcompat/res/values-es/strings.xml
+++ b/v7/appcompat/res/values-es/strings.xml
@@ -29,9 +29,9 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Búsqueda por voz"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Seleccionar una aplicación"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver todo"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Compartir con %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Compartir con"</string>
-    <string name="abc_capital_on" msgid="3405795526292276155">"SÍ"</string>
-    <string name="abc_capital_off" msgid="121134116657445385">"NO"</string>
+    <string name="abc_capital_on" msgid="3405795526292276155">"ACTIVADO"</string>
+    <string name="abc_capital_off" msgid="121134116657445385">"DESACTIVADO"</string>
     <string name="search_menu_title" msgid="146198913615257606">"Buscar"</string>
 </resources>
diff --git a/v7/appcompat/res/values-et/strings.xml b/v7/appcompat/res/values-et/strings.xml
index 9f34e02..3a3dcbf 100644
--- a/v7/appcompat/res/values-et/strings.xml
+++ b/v7/appcompat/res/values-et/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Häälotsing"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Valige rakendus"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Kuva kõik"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Jagamine kasutajaga %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Jagamine rakendusega <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Jagamine:"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"SEES"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"VÄLJAS"</string>
diff --git a/v7/appcompat/res/values-eu/strings.xml b/v7/appcompat/res/values-eu/strings.xml
index ab18c68..a651036 100644
--- a/v7/appcompat/res/values-eu/strings.xml
+++ b/v7/appcompat/res/values-eu/strings.xml
@@ -26,10 +26,10 @@
     <string name="abc_searchview_description_query" msgid="2550479030709304392">"Bilaketa-kontsulta"</string>
     <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Garbitu kontsulta"</string>
     <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Bidali kontsulta"</string>
-    <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ahots bidezko bilaketa"</string>
+    <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ahozko bilaketa"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Aukeratu aplikazio bat"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ikusi guztiak"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Partekatu %s erabiltzailearekin"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Partekatu <xliff:g id="APPLICATION_NAME">%s</xliff:g> aplikazioarekin"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Partekatu hauekin"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"AKTIBATUTA"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DESAKTIBATUTA"</string>
diff --git a/v7/appcompat/res/values-fa/strings.xml b/v7/appcompat/res/values-fa/strings.xml
index 99af06a..9b844b0 100644
--- a/v7/appcompat/res/values-fa/strings.xml
+++ b/v7/appcompat/res/values-fa/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"جستجوی گفتاری"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"انتخاب برنامه"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"مشاهده همه"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"‏اشتراک‌گذاری با %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"اشتراک‌گذاری با <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"اشتراک‌گذاری با"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"روشن"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"خاموش"</string>
diff --git a/v7/appcompat/res/values-fi/strings.xml b/v7/appcompat/res/values-fi/strings.xml
index a7713b0..e9bd952 100644
--- a/v7/appcompat/res/values-fi/strings.xml
+++ b/v7/appcompat/res/values-fi/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Puhehaku"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Valitse sovellus"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Näytä kaikki"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Jakaminen: %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Jaa sovelluksessa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Jakaminen:"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"KÄYTÖSSÄ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"POIS KÄYTÖSTÄ"</string>
diff --git a/v7/appcompat/res/values-fr-rCA/strings.xml b/v7/appcompat/res/values-fr-rCA/strings.xml
index de9ad41..a3e763b 100644
--- a/v7/appcompat/res/values-fr-rCA/strings.xml
+++ b/v7/appcompat/res/values-fr-rCA/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Recherche vocale"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Sélectionnez une application"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Voir toutes les chaînes"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Partager avec %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Partager avec <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Partager"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ACTIVÉ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DÉSACTIVÉ"</string>
diff --git a/v7/appcompat/res/values-fr/strings.xml b/v7/appcompat/res/values-fr/strings.xml
index d3eb762..1e412ec 100644
--- a/v7/appcompat/res/values-fr/strings.xml
+++ b/v7/appcompat/res/values-fr/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Recherche vocale"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Sélectionner une application"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Tout afficher"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Partager avec %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Partager avec <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Partager avec"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ACTIVÉ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DÉSACTIVÉ"</string>
diff --git a/v7/appcompat/res/values-gl/strings.xml b/v7/appcompat/res/values-gl/strings.xml
index 30185b8..2af80a1 100644
--- a/v7/appcompat/res/values-gl/strings.xml
+++ b/v7/appcompat/res/values-gl/strings.xml
@@ -26,10 +26,10 @@
     <string name="abc_searchview_description_query" msgid="2550479030709304392">"Consulta de busca"</string>
     <string name="abc_searchview_description_clear" msgid="3691816814315814921">"Borrar consulta"</string>
     <string name="abc_searchview_description_submit" msgid="8928215447528550784">"Enviar consulta"</string>
-    <string name="abc_searchview_description_voice" msgid="893419373245838918">"Busca de voz"</string>
+    <string name="abc_searchview_description_voice" msgid="893419373245838918">"Busca por voz"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Escoller unha aplicación"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver todas"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Compartir con %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Compartir con"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ACTIVAR"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DESACTIVAR"</string>
diff --git a/v7/appcompat/res/values-gu/strings.xml b/v7/appcompat/res/values-gu/strings.xml
index a52fd66..7a243ed 100644
--- a/v7/appcompat/res/values-gu/strings.xml
+++ b/v7/appcompat/res/values-gu/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"વૉઇસ શોધ"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"એક ઍપ્લિકેશન પસંદ કરો"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"બધું જુઓ"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s સાથે શેર કરો"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ની સાથે શેર કરો"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"આની સાથે શેર કરો"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ચાલુ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"બંધ"</string>
diff --git a/v7/appcompat/res/values-hi/strings.xml b/v7/appcompat/res/values-hi/strings.xml
index cfabcf7..30d3001 100644
--- a/v7/appcompat/res/values-hi/strings.xml
+++ b/v7/appcompat/res/values-hi/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ध्वनि खोज"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"कोई एप्‍लिकेशन चुनें"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"सभी देखें"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s के साथ साझा करें"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> के साथ साझा करें"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"इसके द्वारा साझा करें"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"चालू"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"बंद"</string>
diff --git a/v7/appcompat/res/values-hr/strings.xml b/v7/appcompat/res/values-hr/strings.xml
index 78aa1d3..27a1c2e 100644
--- a/v7/appcompat/res/values-hr/strings.xml
+++ b/v7/appcompat/res/values-hr/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Glasovno pretraživanje"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Odabir aplikacije"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Prikaži sve"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Dijeljenje sa: %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Dijeli putem aplikacije <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Dijeljenje sa"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"UKLJUČENO"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ISKLJUČENO"</string>
diff --git a/v7/appcompat/res/values-hu/strings.xml b/v7/appcompat/res/values-hu/strings.xml
index bdaba78..d3e413f 100644
--- a/v7/appcompat/res/values-hu/strings.xml
+++ b/v7/appcompat/res/values-hu/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Hangalapú keresés"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Válasszon ki egy alkalmazást"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Összes megtekintése"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Megosztás a következővel: %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Megosztás a következő alkalmazással: <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Megosztás a következővel:"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"BE"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"KI"</string>
diff --git a/v7/appcompat/res/values-hy/strings.xml b/v7/appcompat/res/values-hy/strings.xml
index 872901e..1c41ef6 100644
--- a/v7/appcompat/res/values-hy/strings.xml
+++ b/v7/appcompat/res/values-hy/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ձայնային որոնում"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Ընտրել ծրագիր"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Տեսնել բոլորը"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Կիսվել %s-ի միջոցով"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Ուղարկել <xliff:g id="APPLICATION_NAME">%s</xliff:g>-ին"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Կիսվել"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ՄԻԱՑՎԱԾ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ԱՆՋԱՏՎԱԾ"</string>
diff --git a/v7/appcompat/res/values-in/strings.xml b/v7/appcompat/res/values-in/strings.xml
index 27f1a92..2e9fbb7 100644
--- a/v7/appcompat/res/values-in/strings.xml
+++ b/v7/appcompat/res/values-in/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Penelusuran suara"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Pilih aplikasi"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Lihat semua"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Bagikan dengan %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Bagikan ke <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Bagikan dengan"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"AKTIF"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"NONAKTIF"</string>
diff --git a/v7/appcompat/res/values-is/strings.xml b/v7/appcompat/res/values-is/strings.xml
index 7a95c6d..3f61d84 100644
--- a/v7/appcompat/res/values-is/strings.xml
+++ b/v7/appcompat/res/values-is/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Raddleit"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Veldu forrit"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Sjá allt"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Deila með %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Deila með <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Deila með"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"KVEIKT"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"SLÖKKT"</string>
diff --git a/v7/appcompat/res/values-it/strings.xml b/v7/appcompat/res/values-it/strings.xml
index 9597b8b..fbd2c58 100644
--- a/v7/appcompat/res/values-it/strings.xml
+++ b/v7/appcompat/res/values-it/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ricerca vocale"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Scegli un\'applicazione"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Visualizza tutte"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Condividi con %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Condividi tramite <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Condividi con"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ON"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"OFF"</string>
diff --git a/v7/appcompat/res/values-iw/strings.xml b/v7/appcompat/res/values-iw/strings.xml
index 4163b9a..9ac2072 100644
--- a/v7/appcompat/res/values-iw/strings.xml
+++ b/v7/appcompat/res/values-iw/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"חיפוש קולי"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"בחר אפליקציה"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ראה הכל"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"‏שתף עם %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"שתף עם <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"שתף עם"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"פועל"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"כבוי"</string>
diff --git a/v7/appcompat/res/values-ja/strings.xml b/v7/appcompat/res/values-ja/strings.xml
index 4c7811c..c4d0e20 100644
--- a/v7/appcompat/res/values-ja/strings.xml
+++ b/v7/appcompat/res/values-ja/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"音声検索"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"アプリの選択"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"すべて表示"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%sと共有"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>と共有"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"共有"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ON"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"OFF"</string>
diff --git a/v7/appcompat/res/values-ka/strings.xml b/v7/appcompat/res/values-ka/strings.xml
index 8df5d11..3b077a3 100644
--- a/v7/appcompat/res/values-ka/strings.xml
+++ b/v7/appcompat/res/values-ka/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ხმოვანი ძიება"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"აპის არჩევა"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ყველას ნახვა"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s-თან გაზიარება"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"გაუზიარეთ <xliff:g id="APPLICATION_NAME">%s</xliff:g>-ს"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"გაზიარება:"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ჩართულია"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"გამორთულია"</string>
diff --git a/v7/appcompat/res/values-kk/strings.xml b/v7/appcompat/res/values-kk/strings.xml
index 2035353..c32045b 100644
--- a/v7/appcompat/res/values-kk/strings.xml
+++ b/v7/appcompat/res/values-kk/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Дауыс арқылы іздеу"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Қолданбаны таңдау"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Барлығын көру"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s бөлісу"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> қолданбасымен бөлісу"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Бөлісу"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ҚОСУЛЫ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ӨШІРУЛІ"</string>
diff --git a/v7/appcompat/res/values-km/strings.xml b/v7/appcompat/res/values-km/strings.xml
index b0db2b5..ffe289a 100644
--- a/v7/appcompat/res/values-km/strings.xml
+++ b/v7/appcompat/res/values-km/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ការស្វែងរក​សំឡេង"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"ជ្រើស​កម្មវិធី​​"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"មើល​ទាំងអស់"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"ចែករំលែក​ជាមួយ %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"ចែក​រំលែក​ជា​មួយ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ចែករំលែក​ជាមួយ"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"បើក"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"បិទ"</string>
diff --git a/v7/appcompat/res/values-kn/strings.xml b/v7/appcompat/res/values-kn/strings.xml
index 057f602..4218bd6 100644
--- a/v7/appcompat/res/values-kn/strings.xml
+++ b/v7/appcompat/res/values-kn/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ಧ್ವನಿ ಹುಡುಕಾಟ"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"ಒಂದು ಅಪ್ಲಿಕೇಶನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ಎಲ್ಲವನ್ನೂ ನೋಡಿ"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಿ"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ನೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಿ"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ಇವರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಿ"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ಆನ್"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ಆಫ್"</string>
diff --git a/v7/appcompat/res/values-ko/strings.xml b/v7/appcompat/res/values-ko/strings.xml
index 21d822f..6c84a2a 100644
--- a/v7/appcompat/res/values-ko/strings.xml
+++ b/v7/appcompat/res/values-ko/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"음성 검색"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"앱 선택"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"전체 보기"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s와(과) 공유"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>와(과) 공유"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"공유 대상"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"사용"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"사용 안함"</string>
diff --git a/v7/appcompat/res/values-ky/strings.xml b/v7/appcompat/res/values-ky/strings.xml
index e6f811a..66202f7 100644
--- a/v7/appcompat/res/values-ky/strings.xml
+++ b/v7/appcompat/res/values-ky/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Үн аркылуу издөө"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Колдонмо тандоо"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Бардыгын көрүү"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s аркылуу бөлүшүү"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> аркылуу бөлүшүү"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Бөлүшүү"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"КҮЙҮК"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ӨЧҮК"</string>
diff --git a/v7/appcompat/res/values-lo/strings.xml b/v7/appcompat/res/values-lo/strings.xml
index 44e222f..1b92df0 100644
--- a/v7/appcompat/res/values-lo/strings.xml
+++ b/v7/appcompat/res/values-lo/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ຊອກຫາດ້ວຍສຽງ"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"ເລືອກແອັບຯ"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ເບິ່ງທັງຫມົດ"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"ແບ່ງ​ປັນ​ກັບ​ %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"ແບ່ງປັນດ້ວຍ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ແບ່ງປັນກັບ"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ເປີດ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ປິດ"</string>
diff --git a/v7/appcompat/res/values-lt/strings.xml b/v7/appcompat/res/values-lt/strings.xml
index d88c48e..5793069 100644
--- a/v7/appcompat/res/values-lt/strings.xml
+++ b/v7/appcompat/res/values-lt/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Paieška balsu"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Pasirinkti programą"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Peržiūrėti viską"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Bendrinti naudojant „%s“"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Bendrinti naudojant programą „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Bendrinti naudojant"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ĮJUNGTI"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"IŠJUNGTA"</string>
diff --git a/v7/appcompat/res/values-lv/strings.xml b/v7/appcompat/res/values-lv/strings.xml
index 0f35a3e..67e18d3 100644
--- a/v7/appcompat/res/values-lv/strings.xml
+++ b/v7/appcompat/res/values-lv/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Meklēšana ar balsi"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Izvēlieties lietotni"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Skatīt visu"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Kopīgot ar %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Kopīgot ar lietojumprogrammu <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Kopīgot ar:"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"IESLĒGTS"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"IZSLĒGTS"</string>
diff --git a/v7/appcompat/res/values-mk/strings.xml b/v7/appcompat/res/values-mk/strings.xml
index 4ea23cd..b12a235 100644
--- a/v7/appcompat/res/values-mk/strings.xml
+++ b/v7/appcompat/res/values-mk/strings.xml
@@ -29,9 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Гласовно пребарување"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Избери апликација"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Види ги сите"</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for abc_shareactionprovider_share_with_application (7165123711973476752) -->
-    <skip />
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Сподели со <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Сподели со"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ВКЛУЧЕНО"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ИСКЛУЧЕНО"</string>
diff --git a/v7/appcompat/res/values-ml/strings.xml b/v7/appcompat/res/values-ml/strings.xml
index cd89c76..9033f8a 100644
--- a/v7/appcompat/res/values-ml/strings.xml
+++ b/v7/appcompat/res/values-ml/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ശബ്ദതിരയൽ"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"ഒരു അപ്ലിക്കേഷൻ തിരഞ്ഞെടുക്കുക"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"എല്ലാം കാണുക"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s എന്നതുമായി പങ്കിടുക"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-മായി പങ്കിടുക"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ഇവരുമായി പങ്കിടുക"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ഓൺ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ഓഫ്"</string>
diff --git a/v7/appcompat/res/values-mn/strings.xml b/v7/appcompat/res/values-mn/strings.xml
index cda3d84..56036ea 100644
--- a/v7/appcompat/res/values-mn/strings.xml
+++ b/v7/appcompat/res/values-mn/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Дуут хайлт"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Апп сонгох"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Бүгдийг харах"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s-тай хуваалцах"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-тай хуваалцах"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Хуваалцах"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ИДЭВХТЭЙ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ИДЭВХГҮЙ"</string>
diff --git a/v7/appcompat/res/values-mr/strings.xml b/v7/appcompat/res/values-mr/strings.xml
index 4c97b99..e813edc 100644
--- a/v7/appcompat/res/values-mr/strings.xml
+++ b/v7/appcompat/res/values-mr/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"व्हॉइस शोध"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"एक अ‍ॅप निवडा"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"सर्व पहा"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s सह सामायिक करा"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सह शेअर करा"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"यांच्यासह सामायिक करा"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"चालू"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"बंद"</string>
diff --git a/v7/appcompat/res/values-ms/strings.xml b/v7/appcompat/res/values-ms/strings.xml
index 4fe302a..18f84ce 100644
--- a/v7/appcompat/res/values-ms/strings.xml
+++ b/v7/appcompat/res/values-ms/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Carian suara"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Pilih apl"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Lihat semua"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Kongsi dengan %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Kongsi dengan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Kongsi dengan"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"HIDUP"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"MATI"</string>
diff --git a/v7/appcompat/res/values-my/strings.xml b/v7/appcompat/res/values-my/strings.xml
index 830f6ed..cbc8791 100644
--- a/v7/appcompat/res/values-my/strings.xml
+++ b/v7/appcompat/res/values-my/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"အသံဖြင့် ရှာဖွေခြင်း"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"အက်ပ်တစ်ခုခုကို ရွေးချယ်ပါ"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"အားလုံးကို ကြည့်ရန်"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s ကို မျှဝေပါရန်"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ဖြင့် မျှဝေရန်"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"မျှဝေဖို့ ရွေးပါ"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ဖွင့်"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ပိတ်"</string>
diff --git a/v7/appcompat/res/values-nb/strings.xml b/v7/appcompat/res/values-nb/strings.xml
index 2a9da65..6005234 100644
--- a/v7/appcompat/res/values-nb/strings.xml
+++ b/v7/appcompat/res/values-nb/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Talesøk"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Velg en app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Se alle"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Del med %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Del med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Del med"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"PÅ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"AV"</string>
diff --git a/v7/appcompat/res/values-ne/strings.xml b/v7/appcompat/res/values-ne/strings.xml
index 8625fe2..0d23bd7 100644
--- a/v7/appcompat/res/values-ne/strings.xml
+++ b/v7/appcompat/res/values-ne/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"भ्वाइस खोजी"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"एउटा अनुप्रयोग छान्नुहोस्"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"सबै हेर्नुहोस्"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s सँग साझेदारी गर्नुहोस्"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सँग आदान-प्रदान गर्नुहोस्"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"साझेदारी गर्नुहोस्..."</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"सक्रिय गर्नुहोस्"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"निष्क्रिय पार्नुहोस्"</string>
diff --git a/v7/appcompat/res/values-nl/strings.xml b/v7/appcompat/res/values-nl/strings.xml
index 5ca1d93..e0d2044 100644
--- a/v7/appcompat/res/values-nl/strings.xml
+++ b/v7/appcompat/res/values-nl/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Gesproken zoekopdracht"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Een app selecteren"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Alles weergeven"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Delen met %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Delen met <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Delen met"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"AAN"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"UIT"</string>
diff --git a/v7/appcompat/res/values-pa/strings.xml b/v7/appcompat/res/values-pa/strings.xml
index f495b8f..bc2e6ea 100644
--- a/v7/appcompat/res/values-pa/strings.xml
+++ b/v7/appcompat/res/values-pa/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ਵੌਇਸ ਖੋਜ"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"ਇੱਕ ਐਪ ਚੁਣੋ"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ਸਭ ਦੇਖੋ"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s ਨਾਲ ਸਾਂਝਾ ਕਰੋ"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ਨਾਲ ਸਾਂਝਾ ਕਰੋ"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"ਇਸ ਨਾਲ ਸਾਂਝਾ ਕਰੋ"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ਤੇ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ਬੰਦ"</string>
diff --git a/v7/appcompat/res/values-pl/strings.xml b/v7/appcompat/res/values-pl/strings.xml
index ec49385..d706241 100644
--- a/v7/appcompat/res/values-pl/strings.xml
+++ b/v7/appcompat/res/values-pl/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Wyszukiwanie głosowe"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Wybierz aplikację"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Zobacz wszystkie"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Udostępnij dla %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Udostępnij przez: <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Udostępnij dla"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"WŁ."</string>
     <string name="abc_capital_off" msgid="121134116657445385">"WYŁ."</string>
diff --git a/v7/appcompat/res/values-pt-rBR/strings.xml b/v7/appcompat/res/values-pt-rBR/strings.xml
index 12828e3..90461ec 100644
--- a/v7/appcompat/res/values-pt-rBR/strings.xml
+++ b/v7/appcompat/res/values-pt-rBR/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Pesquisa por voz"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Selecione um app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver tudo"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Compartilhar com %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Compartilhar com <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Compartilhar com"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ATIVAR"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DESATIVAR"</string>
diff --git a/v7/appcompat/res/values-pt-rPT/strings.xml b/v7/appcompat/res/values-pt-rPT/strings.xml
index 3e59366..40f6499 100644
--- a/v7/appcompat/res/values-pt-rPT/strings.xml
+++ b/v7/appcompat/res/values-pt-rPT/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Pesquisa por voz"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Escolher uma aplicação"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver tudo"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Partilhar com %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Partilhar com a aplicação <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Partilhar com"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ATIVADO"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DESATIVADO"</string>
diff --git a/v7/appcompat/res/values-pt/strings.xml b/v7/appcompat/res/values-pt/strings.xml
index 12828e3..90461ec 100644
--- a/v7/appcompat/res/values-pt/strings.xml
+++ b/v7/appcompat/res/values-pt/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Pesquisa por voz"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Selecione um app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Ver tudo"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Compartilhar com %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Compartilhar com <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Compartilhar com"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ATIVAR"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DESATIVAR"</string>
diff --git a/v7/appcompat/res/values-ro/strings.xml b/v7/appcompat/res/values-ro/strings.xml
index a896f19..6d04be9 100644
--- a/v7/appcompat/res/values-ro/strings.xml
+++ b/v7/appcompat/res/values-ro/strings.xml
@@ -29,9 +29,9 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Căutare vocală"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Alegeți o aplicație"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Afișați-le pe toate"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Trimiteți la %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Trimiteți folosind <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Trimiteți la"</string>
-    <string name="abc_capital_on" msgid="3405795526292276155">"ACTIVAȚI"</string>
+    <string name="abc_capital_on" msgid="3405795526292276155">"ACTIVAT"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"DEZACTIVAȚI"</string>
     <string name="search_menu_title" msgid="146198913615257606">"Căutați"</string>
 </resources>
diff --git a/v7/appcompat/res/values-ru/strings.xml b/v7/appcompat/res/values-ru/strings.xml
index f82381b..2b28958 100644
--- a/v7/appcompat/res/values-ru/strings.xml
+++ b/v7/appcompat/res/values-ru/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Голосовой поиск"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Выбрать приложение"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Показать все"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Открыть доступ пользователю %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Открыть доступ приложению \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\""</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Открыть доступ"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ВКЛ."</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ОТКЛ."</string>
diff --git a/v7/appcompat/res/values-si/strings.xml b/v7/appcompat/res/values-si/strings.xml
index 9539746..7631288 100644
--- a/v7/appcompat/res/values-si/strings.xml
+++ b/v7/appcompat/res/values-si/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"හඬ සෙවීම"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"යෙදුමක් තෝරන්න"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"සියල්ල බලන්න"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s සමඟ බෙදාගන්න"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> සමඟ බෙදා ගන්න"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"සමඟ බෙදාගන්න"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ක්‍රියාත්මකයි"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ක්‍රියාවිරහිතයි"</string>
diff --git a/v7/appcompat/res/values-sk/strings.xml b/v7/appcompat/res/values-sk/strings.xml
index cc864b2..03faf14 100644
--- a/v7/appcompat/res/values-sk/strings.xml
+++ b/v7/appcompat/res/values-sk/strings.xml
@@ -29,9 +29,9 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Hlasové vyhľadávanie"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Zvoľte aplikáciu"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Zobraziť všetko"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Zdieľať pomocou %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Zdieľať s aplikáciou <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Zdieľať pomocou"</string>
-    <string name="abc_capital_on" msgid="3405795526292276155">"ZAP."</string>
-    <string name="abc_capital_off" msgid="121134116657445385">"VYP."</string>
+    <string name="abc_capital_on" msgid="3405795526292276155">"ZAPNUTÉ"</string>
+    <string name="abc_capital_off" msgid="121134116657445385">"VYPNUTÉ"</string>
     <string name="search_menu_title" msgid="146198913615257606">"Vyhľadávanie"</string>
 </resources>
diff --git a/v7/appcompat/res/values-sl/strings.xml b/v7/appcompat/res/values-sl/strings.xml
index 5bd2dbf..22b8bd4 100644
--- a/v7/appcompat/res/values-sl/strings.xml
+++ b/v7/appcompat/res/values-sl/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Glasovno iskanje"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Izbira aplikacije"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Pokaži vse"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Deljenje z:"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Deljenje z drugimi prek aplikacije <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Deljenje z"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"VKLOPLJENO"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"IZKLOPLJENO"</string>
diff --git a/v7/appcompat/res/values-sq/strings.xml b/v7/appcompat/res/values-sq/strings.xml
index aff2307..1a1f02e 100644
--- a/v7/appcompat/res/values-sq/strings.xml
+++ b/v7/appcompat/res/values-sq/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Kërkim me zë"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Zgjidh një aplikacion"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Shikoji të gjitha"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Shpërnda publikisht me %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Ndaje me <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Shpërnda publikisht me"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"AKTIV"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"JOAKTIV"</string>
diff --git a/v7/appcompat/res/values-sr/strings.xml b/v7/appcompat/res/values-sr/strings.xml
index 602cc6d..5678341 100644
--- a/v7/appcompat/res/values-sr/strings.xml
+++ b/v7/appcompat/res/values-sr/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Гласовна претрага"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Избор апликације"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Прикажи све"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Дели са апликацијом %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Дељење са апликацијом <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Дели са"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"УКЉУЧИ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ИСКЉУЧИ"</string>
diff --git a/v7/appcompat/res/values-sv/strings.xml b/v7/appcompat/res/values-sv/strings.xml
index 832ecc5..62d470f 100644
--- a/v7/appcompat/res/values-sv/strings.xml
+++ b/v7/appcompat/res/values-sv/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Röstsökning"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Välj en app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Visa alla"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Dela med %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Dela med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Dela med"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"PÅ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"AV"</string>
diff --git a/v7/appcompat/res/values-sw/strings.xml b/v7/appcompat/res/values-sw/strings.xml
index a5f412a..c575ae0 100644
--- a/v7/appcompat/res/values-sw/strings.xml
+++ b/v7/appcompat/res/values-sw/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Tafuta kwa kutamka"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Chagua programu"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Angalia zote"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Shiriki na %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Shiriki ukitumia <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Shiriki na:"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"IMEWASHWA"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"IMEZIMWA"</string>
diff --git a/v7/appcompat/res/values-ta/strings.xml b/v7/appcompat/res/values-ta/strings.xml
index 4d15da8..7daeaaf 100644
--- a/v7/appcompat/res/values-ta/strings.xml
+++ b/v7/appcompat/res/values-ta/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"குரல் தேடல்"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"பயன்பாட்டைத் தேர்வுசெய்க"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"எல்லாம் காட்டு"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s உடன் பகிர்"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> மூலம் பகிர்"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"இதனுடன் பகிர்"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"இயக்கு"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"முடக்கு"</string>
diff --git a/v7/appcompat/res/values-te/strings.xml b/v7/appcompat/res/values-te/strings.xml
index f31f637..93f9aec 100644
--- a/v7/appcompat/res/values-te/strings.xml
+++ b/v7/appcompat/res/values-te/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"వాయిస్ శోధన"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"అనువర్తనాన్ని ఎంచుకోండి"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"అన్నీ చూడండి"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%sతో భాగస్వామ్యం చేయి"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>తో భాగస్వామ్యం చేయండి"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"వీరితో భాగస్వామ్యం చేయి"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"ఆన్ చేయి"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ఆఫ్ చేయి"</string>
diff --git a/v7/appcompat/res/values-th/strings.xml b/v7/appcompat/res/values-th/strings.xml
index 1dcd0ca..f8ea1cd 100644
--- a/v7/appcompat/res/values-th/strings.xml
+++ b/v7/appcompat/res/values-th/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"ค้นหาด้วยเสียง"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"เลือกแอป"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"ดูทั้งหมด"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"แชร์กับ %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"แชร์ทาง <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"แชร์กับ"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"เปิด"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ปิด"</string>
diff --git a/v7/appcompat/res/values-tl/strings.xml b/v7/appcompat/res/values-tl/strings.xml
index 8bc2f9d..1ad2689 100644
--- a/v7/appcompat/res/values-tl/strings.xml
+++ b/v7/appcompat/res/values-tl/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Paghahanap gamit ang boses"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Pumili ng isang app"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Tingnan lahat"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Ibahagi sa/kay %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Ibahagi gamit ang <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Ibahagi sa/kay"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"I-ON"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"I-OFF"</string>
diff --git a/v7/appcompat/res/values-tr/strings.xml b/v7/appcompat/res/values-tr/strings.xml
index adf2b47..fae41d3 100644
--- a/v7/appcompat/res/values-tr/strings.xml
+++ b/v7/appcompat/res/values-tr/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Sesli arama"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Bir uygulama seçin"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Tümünü göster"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%s ile paylaş"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ile paylaş"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Şununla paylaş"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"AÇ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"KAPAT"</string>
diff --git a/v7/appcompat/res/values-uk/strings.xml b/v7/appcompat/res/values-uk/strings.xml
index bfd0027..afc74ff 100644
--- a/v7/appcompat/res/values-uk/strings.xml
+++ b/v7/appcompat/res/values-uk/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Голосовий пошук"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Вибрати програму"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Переглянути всі"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Надіслати через %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Поділитися через додаток <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Надіслати через"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"УВІМК."</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ВИМК."</string>
diff --git a/v7/appcompat/res/values-ur/strings.xml b/v7/appcompat/res/values-ur/strings.xml
index e0d13e7..60ec34a 100644
--- a/v7/appcompat/res/values-ur/strings.xml
+++ b/v7/appcompat/res/values-ur/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"صوتی تلاش"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"ایک ایپ منتخب کریں"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"سبھی دیکھیں"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"‏%s کے ساتھ اشتراک کریں"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> کے ساتھ اشتراک کریں"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"اشتراک کریں مع"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"آن"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"آف"</string>
diff --git a/v7/appcompat/res/values-uz/strings.xml b/v7/appcompat/res/values-uz/strings.xml
index ef8cc2a..632e0b9 100644
--- a/v7/appcompat/res/values-uz/strings.xml
+++ b/v7/appcompat/res/values-uz/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ovozli qidiruv"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Dastur tanlang"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Barchasini ko‘rish"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"%sga ruxsat berish"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> orqali ulashish"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Ruxsat berish"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"YONIQ"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"O‘CHIQ"</string>
diff --git a/v7/appcompat/res/values-vi/strings.xml b/v7/appcompat/res/values-vi/strings.xml
index 8d97f7e..9587bed 100644
--- a/v7/appcompat/res/values-vi/strings.xml
+++ b/v7/appcompat/res/values-vi/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Tìm kiếm bằng giọng nói"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Chọn một ứng dụng"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Xem tất cả"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Chia sẻ với %s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Chia sẻ với <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Chia sẻ với"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"BẬT"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"TẮT"</string>
diff --git a/v7/appcompat/res/values-zh-rCN/strings.xml b/v7/appcompat/res/values-zh-rCN/strings.xml
index 110e25c..7b23457 100644
--- a/v7/appcompat/res/values-zh-rCN/strings.xml
+++ b/v7/appcompat/res/values-zh-rCN/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"语音搜索"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"选择应用"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"查看全部"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"通过%s分享"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"使用<xliff:g id="APPLICATION_NAME">%s</xliff:g>分享"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"分享方式"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"开启"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"关闭"</string>
diff --git a/v7/appcompat/res/values-zh-rHK/strings.xml b/v7/appcompat/res/values-zh-rHK/strings.xml
index b639e4b..fc32117 100644
--- a/v7/appcompat/res/values-zh-rHK/strings.xml
+++ b/v7/appcompat/res/values-zh-rHK/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"語音搜尋"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"選擇應用程式"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"顯示全部"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"與「%s」分享"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"使用「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」分享"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"分享對象"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"開啟"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"關閉"</string>
diff --git a/v7/appcompat/res/values-zh-rTW/strings.xml b/v7/appcompat/res/values-zh-rTW/strings.xml
index 5c9656d..35be873 100644
--- a/v7/appcompat/res/values-zh-rTW/strings.xml
+++ b/v7/appcompat/res/values-zh-rTW/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"語音搜尋"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"選擇應用程式"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"查看全部"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"與「%s」分享"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"與「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」分享"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"選擇分享對象"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"開啟"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"關閉"</string>
diff --git a/v7/appcompat/res/values-zu/strings.xml b/v7/appcompat/res/values-zu/strings.xml
index 79b0079..e84ba7a 100644
--- a/v7/appcompat/res/values-zu/strings.xml
+++ b/v7/appcompat/res/values-zu/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ukusesha ngezwi"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Khetha uhlelo lokusebenza"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Buka konke"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="7165123711973476752">"Yabelana no-%s"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Yabelana ne-<xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Yabelana no-"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"VULIWE"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"VALIWE"</string>
diff --git a/v7/gridlayout/build.gradle b/v7/gridlayout/build.gradle
index 9ec6714..db85eda 100644
--- a/v7/gridlayout/build.gradle
+++ b/v7/gridlayout/build.gradle
@@ -4,12 +4,8 @@
     api project(':support-compat')
     api project(':support-core-ui')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner,   { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core, { exclude module: 'support-annotations' }
 }
 
 android {
@@ -20,8 +16,6 @@
     sourceSets {
         main.java.srcDir 'src'
         main.res.srcDir 'res'
-        main.assets.srcDir 'assets'
-        main.resources.srcDir 'src'
     }
 }
 
diff --git a/v7/mediarouter/build.gradle b/v7/mediarouter/build.gradle
index 54c720b..59ecb17 100644
--- a/v7/mediarouter/build.gradle
+++ b/v7/mediarouter/build.gradle
@@ -4,12 +4,8 @@
     api project(":appcompat-v7")
     api project(":palette-v7")
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner,   { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core, { exclude module: 'support-annotations' }
     androidTestImplementation libs.test_rules
 }
 
diff --git a/v7/mediarouter/res/values-be/strings.xml b/v7/mediarouter/res/values-be/strings.xml
index 2d80bca..396088f 100644
--- a/v7/mediarouter/res/values-be/strings.xml
+++ b/v7/mediarouter/res/values-be/strings.xml
@@ -22,7 +22,7 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Кнопка трансляцыі. Адключана"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Кнопка трансляцыі. Ідзе падключэнне"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Кнопка трансляцыі. Падключана"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"Трансляваць на"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"Трансліраваць на"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"Пошук прылад"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Адлучыць"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Спыніць трансляцыю"</string>
diff --git a/v7/mediarouter/res/values-bs/strings.xml b/v7/mediarouter/res/values-bs/strings.xml
index 245b9da..ab9575e 100644
--- a/v7/mediarouter/res/values-bs/strings.xml
+++ b/v7/mediarouter/res/values-bs/strings.xml
@@ -18,11 +18,11 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mr_system_route_name" msgid="5441529851481176817">"Sistem"</string>
     <string name="mr_user_route_category_name" msgid="7498112907524977311">"Uređaji"</string>
-    <string name="mr_button_content_description" msgid="3698378085901466129">"Dugme za prebacivanje"</string>
-    <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Dugme za prebacivanje. Veza je prekinuta"</string>
-    <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Dugme za prebacivanje. Povezivanje"</string>
-    <string name="mr_cast_button_connected" msgid="5088427771788648085">"Dugme za prebacivanje. Povezan"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"Prebacujte na"</string>
+    <string name="mr_button_content_description" msgid="3698378085901466129">"Dugme za emitiranje"</string>
+    <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Dugme za emitiranje. Veza je prekinuta"</string>
+    <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Dugme za emitiranje. Povezivanje"</string>
+    <string name="mr_cast_button_connected" msgid="5088427771788648085">"Dugme za emitiranje. Povezano"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"Emitiranje na"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"Traženje uređaja"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Prekini vezu"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Zaustavi prebacivanje"</string>
diff --git a/v7/mediarouter/res/values-fr/strings.xml b/v7/mediarouter/res/values-fr/strings.xml
index be50201..47a7c6b 100644
--- a/v7/mediarouter/res/values-fr/strings.xml
+++ b/v7/mediarouter/res/values-fr/strings.xml
@@ -23,7 +23,7 @@
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Icône Cast. Connexion…"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Icône Cast. Connecté"</string>
     <string name="mr_chooser_title" msgid="414301941546135990">"Caster sur"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"Recherche d\'appareils en cours…"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"Recherche d\'appareils…"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Déconnecter"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Arrêter la diffusion"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"Fermer"</string>
diff --git a/v7/mediarouter/res/values-gl/strings.xml b/v7/mediarouter/res/values-gl/strings.xml
index 7e38bb4..e509ab7 100644
--- a/v7/mediarouter/res/values-gl/strings.xml
+++ b/v7/mediarouter/res/values-gl/strings.xml
@@ -22,7 +22,7 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Botón de emitir. Desconectado"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Botón de emitir. Conectando"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Botón de emitir. Conectado"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"Emitir en"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"Emitir a"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"Buscando dispositivos"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Desconectar"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Deter emisión"</string>
diff --git a/v7/mediarouter/res/values-iw/strings.xml b/v7/mediarouter/res/values-iw/strings.xml
index 3e7bc50..02f50ff 100644
--- a/v7/mediarouter/res/values-iw/strings.xml
+++ b/v7/mediarouter/res/values-iw/strings.xml
@@ -22,7 +22,7 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"‏לחצן הפעלת Cast. מנותק"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"‏לחצן הפעלת Cast. מתחבר"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"‏לחצן הפעלת Cast. מחובר"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"העבר אל"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"העברה אל"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"מחפש מכשירים"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"נתק"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"הפסק את ההעברה"</string>
diff --git a/v7/mediarouter/res/values-ka/strings.xml b/v7/mediarouter/res/values-ka/strings.xml
index 57b76e9..22480ca 100644
--- a/v7/mediarouter/res/values-ka/strings.xml
+++ b/v7/mediarouter/res/values-ka/strings.xml
@@ -22,8 +22,8 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"ტრანსლირების ღილაკი. გათიშული"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"ტრანსლირების ღილაკი. მიმდინარეობს დაკავშირება"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"ტრანსლირების ღილაკი. დაკავშირებული"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"ტრანსლირებული"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"მიმდინარეობს მოწყობილობების მოძიება"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"ტრანსლირება:"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"მოწყობილობების მოძიება..."</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"კავშირის გაწყვეტა"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"ტრანსლირების შეწყვეტა"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"დახურვა"</string>
diff --git a/v7/mediarouter/res/values-km/strings.xml b/v7/mediarouter/res/values-km/strings.xml
index e9bef13..f9f339d 100644
--- a/v7/mediarouter/res/values-km/strings.xml
+++ b/v7/mediarouter/res/values-km/strings.xml
@@ -22,8 +22,8 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"ខាសប៊ូតុង៖ បានកាត់ផ្តាច់"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"ខាសប៊ូតុង៖ កំពុងភ្ជាប់"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"ខាសប៊ូតុង៖ បានភ្ជាប់ហើយ"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"ខាសទៅ"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"ស្វែងរកឧបករណ៍"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"បញ្ជូនទៅ"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"កំពុងស្វែងរកឧបករណ៍"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"ផ្ដាច់"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"ឈប់ភ្ជាប់"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"បិទ"</string>
diff --git a/v7/mediarouter/res/values-lo/strings.xml b/v7/mediarouter/res/values-lo/strings.xml
index e0703e8..d50ae66 100644
--- a/v7/mediarouter/res/values-lo/strings.xml
+++ b/v7/mediarouter/res/values-lo/strings.xml
@@ -22,7 +22,7 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"ປຸ່ມສົ່ງສັນຍານ. ຕັດການເຊື່ອມຕໍ່ແລ້ວ"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"ປຸ່ມສົ່ງສັນຍານ. ກຳລັງເຊື່ອມຕໍ່"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"ປຸ່ມສົ່ງສັນຍານ. ເຊື່ອມຕໍ່ແລ້ວ"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"ຄາ​ສ​ທ໌​ຫາ"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"ສົ່ງສັນຍານຫາ"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"ກຳລັງ​ຊອກ​ຫາ​ອຸ​ປະ​ກອນ"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"ຕັດການເຊື່ອມຕໍ່"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"ຢຸດການສົ່ງສັນຍານ"</string>
diff --git a/v7/mediarouter/res/values-mk/strings.xml b/v7/mediarouter/res/values-mk/strings.xml
index ae1bfee..d5b9365 100644
--- a/v7/mediarouter/res/values-mk/strings.xml
+++ b/v7/mediarouter/res/values-mk/strings.xml
@@ -23,7 +23,7 @@
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Копче за Cast. Се поврзува"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Копче за Cast. Поврзано"</string>
     <string name="mr_chooser_title" msgid="414301941546135990">"Емитувај на"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"Наоѓање уреди"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"Се бараат уреди"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Исклучи"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Сопри го емитувањето"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"Затвори"</string>
diff --git a/v7/mediarouter/res/values-my/strings.xml b/v7/mediarouter/res/values-my/strings.xml
index eb33498..fb0074d 100644
--- a/v7/mediarouter/res/values-my/strings.xml
+++ b/v7/mediarouter/res/values-my/strings.xml
@@ -22,7 +22,7 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"ကာစ်ခလုတ်။ ချိတ်ဆက်မထားပါ"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"ကာစ်ခလုတ်။ ချိတ်ဆက်နေသည်"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"ကာစ်ခလုတ်။ ချိတ်ဆက်ထားသည်"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"သို့ ကာစ်တ်လုပ်ရန်"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"ကာစ်လုပ်ရန် စက်"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"စက်ပစ္စည်းများ ရှာဖွေခြင်း"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"ဆက်သွယ်မှု ဖြတ်ရန်"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"ကာစ်လုပ်ခြင်း ရပ်ရန်"</string>
diff --git a/v7/mediarouter/res/values-nb/strings.xml b/v7/mediarouter/res/values-nb/strings.xml
index d31aa73..7c99442 100644
--- a/v7/mediarouter/res/values-nb/strings.xml
+++ b/v7/mediarouter/res/values-nb/strings.xml
@@ -23,7 +23,7 @@
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Cast-knappen. Kobler til"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Cast-knappen. Tilkoblet"</string>
     <string name="mr_chooser_title" msgid="414301941546135990">"Cast til"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"Finner enheter"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"Søker etter enheter"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Koble fra"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Stopp castingen"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"Lukk"</string>
diff --git a/v7/mediarouter/res/values-pa/strings.xml b/v7/mediarouter/res/values-pa/strings.xml
index e058e18..f1a1a30 100644
--- a/v7/mediarouter/res/values-pa/strings.xml
+++ b/v7/mediarouter/res/values-pa/strings.xml
@@ -22,8 +22,8 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"ਕਾਸਟ ਬਟਨ। ਡਿਸਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"ਕਾਸਟ ਬਟਨ। ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"ਕਾਸਟ ਬਟਨ। ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"ਇਸ ਨਾਲ ਕਾਸਟ ਕਰੋ"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"ਡਿਵਾਈਸਾਂ ਲੱਭ ਰਿਹਾ ਹੈ"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"ਏਥੇ ਕਾਸਟ ਕਰੋ"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"ਡੀਵਾਈਸਾਂ ਨੂੰ ਲੱਭਿਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"ਕਾਸਟ ਕਰਨਾ ਬੰਦ ਕਰੋ"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"ਬੰਦ ਕਰੋ"</string>
diff --git a/v7/mediarouter/res/values-sk/strings.xml b/v7/mediarouter/res/values-sk/strings.xml
index 2df58ef..43a769a 100644
--- a/v7/mediarouter/res/values-sk/strings.xml
+++ b/v7/mediarouter/res/values-sk/strings.xml
@@ -23,7 +23,7 @@
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Tlačidlo prenosu. Pripája sa"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Tlačidlo prenosu. Pripojené"</string>
     <string name="mr_chooser_title" msgid="414301941546135990">"Prenos do"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"Vyhľadávanie zariadení"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"Hľadajú sa zariadenia"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Odpojiť"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Zastaviť prenášanie"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"Zavrieť"</string>
diff --git a/v7/mediarouter/res/values-sq/strings.xml b/v7/mediarouter/res/values-sq/strings.xml
index 9f75316..d3cae18 100644
--- a/v7/mediarouter/res/values-sq/strings.xml
+++ b/v7/mediarouter/res/values-sq/strings.xml
@@ -23,7 +23,7 @@
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Butoni i transmetimit. Po lidhet"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Butoni i transmetimit. Je i lidhur"</string>
     <string name="mr_chooser_title" msgid="414301941546135990">"Transmeto te"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"Gjetja e pajisjeve"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"Po kërkon pajisje"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Shkëpute"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Ndalo transmetimin"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"Mbyll"</string>
diff --git a/v7/mediarouter/res/values-uz/strings.xml b/v7/mediarouter/res/values-uz/strings.xml
index fae6076..2f9a8a2 100644
--- a/v7/mediarouter/res/values-uz/strings.xml
+++ b/v7/mediarouter/res/values-uz/strings.xml
@@ -33,7 +33,7 @@
     <string name="mr_controller_expand_group" msgid="8062427022744266907">"Yoyish"</string>
     <string name="mr_controller_collapse_group" msgid="7924809056904240926">"Yig‘ish"</string>
     <string name="mr_controller_album_art" msgid="6422801843540543585">"Albom muqovasi"</string>
-    <string name="mr_controller_volume_slider" msgid="2361785992211841709">"Ovoz balandligi slayderi"</string>
+    <string name="mr_controller_volume_slider" msgid="2361785992211841709">"Tovush balandligi slayderi"</string>
     <string name="mr_controller_no_media_selected" msgid="6547130360349182381">"Multimedia tanlamagan"</string>
     <string name="mr_controller_no_info_available" msgid="5585418471741142924">"Hech qanday ma’lumot yo‘q"</string>
     <string name="mr_controller_casting_screen" msgid="4868457957151124867">"Ekranni translatsiya qilish"</string>
diff --git a/v7/mediarouter/res/values-vi/strings.xml b/v7/mediarouter/res/values-vi/strings.xml
index 5801c4f..3fbc252 100644
--- a/v7/mediarouter/res/values-vi/strings.xml
+++ b/v7/mediarouter/res/values-vi/strings.xml
@@ -23,7 +23,7 @@
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Nút truyền. Đang kết nối"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Nút truyền. Đã kết nối"</string>
     <string name="mr_chooser_title" msgid="414301941546135990">"Truyền tới"</string>
-    <string name="mr_chooser_searching" msgid="6349900579507521956">"Tìm thiết bị"</string>
+    <string name="mr_chooser_searching" msgid="6349900579507521956">"Đang tìm thiết bị"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Ngắt kết nối"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Dừng truyền"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"Đóng"</string>
diff --git a/v7/palette/build.gradle b/v7/palette/build.gradle
index e4670a7..f945327 100644
--- a/v7/palette/build.gradle
+++ b/v7/palette/build.gradle
@@ -4,9 +4,7 @@
     api project(':support-compat')
     api project(':support-core-utils')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner, { exclude module: 'support-annotations' }
 }
 
 android {
diff --git a/v7/preference/build.gradle b/v7/preference/build.gradle
index 65e78f0..ee31034 100644
--- a/v7/preference/build.gradle
+++ b/v7/preference/build.gradle
@@ -21,14 +21,10 @@
     api project(':appcompat-v7')
     api project(':recyclerview-v7')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
 }
 
 android {
diff --git a/v7/recyclerview/api/26.1.0-SNAPSHOT.txt b/v7/recyclerview/api/26.1.0-SNAPSHOT.txt
index 4e7e14d..9b4500a 100644
--- a/v7/recyclerview/api/26.1.0-SNAPSHOT.txt
+++ b/v7/recyclerview/api/26.1.0-SNAPSHOT.txt
@@ -307,6 +307,7 @@
     method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
     method public android.support.v7.widget.RecyclerView.ItemAnimator getItemAnimator();
     method public android.support.v7.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+    method public int getItemDecorationCount();
     method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
     method public int getMaxFlingVelocity();
     method public int getMinFlingVelocity();
@@ -330,6 +331,7 @@
     method public void onScrollStateChanged(int);
     method public void onScrolled(int, int);
     method public void removeItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+    method public void removeItemDecorationAt(int);
     method public void removeOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
     method public void removeOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
     method public void removeOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
diff --git a/v7/recyclerview/build.gradle b/v7/recyclerview/build.gradle
index cde85e5..beec61e 100644
--- a/v7/recyclerview/build.gradle
+++ b/v7/recyclerview/build.gradle
@@ -5,22 +5,16 @@
     api project(':support-compat')
     api project(':support-core-ui')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
     androidTestImplementation libs.junit
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
     androidTestImplementation project(':support-testutils')
 
     testImplementation libs.junit
     testImplementation libs.mockito_core
-    testImplementation ("$libs.test_runner") {
-        exclude module: 'support-annotations'
-    }
+    testImplementation libs.test_runner, { exclude module: 'support-annotations' }
 }
 
 android {
diff --git a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java b/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
index 5bb9100..eacae37 100644
--- a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
+++ b/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
@@ -1488,14 +1488,38 @@
      * @return the ItemDecoration at index position, or null if invalid index.
      */
     public ItemDecoration getItemDecorationAt(int index) {
-        if (index < 0 || index >= mItemDecorations.size()) {
-            return null;
+        final int size = getItemDecorationCount();
+        if (index < 0 || index >= size) {
+            throw new IndexOutOfBoundsException(index + " is an invalid index for size " + size);
         }
 
         return mItemDecorations.get(index);
     }
 
     /**
+     * Returns the number of {@link ItemDecoration} currently added to this RecyclerView.
+     *
+     * @return number of ItemDecorations currently added added to this RecyclerView.
+     */
+    public int getItemDecorationCount() {
+        return mItemDecorations.size();
+    }
+
+    /**
+     * Removes the {@link ItemDecoration} associated with the supplied index position.
+     *
+     * @param index The index position of the ItemDecoration to be removed.
+     */
+    public void removeItemDecorationAt(int index) {
+        final int size = getItemDecorationCount();
+        if (index < 0 || index >= size) {
+            throw new IndexOutOfBoundsException(index + " is an invalid index for size " + size);
+        }
+
+        removeItemDecoration(getItemDecorationAt(index));
+    }
+
+    /**
      * Remove an {@link ItemDecoration} from this RecyclerView.
      *
      * <p>The given decoration will no longer impact the measurement and drawing of
diff --git a/v7/recyclerview/src/android/support/v7/widget/SnapHelper.java b/v7/recyclerview/src/android/support/v7/widget/SnapHelper.java
index d85a27a..4c41370 100644
--- a/v7/recyclerview/src/android/support/v7/widget/SnapHelper.java
+++ b/v7/recyclerview/src/android/support/v7/widget/SnapHelper.java
@@ -229,6 +229,10 @@
         return new LinearSmoothScroller(mRecyclerView.getContext()) {
             @Override
             protected void onTargetFound(View targetView, RecyclerView.State state, Action action) {
+                if (mRecyclerView == null) {
+                    // The associated RecyclerView has been removed so there is no action to take.
+                    return;
+                }
                 int[] snapDistances = calculateDistanceToFinalSnap(mRecyclerView.getLayoutManager(),
                         targetView);
                 final int dx = snapDistances[0];
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFastScrollerTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFastScrollerTest.java
index dba3770..401b359 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFastScrollerTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFastScrollerTest.java
@@ -260,6 +260,7 @@
         getInstrumentation().waitForIdleSync();
         RecyclerView view = (RecyclerView) getActivity().findViewById(
                 android.support.v7.recyclerview.test.R.id.recycler_view);
+        assertTrue(view.getItemDecorationCount() == 1);
         assertTrue(view.getItemDecorationAt(0) instanceof FastScroller);
         FastScroller scroller = (FastScroller) view.getItemDecorationAt(0);
         assertNotNull(scroller.getHorizontalThumbDrawable());
@@ -268,6 +269,22 @@
         assertNotNull(scroller.getVerticalTrackDrawable());
     }
 
+    @Test
+    public void removeFastScrollerSuccessful() throws Throwable {
+        setContentView(android.support.v7.recyclerview.test.R.layout.fast_scrollbar_test_rv);
+        getInstrumentation().waitForIdleSync();
+        final RecyclerView view = (RecyclerView) getActivity().findViewById(
+                android.support.v7.recyclerview.test.R.id.recycler_view);
+        assertTrue(view.getItemDecorationCount() == 1);
+        mActivityRule.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                view.removeItemDecorationAt(0);
+                assertTrue(view.getItemDecorationCount() == 0);
+            }
+        });
+    }
+
     @UiThreadTest
     @Test
     public void initWithBadDrawables() throws Throwable {
diff --git a/wear/build.gradle b/wear/build.gradle
index 4507e2c..12ab4d2 100644
--- a/wear/build.gradle
+++ b/wear/build.gradle
@@ -6,14 +6,10 @@
     api project(':percent')
     api project(':recyclerview-v7')
 
-    androidTestImplementation (libs.test_runner) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation (libs.espresso_core) {
-        exclude module: 'support-annotations'
-    }
-    androidTestImplementation libs.mockito_core
-    androidTestImplementation libs.dexmaker_mockito
+    androidTestImplementation libs.test_runner,      { exclude module: 'support-annotations' }
+    androidTestImplementation libs.espresso_core,    { exclude module: 'support-annotations' }
+    androidTestImplementation libs.mockito_core,     { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+    androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
 }
 
 android {
diff --git a/wear/lint-baseline.xml b/wear/lint-baseline.xml
index 81531cf..e961253 100644
--- a/wear/lint-baseline.xml
+++ b/wear/lint-baseline.xml
@@ -1,30 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <issues format="4" by="lint 3.0.0-alpha7">
 
-    <issue
-        id="DuplicateIds"
-        message="Duplicate id `@+id/off`, already defined earlier in this layout"
-        errorLine1="        android:id=&quot;@+id/off&quot;"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable-v21/ws_switch_thumb_material_anim.xml"
-            line="27"
-            column="9"/>
-        <location
-            file="res/drawable-v21/ws_switch_thumb_material_anim.xml"
-            line="19"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="ResourceAsColor"
-        message="Should pass resolved color instead of resource id here: `getResources().getColor(android.R.color.darker_gray)`"
-        errorLine1="            mCircleColor = ColorStateList.valueOf(android.R.color.darker_gray);"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/android/support/wear/widget/CircledImageView.java"
-            line="148"
-            column="51"/>
-    </issue>
-
 </issues>
diff --git a/wear/res/drawable-v21/ws_switch_thumb_material_anim.xml b/wear/res/drawable-v21/ws_switch_thumb_material_anim.xml
index 15423e5..56e6864 100644
--- a/wear/res/drawable-v21/ws_switch_thumb_material_anim.xml
+++ b/wear/res/drawable-v21/ws_switch_thumb_material_anim.xml
@@ -24,7 +24,7 @@
         android:drawable="@drawable/ws_switch_thumb_mtrl_14w"
         android:state_checked="true" />
     <item
-        android:id="@+id/off"
+        android:id="@id/off"
         android:drawable="@drawable/ws_switch_thumb_mtrl_14w" />
     <transition
         android:fromId="@id/off"
diff --git a/wear/src/android/support/wear/widget/CircledImageView.java b/wear/src/android/support/wear/widget/CircledImageView.java
index e21a1ab..03ed8c9 100644
--- a/wear/src/android/support/wear/widget/CircledImageView.java
+++ b/wear/src/android/support/wear/widget/CircledImageView.java
@@ -145,7 +145,7 @@
 
         mCircleColor = a.getColorStateList(R.styleable.CircledImageView_background_color);
         if (mCircleColor == null) {
-            mCircleColor = ColorStateList.valueOf(android.R.color.darker_gray);
+            mCircleColor = ColorStateList.valueOf(context.getColor(android.R.color.darker_gray));
         }
 
         mCircleRadius = a.getDimension(R.styleable.CircledImageView_background_radius, 0);